Skip to content

hirochi27/Raft

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Raft Consensus Algorithm - Python Implementation

分散合意アルゴリズム”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で固定
  • 永続化 - ログやステートのディスク保存
  • 選挙タイムアウト - 現在は設定されていない

参考

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages