CORFU
仕組み
各ノードのストレージの仮定は論文を読む
各ストレージ枠はwrite-onceなど、いくつか仮定がある
Read
https://scrapbox.io/files/67165141e6f6c9233fc83ad5.png
この図のように、ログの位置とノード/ストレージユニットの位置が決定論的にマッピングされる
というわけで、Readは一発
故障してたら?kekeho.icon
Write
ログの最後尾を見つけて、排他的に書き込むには?
レプリケーションされていないと仮定すれば…
すべてのクライアントはposition 0に同時に書き込もうとして、ただ1つが勝ち、ほかは負けて書き込めない。
クライアントが無数にあったらどえらいことになる
というわけで、CORFUでは空のログ位置に対応するクライアントにトークンを割り当てる、Sequencerを配置する
クライアントはシーケンサーにリクエストし、シーケンサーは現在の値を返し、インクリメントする
これでクライアントは現在の位置を予約する
あくまで競合を減らして性能を上げるために置いているのであって、SPoFではない レプリケーションはチェーンプロトコルでやる