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
セキュリティキャンプ2023 Y3分散合意ゼミ 最終発表
Search
Yuto Takamune
August 11, 2023
Programming
0
2.6k
セキュリティキャンプ2023 Y3分散合意ゼミ 最終発表
Yuto Takamune
August 11, 2023
Tweet
Share
More Decks by Yuto Takamune
See All by Yuto Takamune
GPT-3.5 Turbo をファインチューニングして自分のクローンを作った話
shinbunbun_
0
230
RustのLINEBot SDKを自作した話
shinbunbun_
0
880
NixOSでもご自宅k8sがしたい!
shinbunbun_
2
2.4k
カーネルレベルでTwitterを禁止しよう
shinbunbun_
0
160
CRDTで始めるコンフリクトしないデータ同期
shinbunbun_
0
290
Haskell初心者がHaskellの楽しさについて語る
shinbunbun_
0
150
Rustで楕円曲線暗号の署名アルゴリズムをフルスクラッチ実装してみた話
shinbunbun_
0
770
IEEE802.1X認証を導入してみた
shinbunbun_
0
190
UBICの食材管理APIを作った話
shinbunbun_
0
180
Other Decks in Programming
See All in Programming
【TID2024】模擬講義:プログラマと一緒にゲームをデザインしてみよう!
akatsukigames_tech
0
490
Rustではじめる負荷試験
skanehira
5
1.2k
現代のVueとTypeScript - 型安全の活用術
minako__ph
4
3.2k
rbs-inlineを導入してYARDからRBSに移行する
euglena1215
1
230
XStateでReactに秩序を与えたい
gizm000
0
530
The Shape of a Service Object
inem
0
370
New Order in Cascade Sorting Order
mugi_uno
3
2.6k
connect-go で面倒くささと戦う / 2024-08-27 #newmo_layerx_go
izumin5210
2
610
GraphQL あるいは React における自律的なデータ取得について
quramy
9
2.6k
令和トラベルにおけるLLM活用事例:社内ツール開発から得た学びと実践
ippo012
0
120
rails_girls_is_my_gate_to_join_the_ruby_commuinty
maimux2x
0
180
The Sequel to a Dream of Ruby Parser's Grammar
ydah
1
200
Featured
See All Featured
Clear Off the Table
cherdarchuk
91
320k
Making the Leap to Tech Lead
cromwellryan
128
8.8k
A Philosophy of Restraint
colly
202
16k
No one is an island. Learnings from fostering a developers community.
thoeni
18
2.9k
Speed Design
sergeychernyshev
20
410
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
It's Worth the Effort
3n
182
27k
Principles of Awesome APIs and How to Build Them.
keavy
125
16k
Git: the NoSQL Database
bkeepers
PRO
425
64k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
326
21k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
Transcript
セキュリティキャンプ2023成果発表 Y3分散合意ゼミ 高棟雄斗
アジェンダ • 分散合意ゼミのテーマ/目的 • Raftについて • 今回実装したもの • 感想
分散合意ゼミのテーマ/目的 • コンピュータシステムの耐故障性を高めたい場面で分散システムを使用す ることがある • 分散合意は、分散システムにおいてノードを共通の値や状態に合意するプ ロセス • 分散合意アルゴリズムとして代表的なRaftを実装を通して学ぶことがこの ゼミの目的
Raftについて • Raftは、分散システム内の複数のノードを同じ状態に合意するためのアル ゴリズム • ノードの中から選挙でリーダーを選出する ◦ リーダーがいなくなった場合は、残りのノードから再選挙される • クラスタに送られてきた通信は全てリーダーに集約され、リーダーから各
ノードにレプリケーションされる
今回実装したもの • リーダー選挙 • ログレプリケーション • ソースコード: https://github.com/shinbunbun/raft.go
リーダー選挙
リーダー選挙 • 全てのノードの中から1台のLeaderを選出する • 2台以上のLeaderが選出された場合 or 1台もLeaderを選出できなかった 場合はやり直し
リーダー選挙のフロー • リーダー検出 ◦ リーダーは定期的に FollowerにHeartbeatを送信している ◦ Followerは、一定時間HeartBeatが送られてこなかった場合に自身を Candidateとしてリーダー選 挙に立候補する
• リーダー決定 ◦ Candidateは全てのノードに対して投票リクエストを送り、受け取ったノードは Leaderとして受け入 れるか否かを回答する ◦ 過半数以上の賛成を得れた場合はそのノードが Leaderとなる
node01: Leader node02~05: Follower node 01 node 02 node 03
node 04 node 05 HeartBeat
node01: Leader node02~05: Follower node 02 node 03 node 04
node 05 node 01
node02: Candidate node03~05: Follower node 02 node 03 node 04
node 05 投票リクエスト
node02: Candidate node03~05: Follower node 02 node 03 node 04
node 05 投票
node02: Leader node03~05: Follower node 02 node 03 node 04
node 05
ログレプリケーション
ログレプリケーション • 全てのノードにおいて有効なログについて合意を取る ◦ Leaderは過半数以上のFollowerが追加に成功したindexまでのlogを確定 ▪ つまり、状態を問い合わせした際には必ず過半数以上のノードで確定している logが返される ◦ Logの追加に失敗した場合は
Followerが必要としているLogの全てが含まれていないものと判断 し、古いLogを含めて再送処理を行う
Client {Log: [hoge]} を追加 node 01 node 02 node 03
node 04 node 05 node01: Leader node02~05: Follower Logをレプリケーション {Log: [hoge]} node01 gya, fuga node02 gya node03 gya, fuga node04 gya, fuga node05 gya, fuga
node 01 node 02 node 03 node 04 node 05
node01: Leader node02~05: Follower node01 gya, fuga, hoge node02 gya node03 gya, fuga, hoge node04 gya, fuga, hoge node05 gya, fuga, hoge
node 01 node 02 node 03 node 04 node 05
node01: Leader node02~05: Follower node01 gya, fuga, hoge node02 gya node03 gya, fuga, hoge node04 gya, fuga, hoge node05 gya, fuga, hoge 再送 {Log: [fuga, hoge]}
node 01 node 02 node 03 node 04 node 05
node01: Leader node02~05: Follower node01 gya, fuga, hoge node02 gya, fuga, hoge node03 gya, fuga, hoge node04 gya, fuga, hoge node05 gya, fuga, hoge
ビジュアライザ • ノードやデータの動きを可視化するためのビジュアライザを発表用に作成
動画リンク https://youtu.be/Wc2IRQNuEp0
None
感想 • Channelまわりでバグったりなど、Goの知識が足りない部分があった • 実際に手を動かすことでRaftの仕組みを理解できてとても楽しかった • 今回の講義では一部扱っていない部分があったので、原著論文を読んでちゃんと 実装したい