Mímisbrunnr知恵の泉

← 分散システム 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:CAP定理 | 関連:クォーラム(R+W>N)Raft

要点(BLUF)

問題設定 ── いつ「書けた」と言うか

書き込みを全複製に反映するには時間がかかる。「いくつの複製に届いたら成功と返すか」で一貫性と可用性が決まります。これが同期/非同期の軸。さらに「誰が書き込みを受け付けるか」で順序付けの難しさが変わる——これがリーダー/リーダーレスの軸です。

モデル ── 2軸の4象限

flowchart TB
    L["リーダー型(プライマリが順序を決める)"] --> LS["同期:過半数に届くまで待つ(強一貫・遅い)"]
    L --> LA["非同期:リーダーが返してから複製(速い・ロスト窓)"]
    LL["リーダーレス型(どの複製にも書ける)"] --> LLQ["クォーラム:W個に書きR個から読む(R+W>N)"]
    LL --> LLG["ゴシップで反エントロピー収束(結果整合)"]
象限一貫性可用性/遅延
リーダー+同期強い(線形化可)遅い・少数派で停止Raft/Paxos系、同期レプリカ
リーダー+非同期弱め(複製遅延でラグ)速い・障害時にロスト窓MySQL非同期レプリカ
リーダーレス+クォーラムR/Wで調整可高可用Dynamo, Cassandra
リーダーレス+ゴシップ結果整合最高可用ゴシップ・反エントロピー・故障検出(SWIM)

仕組み ── リーダー型 vs リーダーレス型

リーダー型:すべての書き込みを1人のリーダー(プライマリ)が受け、順序を決めて follower に流す。順序が自然に1本になるので一貫性を保ちやすい。リーダー障害時は選出(リーダー選出(Bully・Ring)Raft)が要る。

リーダーレス型:どの複製にも書ける。順序を決める中心が無いので、並行書き込みの衝突が起きる。検出にはベクトル時計/版数ベクトル、解決には LWW・マージ・CRDTPACELC・結果整合性)。読み修復とヒンテッドハンドオフで欠損を埋める。

状態機械レプリケーション(SMR):リーダー型の理論的核。全複製を決定的な状態機械とみなし、同じ操作列を同じ順で適用すれば全複製は同じ状態になる。だから「操作列の順序に合意する」=合意問題(Raft)に帰着します。

正しさの観点 ── 同期/非同期の保証差

なぜ分散だと難しいか(直観)

複製は「1つに見せる」(複製透過性、透過性とスケーラビリティ)が目標だが、コピー間は光速以下でしか同期できない。速さを取れば古い値・ロスト窓、正しさを取れば遅延・停止。リーダーレスにすると受け口は増えるが、今度は順序という単一マシンでは無料だったものを自前で作る羽目になる。どこに難しさを寄せるかの選択です。

⚠️ よくある誤解・落とし穴

対応ラボ

なし(概念回)。クォーラムの重なりは クォーラム(R+W>N)、収束は ゴシップ・反エントロピー・故障検出(SWIM) のラボで実証します。

関連

第6章 レプリケーションとパーティショニング 目次