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
24
9.4.3 耐障害性を持つ合意
koyamaso
August 31, 2021
Tweet
Share
More Decks by koyamaso
See All by koyamaso
5.4 リーダーレスレプリケーション
koyamaso
0
160
4.1.3 ThriftとProtocol Buffers
koyamaso
0
45
spack.yamlを書こう
koyamaso
0
81
Raft 文献調査
koyamaso
0
170
主専攻実験S-3 メタヒューリスティクスと巡回セールスマン問題 最終発表
koyamaso
0
380
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
940
Being A Developer After 40
akosma
90
590k
A designer walks into a library…
pauljervisheath
207
24k
Building Applications with DynamoDB
mza
95
6.5k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
800
Designing Experiences People Love
moore
142
24k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
Docker and Python
trallard
44
3.4k
The Straight Up "How To Draw Better" Workshop
denniskardys
234
140k
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台必要 クラスタへのノードの追加・削除が困難 - 動的なメンバーシップの仕組みを追加することで解決出来る 信頼性の低いネットワークではうまく動かないことがある