[][src]Crate cannyls

Canny Lump Storage.

cannylsは、予測可能なレイテンシの提供を目的として設計された、ローカル用のkey-valueストレージ.

特徴

  • 128bitのIDを有するlump群を保持するためのストレージ(ローカルKVS)
    • メモリ使用量を抑えるために固定長のIDを採用
  • (主に)HTTPのGET/PUT/DELETE相当の操作をlumpに対して実行可能
  • 各操作にはdeadlineという時間軸ベースの優先順位を指定可能
  • 一つの物理デバイス(e.g., HDD)に対して、一つのdevice管理スレッドが割り当てられて、リクエストがスケジューリングされる
    • 一つの物理デバイスに対するI/O命令は、全てこの管理スレッド上で直列化されて処理される
    • 直列化 という特性上、HDDと相性が良い (逆にSSDの場合には性能が活用しきれない可能性がある)
  • キャッシュ層を備えず、各操作で発行されるディスクI/O回数が(ほぼ)正確に予測可能:
    • GET/DELETE: 一回
    • PUT: 最大二回
    • ※ 実際にはバックグランド処理(e.g., GC)用のI/Oが発行されることがあるので、上記の値は償却された回数となる
  • "lusf"というストレージフォーマット(v1.0)を定義および使用している
  • 最大で512TBの容量の物理デバイス(e.g., HDD)をサポート
  • 冗長化やデータの整合性保証等は行わない

モジュールの依存関係

device => storage => nvm
  • deviceモジュール:
    • 主にDevice構造体を提供
    • cannylsの利用者が直接触るのはこの構造体
    • Storageを制御するための管理スレッドを起動し、それに対するリクエスト群のスケジューリング等を担当する
  • storageモジュール:
  • nvmモジュール:
    • 主にNonVolatileMemoryトレイトとその実装であるFileNvmを提供
    • storageに対して永続化層を提供するのが目的
    • 現時点では未実装だが、ブロックデバイスを直接操作するNonVolatileMemory実装を用意することで、 OS層を完全にバイパスすることも可能

アーキテクチャの詳細

Wikiを参照のこと。

Modules

block

ストレージやNVMのブロック(読み書きの際の最小単位)関連の構成要素.

deadline

デバイスに対する各種操作のデッドライン.

device

Lump群を格納用のデバイス.

lump

Lump関連のデータ構造群.

metrics

Prometheus用のメトリクス.

nvm

不揮発性メモリのインターフェース定義と実装群.

storage

Lump用のストレージ.

Structs

Error

crate固有のエラー型.

Enums

ErrorKind

発生し得るエラーの種別.

Type Definitions

Result

crate固有のResult型.