[−][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モジュール:
- storageモジュール:
- 主にStorage構造体を提供
- nvmを永続化層として利用し、その上にストレージフォーマット(v1.0)を実装している
- 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固有の |