RAM Cloudについて

RAMCloudというストレージシステムについて調べてみた
公式wiki
http://fiz.stanford.edu:8081/display/ramcloud/Home
公式サイト
http://www.stanford.edu/~ouster/cgi-bin/projects.php
ソース[英語]
http://www.stanford.edu/~ouster/cgi-bin/papers/ramcloud.pdf

△全体要約
・全てのデータをRAM上に納めた超低レイテンシ分散ストレージ
・数千台の計算機を10GbEで接続し、5-10μs程度の遅延を実現する"予定"
・データセンターや高負荷Webサーバで利用する前提
・ギガバイト単価$60ほどで、1000000000ops/sの速度を実現する。(通信機器やラックの代金は含まない)
 例として上がっている用途は空港の旅客管理システムなど。cost/byteを考えるとあまり大規模でなくかつ負荷の高い状況が好ましい。しかし高負荷な環境においてはトータルで見てHDDやSSDで構成したストレージよりも省エネとの事

省エネについては正直原理が分かりません。速く処理が片付くからトータルで省エネという論法でしょうか?

△背景
例えばFaceBookは2009年8月時点で全データの25%をmemcachedに格納しており、ヒット率は96.5%。
memcachedサーバ2000台にMySQLサーバ4000台。これらのメモリ総量を足し合わせると実に全データの75%がメモリに収まる計算になる。
HDDは遅いのでキャッシュのミスヒットコストを懸案すると1%のミスヒットが10倍の速度低下を引き起こす。それぐらいなら更にもう25%分のサーバを用意して全データをメモリに収める方が良いのではないか?

ここが個人的に大きな問題と発想だと思います。

△分散技術
・クライアントライブラリによってサーバ群を管理。index付きのkey-valueによってサーバ側にデータ構造に関する前提知識を要求せずデータ管理を実現
・データは可能な限り少数のサーバに集め検索性を向上。保存領域・速度・通信帯域のどれかで余裕が無くなったときに移動・レプリケーションを行う事でパフォーマンスを優先させる
・1つのデータは3つ程度にレプリケーションを行う
 RAM上でレプリケーションすると容量を圧迫する上に、停電や故障への耐性が無いため自分以外の計算機のディスクドライブにバックアップとして保存させる
・いちいちバックアップを取るとレイテンシに響くため書き込み操作は「RAMへの書き込み」と(多分)「レプリケーションを担当するサーバへ変更ログの送信・応答確認」をもってして書き込み成功と見なしクライアントに応答を行い、変更ログを受け取ったレプリカ側は余裕のあるときに非同期で変更ログをディスクに反映させてログを破棄
・レプリカ側のサーバには常に最新の変更ログが存在する事になるのでレプリカがマスター代理で立つ時にはログを反映させて最新のデータを獲得できる→Consistencyの実現(ログをディスクに反映するのを待たず停電・停止した場合に関しては無記述?)
・読み書きのためにネットワーク上でRAID5のような構成を取ることもパフォーマンス・信頼性の両立のために考えたが復元コストが高すぎるので見送った
・データセンター2つを使ってRAID1のような構成を取る事も本当の信頼性の実現のためには実用的かも知れない。物理的に離れるとどうしてもレイテンシが増大するのでそこだけは注意

データセンター複数確保て…。
Consistencyの実現に関しては故障ノード自身のHDDを一切信用しないのが合理的と感心
RAID5をKVS上で実現するというのは他に例を見ないけれどどこかやってるでしょうか?

△データモデル
・index付きkey-value
・基本的にはkey-value storeだがindexという要素が追加されており、index=4にてkey="foo"にvalue="bar"を保存しろ、とかindex=8にてkey="hoge"とvalue="fuga"の連想を削除しろとか命令する
・index値はサーバとの通信の際にpiggybackされて基本的に最新のindexを保てる
・このindexのおかげで、操作が完全に行われたか、完全に行われていないかのどちらかを保証できる
・要するにvector clockではないかと
・この仕組みにした理由は「サーバがデータ内容を気にする事無く一貫性を実現するため」
・indexの管理はクライアントライブラリが行うためユーザは気にする必要がない

よく分かりません。RAMをHDDのように使わせたいのならkey-valueの枠組みに入れる必要は無さそう。

△欠点
・消費電力の高さ
・信頼性のためECCメモリを使うがその価格の高さ。RAMCloud作成のためだけにECCメモリを買い込む事自体がメモリの低コスト化を招くと言及していてスケール大きい
・RAMのデータ単価は高いけれど未来にかけてデータ単価は下がる一方なので未来を考慮するほど現実的だろうとのこと
・現在の10GbEスイッチングハブは1μs程度の遅延を実現しているものもあるがなんだかんだで実用的には5μsを超えるためRPCにかかる時間をトータル10μs以下にするにはスイッチングハブの更なる進歩が待たれる
数年以内に更に具体的に内容を煮詰めるとしています。

すごい世界だと思います。

誤訳・勘違い多数かもしれないので正確さが必要な方は原文のpdfを読むことをお勧めします。
ここでは原文の雰囲気や大雑把な概要だけつかんでいただければ。

気の向いた方はコメントで間違いなど指摘してくださると嬉しいです。
ここもうちょっと詳しく、などあれば精読してきます。
勝手に要約して勝手に公開してるのでまずそうなら消します。

オープンソースらしいけれどソースどこだろう…