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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yuto Takamune
August 11, 2023
Programming
0
4.4k
セキュリティキャンプ2023 Y3分散合意ゼミ 最終発表
Yuto Takamune
August 11, 2023
Tweet
Share
More Decks by Yuto Takamune
See All by Yuto Takamune
GPT-3.5 Turbo をファインチューニングして自分のクローンを作った話
shinbunbun_
1
350
RustのLINEBot SDKを自作した話
shinbunbun_
0
2.1k
NixOSでもご自宅k8sがしたい!
shinbunbun_
2
4.4k
カーネルレベルでTwitterを禁止しよう
shinbunbun_
0
280
CRDTで始めるコンフリクトしないデータ同期
shinbunbun_
0
600
Haskell初心者がHaskellの楽しさについて語る
shinbunbun_
0
210
Rustで楕円曲線暗号の署名アルゴリズムをフルスクラッチ実装してみた話
shinbunbun_
0
2k
IEEE802.1X認証を導入してみた
shinbunbun_
0
300
UBICの食材管理APIを作った話
shinbunbun_
0
240
Other Decks in Programming
See All in Programming
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
830
Grafana:建立系統全知視角的捷徑
blueswen
0
310
AtCoder Conference 2025
shindannin
0
1k
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
5.9k
Fragmented Architectures
denyspoltorak
0
140
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
360
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
220
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
200
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
5.8k
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.7k
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
100
Apache Iceberg V3 and migration to V3
tomtanaka
0
120
Featured
See All Featured
KATA
mclloyd
PRO
34
15k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
150
Paper Plane
katiecoart
PRO
0
46k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
100k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
230
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
76
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Tell your own story through comics
letsgokoyo
1
800
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
150
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の仕組みを理解できてとても楽しかった • 今回の講義では一部扱っていない部分があったので、原著論文を読んでちゃんと 実装したい