4.1 KiB
4.1 KiB
Chainfire アーキテクチャ再定義案: 分散システム構築基盤への転換
Chainfire を単一の KV ストアサービスから、プロジェクト全体の「分散システム構築フレームワーク」へと位置づけ直すための設計案です。
1. アーキテクチャ概要
階層構造を整理し、低レイヤーのプリミティブから高レイヤーのマネージドサービスまでを明確に分離します。
graph TD
subgraph Application_Layer
FlareDB[FlareDB / Distributed DB]
LightningStor[lightningstor / Object Storage]
IAM[IAM / Control Plane]
end
subgraph L2_Service_Layer_Sidecar
CFServer[Chainfire Server]
CFServer -- gRPC Streaming --> IAM
end
subgraph L1_Framework_Layer
CFCore[chainfire-core]
CFCore -- Library Embed --> FlareDB
CFCore -- Library Embed --> LightningStor
MultiRaft[Multi-Raft Orchestrator]
CFCore --> MultiRaft
end
subgraph L0_Primitive_Layer
Gossip[chainfire-gossip]
Raft[chainfire-raft]
Storage[chainfire-storage]
CFCore --> Gossip
CFCore --> Raft
Raft --> Storage
end
CFServer --> CFCore
2. 各レイヤーの責務定義
L0 Core (Library): primitives
- chainfire-gossip:
- SWIM プロトコルに基づくメンバーシップ管理。
- 特定のサービスに依存せず、任意の
NodeMetadataを伝搬可能にする。
- chainfire-raft:
- 単一 Raft グループのコンセンサスロジック。
StateMachineを Trait 化し、任意のビジネスロジックを注入可能にする。RaftNetworkを抽象化し、gRPC 以外(UDS, In-memory)のトランスポートをサポート。
- chainfire-storage:
- Raft ログおよび StateMachine のための永続化レイヤー。
L1 Framework: chainfire-core
- Multi-Raft Orchestrator:
- 複数の Raft インスタンス(シャード)を同一プロセス内で効率的に管理。
- ネットワーク接続やスレッドプール等のリソース共有を最適化。
- Cluster Manager:
- Gossip のメンバーシップイベントを監視し、Raft グループへのノード追加・削除を自動化。
- 「ノード発見(Gossip)」から「合意形成参加(Raft)」への橋渡しを行う。
L2 Service: chainfire-server (Standard Implementation)
- Shared Infrastructure:
- KV ストア、分散ロック、リース管理を gRPC API として提供。
- 独自に Raft を組む必要のない「軽量サービス」向けの共通基盤。
- Sidecar Mode Support:
- gRPC Streaming による
ClusterEventsの提供。 - リーダー交代やメンバーシップ変更を外部プロセスにリアルタイム通知。
- gRPC Streaming による
3. 分散サービスでの再利用シナリオ (例: FlareDB)
FlareDB が Chainfire 基盤をどのように利用して Multi-Raft を構成するかの具体例です。
- ライブラリとして組み込み:
FlareDBプロセスがchainfire-coreをリンク。 - 独自の StateMachine 実装: FlareDB のデータ操作ロジックを
StateMachineTrait として実装。 - シャード管理:
- データのレンジごとに
RaftGroupインスタンスを作成。 - 各
RaftGroupに FlareDB 独自のStateMachineを登録。
- データのレンジごとに
- ノード管理の委譲:
- Gossip によるノード発見を
chainfire-coreに任せ、FlareDB 側では個別のノードリスト管理を行わない。
- Gossip によるノード発見を
4. メリットの整理
- 開発効率の向上: Gossip や Raft といった複雑な分散プロトコルの再実装が不要になる。
- 観測性の一貫性: プロジェクト全体の全ノードが共通の Gossip 基盤に乗ることで、システム全体のトポロジー可視化が容易になる。
- 柔軟な配置: 同一のロジックを、ライブラリとして(高パフォーマンス)、あるいはサイドカーとして(疎結合)のどちらでも利用可能。