Skip to content
Takeru Ohta edited this page Oct 17, 2018 · 1 revision

CannyLS (Canny Lump Storage)

CannyLSは、以下の特徴を有するRust製の組み込み永続性KVS:

  • "lump"と呼ばれるオブジェクトを格納するためのストレージ:
    • lumpは基本的には単なるkey-valueエントリ
    • キーは 固定長(128bit) で、比較的大きなサイズ(e.g., 数MB)の値を想定している
  • 提供する機能はシンプル:
  • ランダムアクセスなワークロードにおいて、大容量HDDの性能を最大化:
    • 各HDDに付き、最大で512TBまでの容量をサポート
    • 性能の詳細はベンチマーク結果を参照のこと
  • 予測可能かつ安定した読み書きレイテンシの提供が目標:
    • 各種操作時に発生するディスクアクセス回数の上限が決まっている (GET/DELETEなら一回、PUTなら二回)
    • コンパクションやストップ・ザ・ワールドGCのような通常操作を長時間ブロックする可能性のあるバックグラウンド処理が存在しない
    • オーバヘッドや不確実性を排除するために、cannyls内にはキャッシュ層も存在しない:
      • またダイレクトI/OによってOS層のキャッシュもバイパスしている
      • キャッシュ管理が必要なら上位層(利用者側)で実現する
  • Prometheusによる詳細なメトリクスの提供

一言で表すなら「機能とオーバヘッドは極力抑えて、ランダムアクセスなワークロードにおいて、ディスクの活用効率とレイテンシの安定性を最大化する」ことを目指して開発されている組み込みストレージである。

CannyLSはドワンゴでは、niconicoの動画や生放送タイムシフトの保存・配信を行うための分散ミドルウェアのローカルストレージ層として利用されている。

Wikiの構成と対象読者

  • とりあえず動かしてみたい人はGetting Startedを読むと良い
  • アーキテクチャの概要を把握したいならOverviewに記載がある
  • 分からない用語に遭遇した場合はTerminologyに説明があるかもしれない
  • 性能特性を把握したいならBenchmarkに競合ライブラリとの比較を含めたベンチマーク結果がある
  • 実際に使い始めて、自分の環境での性能把握やモニタリングを行いたくなった場合にはMetricsが助けとなる

なおCannyLSが提供している詳細なAPIに関してはrustdocのドキュメントを参照のこと。