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