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
5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
セキュリティキャンプ2023 Y3分散合意ゼミ 最終発表
Yuto Takamune
August 11, 2023
More Decks by Yuto Takamune
See All by Yuto Takamune
GPT-3.5 Turbo をファインチューニングして自分のクローンを作った話
shinbunbun_
1
390
RustのLINEBot SDKを自作した話
shinbunbun_
0
2.5k
NixOSでもご自宅k8sがしたい!
shinbunbun_
2
5.1k
カーネルレベルでTwitterを禁止しよう
shinbunbun_
0
310
CRDTで始めるコンフリクトしないデータ同期
shinbunbun_
0
700
Haskell初心者がHaskellの楽しさについて語る
shinbunbun_
0
240
Rustで楕円曲線暗号の署名アルゴリズムをフルスクラッチ実装してみた話
shinbunbun_
0
2.4k
IEEE802.1X認証を導入してみた
shinbunbun_
0
350
UBICの食材管理APIを作った話
shinbunbun_
0
270
Other Decks in Programming
See All in Programming
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
1
470
不幸な GC
chencmd
0
870
リアルな遅延を測る仕様
kota_yata
1
140
Go を使い始めて 2 ヶ月の学び / My first two months with Go
contour_gara
0
420
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
140
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
550
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
350
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
300
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
400
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.7k
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.4k
Building an Out-of-Order CPU
latte72
0
660
Featured
See All Featured
Ruling the World: When Life Gets Gamed
codingconduct
0
320
The Limits of Empathy - UXLibs8
cassininazir
1
630
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
530
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
550
Six Lessons from altMBA
skipperchong
29
4.5k
Prompt Engineering for Job Search
mfonobong
0
440
Navigating Team Friction
lara
192
16k
How STYLIGHT went responsive
nonsquared
100
6.3k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
We Have a Design System, Now What?
morganepeng
55
8.3k
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の仕組みを理解できてとても楽しかった • 今回の講義では一部扱っていない部分があったので、原著論文を読んでちゃんと 実装したい