photoncloud-monorepo/docs/plans/chainfire_architecture_redefinition.md

89 lines
No EOL
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Chainfire アーキテクチャ再定義案: 分散システム構築基盤への転換
`Chainfire` を単一の KV ストアサービスから、プロジェクト全体の「分散システム構築フレームワーク」へと位置づけ直すための設計案です。
## 1. アーキテクチャ概要
階層構造を整理し、低レイヤーのプリミティブから高レイヤーのマネージドサービスまでを明確に分離します。
```mermaid
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` の提供。
- リーダー交代やメンバーシップ変更を外部プロセスにリアルタイム通知。
## 3. 分散サービスでの再利用シナリオ (例: FlareDB)
FlareDB が Chainfire 基盤をどのように利用して Multi-Raft を構成するかの具体例です。
1. **ライブラリとして組み込み**: `FlareDB` プロセスが `chainfire-core` をリンク。
2. **独自の StateMachine 実装**: FlareDB のデータ操作ロジックを `StateMachine` Trait として実装。
3. **シャード管理**:
- データのレンジごとに `RaftGroup` インスタンスを作成。
-`RaftGroup` に FlareDB 独自の `StateMachine` を登録。
4. **ノード管理の委譲**:
- Gossip によるノード発見を `chainfire-core` に任せ、FlareDB 側では個別のノードリスト管理を行わない。
## 4. メリットの整理
- **開発効率の向上**: Gossip や Raft といった複雑な分散プロトコルの再実装が不要になる。
- **観測性の一貫性**: プロジェクト全体の全ノードが共通の Gossip 基盤に乗ることで、システム全体のトポロジー可視化が容易になる。
- **柔軟な配置**: 同一のロジックを、ライブラリとして(高パフォーマンス)、あるいはサイドカーとして(疎結合)のどちらでも利用可能。