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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
koyamaso
August 31, 2021
0
27
9.4.3 耐障害性を持つ合意
koyamaso
August 31, 2021
Tweet
Share
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
400
Featured
See All Featured
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
400
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
440
So, you think you're a good person
axbom
PRO
2
2k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
150
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
200
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
550
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
480
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
150
Building the Perfect Custom Keyboard
takai
2
710
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台必要 クラスタへのノードの追加・削除が困難 - 動的なメンバーシップの仕組みを追加することで解決出来る 信頼性の低いネットワークではうまく動かないことがある