Concurrency Control

実行の流れ

Withdraw(Bob, x)を考える

  1. Begin(T, TS): タイムスタンプをつける
    • システムの仮定として、時刻がゆるく同期されている、というのがある
  2. balance = Read(bob): レプリカからOptimisticに値を読み取る
    • read(key, TS), reply(key, version, value)
    • f+1個のレプリカから値を読み取り、最もバージョン番号が高いものを選択する
  3. Write(Bob, bal - x)
  4. Commit(T)

Commit Protocol

  • 2PCベース
  • 異なる順序で競合するトランザクションのコミットを受け取りうるし、レプリカはウソを付くかもしれない
  • Replicas perform CC-Check + Quorum validation = Byzantine Serializability

Fallback protocol

参考

メモ

  • Byzantineなクライアントが、意図的にAbortして、他のトランザクションもそれに引きづられてどんどんAbortせざるを得ない…みたいなカスケード障害は、どのように防がれている?