Object Storage on CRAQ: High-throughput chain replication for read-mostly workloads
何から、これを見てみたいと思ったか忘れたけど、Object Storage on CRAQ - USENIX 2009 - Part 1/3 - YouTubeにビデオ見てみたので、その時のメモ
背景
Chain Replicationtという技術(OSDI2004で出ているみたい)
うーん、プレゼンが微妙にピンぼけしていて見づらいなあ。
CRAQの提案
- 2つの状態、cleanとdirtyをもつ。
- cleanの場合、全てのレプリカは同じバージョン番号を持っている。この時にリードされた場合、値が返却される。
- チェインは、headからtailに向けて更新要求が連鎖していく。tailに届く前の状態のライト要求を行っている場合、dirty状態が発生する。dirty状態が発生した場合に、リード要求があると、そのプロセスはtailに聴きにいって現状のバージョン番号iを聞く。ユーザには、iのバージョンの値を返却。tailでコミットされた場合、新しいバージョンが返却されるので強い一貫性を保つことがでいる。
- なるほど、read committedレベルの一貫性を保証している感じかな。というか、key-valueストアならそれで十分か。
- マルチキャストを利用した最適化
実装
結果
- 大体、想定通り。ただ、フェールオーバの下りがちょっとよくわからない。どのようなフェールオーバをしているのだろう。
- 新しく入ったサーバには、データが無いのでその時にリードリクエストが来た場合、どのような挙動になるんだろう。
- と思っていたら、かすっている質問をしてくれた人がいて、保存しているデータが大きいばあいには、キャッチアップしなければならないとのこと。つまり、キャッチアップが終わるまでは系には参加できないので、トータルスループットの下がる時間帯が増えるということですね。
- グラフが見づらいなーと思っていたら、http://www.google.co.jp/url?sa=t&rct=j&q=object%20storage%20on%20craq%20ppt&source=web&cd=2&ved=0CD0QFjAB&url=http%3A%2F%2Fwww.cs.princeton.edu%2F~jterrace%2Fdocs%2Fcraq-slides.pptx&ei=1Y5RT4iBEobEmQXak4C3Cg&usg=AFQjCNHXJhxclvkjd1mrVVDObXo67nIUVg&sig2=5EkrsGh3cWE7D272S52oOAにパワーポイント発見。
まあ、いいや、だいたい分かった気がするので、ここまで。