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
27
0
Share
9.4.3 耐障害性を持つ合意
koyamaso
August 31, 2021
More Decks by koyamaso
See All by koyamaso
5.4 リーダーレスレプリケーション
koyamaso
1
190
4.1.3 ThriftとProtocol Buffers
koyamaso
0
48
spack.yamlを書こう
koyamaso
0
87
Raft 文献調査
koyamaso
0
180
主専攻実験S-3 メタヒューリスティクスと巡回セールスマン問題 最終発表
koyamaso
0
410
Featured
See All Featured
SEO for Brand Visibility & Recognition
aleyda
0
4.4k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.7k
GitHub's CSS Performance
jonrohan
1032
470k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.8k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Odyssey Design
rkendrick25
PRO
2
570
Navigating Team Friction
lara
192
16k
The browser strikes back
jonoalderson
0
930
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
250
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
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台必要 クラスタへのノードの追加・削除が困難 - 動的なメンバーシップの仕組みを追加することで解決出来る 信頼性の低いネットワークではうまく動かないことがある