このプロジェクトについて

hashicorp/raftは、Raft合意アルゴリズムを実装したGoライブラリであり、分散システムにおける複製状態マシンを構築するための基盤を提供します。このライブラリは複製ログを管理し、有限状態マシン(FSM)抽象化と統合して、複数のノード間で一貫した状態を維持します。 主な機能は以下の通りです: - **リーダー選出**:ノードはフォロワー、候補者、リーダーの状態間を遷移します。フォロワーはタイムアウト期間内にエントリを受信しない場合、自ら候補者に昇格し、ピアに投票を要求します。過半数の投票を得た候補者がリーダーになります。 - **ログ複製**:リーダーは新しいログエントリ(不透明なバイナリブロブ)を永続ストレージに追加し、フォロワーの過半数に複製します。コミットされると、エントリはFSMに適用されます。 - **自動スナップショット**:ログの無制限な増加を防ぐため、Raftは現在のFSM状態を自動的にスナップショットし、ログを圧縮して、すでに適用されたエントリを削除します。 - **動的ピア管理**:過半数が利用可能である限り、クラスタへのノードの追加と削除をサポートします。 - **ストレージバックエンド**:主要なバックエンドであるMDBStoreは別のリポジトリ(raft-mdb)にあり、BoltDBを使用した純粋なGoバックエンドも利用可能です(raft-boltdb)。どちらもLogStoreおよびStableStoreの実装として機能します。 - **メトリクス出力**:armon/go-metrics(デフォルト)またはhashicorp/go-metrics(ビルドタグ経由)によるメトリクスをサポートし、非推奨のarmonライブラリからの移行パスを提供します。 このライブラリはGo 1.16以上を必要とし、MPL 2.0の下でライセンスされています。Raft論文「In Search of an Understandable Consensus Algorithm」に基づいており、性能はPaxosに匹敵し、ログコミットのレイテンシはディスクI/Oとクラスタの半数へのネットワークラウンドトリップによって制限されます。 推奨されるクラスタサイズは3または5ノードで、それぞれ1または2ノードの障害に耐えながら可用性を最大化します。このライブラリはConsulやNomadなどのHashiCorp製品で分散コーディネーションに使用されています。