分散合意アルゴリズム”Raft”の基本機能をPythonでフルスクラッチ実装した (現在レプリケーション部分実装完了)
分散システムにおいて複数のサーバが一貫した状態を保つための合意アルゴリズム「Raft」を、論文をベースに自力で実装しました。ソケット通信・マルチスレッドを用いて、複数プロセス間でのログレプリケーションと合意形成を実現しています。
- AppendEntries RPC によるログレプリケーション
- 過半数合意(Majority Consensus) に基づくコミット判定
- ステートマシン(SET / DELETE / GET 操作)
- TCP ソケット通信 によるプロセス間通信(マルチスレッド)
- テスト による全プロセスの状態一貫性検証
- 3プロセス構成(リーダー1台 + フォロワー2台)
- localhost上でポート番号をプロセスIDとして使用(10001, 10002, 10003)
- JSON形式でメッセージをシリアライズ
テストはraft_test.pyを動かす
- Python 3(標準ライブラリのみ)
socket- TCP通信threading- マルチスレッド処理json- メッセージシリアライズ
- リーダー選挙部分の実装
- class毎にファイル分けしたい
- もう少し良いテスト方法があるのでは?
- クラッシュリカバリー耐性のテストをしたい
- リーダー選挙(Leader Election) - 現在はリーダーが固定
- タームの更新 - 現在はターム1で固定
- 永続化 - ログやステートのディスク保存
- 選挙タイムアウト - 現在は設定されていない