Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
9.4.3 耐障害性を持つ合意
Search
koyamaso
August 31, 2021
0
25
9.4.3 耐障害性を持つ合意
koyamaso
August 31, 2021
Tweet
Share
More Decks by koyamaso
See All by koyamaso
5.4 リーダーレスレプリケーション
koyamaso
1
180
4.1.3 ThriftとProtocol Buffers
koyamaso
0
46
spack.yamlを書こう
koyamaso
0
83
Raft 文献調査
koyamaso
0
170
主専攻実験S-3 メタヒューリスティクスと巡回セールスマン問題 最終発表
koyamaso
0
390
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
54k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Statistics for Hackers
jakevdp
799
230k
A designer walks into a library…
pauljervisheath
210
24k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.6k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Balancing Empowerment & Direction
lara
5
800
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Code Reviewing Like a Champion
maltzj
527
40k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
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台必要 クラスタへのノードの追加・削除が困難 - 動的なメンバーシップの仕組みを追加することで解決出来る 信頼性の低いネットワークではうまく動かないことがある