Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
9.4.3 耐障害性を持つ合意
Search
koyamaso
August 31, 2021
0
23
9.4.3 耐障害性を持つ合意
koyamaso
August 31, 2021
Tweet
Share
More Decks by koyamaso
See All by koyamaso
5.4 リーダーレスレプリケーション
koyamaso
0
130
4.1.3 ThriftとProtocol Buffers
koyamaso
0
40
spack.yamlを書こう
koyamaso
0
77
Raft 文献調査
koyamaso
0
160
主専攻実験S-3 メタヒューリスティクスと巡回セールスマン問題 最終発表
koyamaso
0
370
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
65
11k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
KATA
mclloyd
29
14k
Rails Girls Zürich Keynote
gr2m
94
13k
GraphQLとの向き合い方2022年版
quramy
44
13k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
The Cult of Friendly URLs
andyhume
78
6.1k
The Invisible Side of Design
smashingmag
298
50k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
What's in a price? How to price your products and services
michaelherold
243
12k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Transcript
データ指向 アプリケーションデザイン 9.4.3 耐障害性を持つ合意
合意アルゴリズムが満たすべき性質 - 一様合意 2つのノードが異なる決定をしないこと - 整合性 2回決定しているノードがないこと - 妥当性 ノードが値vを決定したら、vを提案しているノードがあること
- 終了性 クラッシュしていない全てのノードは、最終的に何らかの値を決定すること
終了性 = 耐障害性の概念を形式化したもの 終了性を満たすことを諦めれば、一様合意、整合性、妥当性は容易に満たせる - 方法1: あるノードを「独裁者」として、全ての決定をそのノードが行う - そのノードがクラッシュすると全ノードは決定できなくなる -
方法2: 何も決定しない 2相コミットでは終了性を満たすことはできない - 一度クラッシュしたノードは二度と戻ってこない 終了性を満たすための、耐えられる障害の数には限度がある - クラッシュしていたり到達不能になっているノードが半数未満
耐障害性を持つ合意アルゴリズム - ViewStamped Replication (VSR) ユーザ: ? - Paxos ユーザ:
Hadoop - Raft ユーザ: etcd(k8sなどで使われている) - Zab (ZooKeeper Atomic Broadcast) ユーザ: ZooKeeper
シングルリーダーレプリケーションと合意 シングルリーダーレプリケーションではリーダーが予め決まっている - リーダーがクラッシュすると人間がリーダーを再起動/変更する必要がある - 終了性を満たしていない
エポック番号とクオラム スプリットブレインを防ぐために、「リーダーが誰か」についても合意が必要 合意アルゴリズムは各エポック内でリーダーがユニークであることを保証する - エポックの別名: Paxosではballot,Raftではterm,VSRではview 現在のリーダーがクラッシュしたと考えられるたびにエポック番号をインクリメントし、新し いリーダーを決める投票を開始する 大きいエポック番号をもつリーダーを優先する
エポック番号とクオラム(2) リーダーはある決定をする際、投票を行い過半数の票を得る必要がある - 自身がリーダーであると考えていても、そうとは限らない - エポック番号が他のノードより小さければ票を得られない 過半数の票が必要なので、2つの決定には1台以上の重複したノードがある - これによってリーダーは安全に決定をすることが出来る
合意の限界 リーダーが決定をする際に投票する仕組みは同期レプリケーション - 非同期レプリケーションに比べてパフォーマンスが低い 過半数の投票が必要なので、1つの障害に耐えるには3台必要 クラスタへのノードの追加・削除が困難 - 動的なメンバーシップの仕組みを追加することで解決出来る 信頼性の低いネットワークではうまく動かないことがある