Cassandra - A Decentralized Structured Storage System を読んだ
Cassandra - A Decentralized Structured Storage Systemを読んだ時のメモ。
どんなもの?
- 分散ストレージシステム
- 大規模データを多数の一般的なサーバに分散させることで可用性を高めて、SPOFを無くす
- ソフトウェア側で可用性とスケーラビリティをコントロールしている
- read efficiencyを犠牲にすることなくwrite throughputを高めている
- FacebookのInbox Searchのストレージのニーズを満たすために作られた
先行研究とくらべて何がすごい?
- Scale Incrementaly
- 低latencyでかつ、writeのスループットが高い
技術や手法の肝は?
- DataModel
- Table
- 1つのkeyでindexされた多次元マップ
- valueは高度に構造化されたobject
- row keyはsize limitのないstring(16~36byte)
- 1つのrow key下での全ての操作はどれだけ多くのカラムが読み書きされていようがレプリカ単位でatomic
- カラムはカラムファミリと呼ばれる単位でグルーピングされる
- カラムを時間もしくは名前でソートできる
- Table
-
- insert(table,key,rowMutation)
- get(table,key,columnName)
- delete(table,key,columnName)
System Architecture
Replication
Membership
- anti-entropy Gossip base protocolにもとづいている
Failure Detection
- Φ Accrual Failure Detectorを修正したものを使っている
- ノードの生死をboolean値で送るのではなく、suspection levelを送る
- Φ=1の時に我々が間違っている尤度は約10%
- ノードの生死をboolean値で送るのではなく、suspection levelを送る
- Φ Accrual Failure Detectorを修正したものを使っている
Bootstrapping
Scaling the Cluster
- 新しいノードは負荷の高いノードの負荷を軽減するトークンが割り当てられる
- 他のノードが担当していたレンジを新しいノードが分割して担当するということ
- 新しいノードは負荷の高いノードの負荷を軽減するトークンが割り当てられる
Local Persisitence
- 典型的なwrite
- 典型的なread
- disk上のファイルを探す前にin memoryのデータから探す
- 新しいものから古いものへと順に検索される
- disk上の複数のファイルから探すことになったときのために、bloom filterがデータとともに保存されており、in memoryにも存在する
- disk上の全てのカラムをスキャンすることを避けるために、カラムインデックスを保持する
どうやって有効と検証した?
- Facebook Inbox Searchで利用
議論はある?
- 今後は下記のサポートを行っていきたいと考えている
- compression
- atomicity across key
- secondary index
次に読むべき論文は?
A highly available file system for a distributed workstation environment