photoncloud-monorepo/specifications/flaredb/004-multi-raft/plan.md

3.2 KiB
Raw Blame History

Implementation Plan: Multi-Raft (Static → Split → Move)

Branch: 004-multi-raft | Date: 2024-XX-XX | Spec: specs/004-multi-raft/spec.md
Input: Feature specification from /specs/004-multi-raft/spec.md

Summary

  • Goal: Rust/Tonic/RocksDBベースのRaft実装をMulti-Raftへ拡張し、PD配布メタに従う静的複数Region起動、閾値Split、ConfChangeによるRegion移動までを扱う。
  • Approach: StoreコンテナでRegionID→Peerを管理、Raft/KVのルータをRegion対応にリファクタ。Splitは閾値検知→Splitコマンド合意→メタ更新→新Peer登録。MoveはPD指示に基づきConfChange追加→キャッチアップ→削除

Technical Context

  • Language/Version: Rust stable (toolchain per repo)
  • Primary Dependencies: tonic/prost (gRPC), raft-rs, RocksDB, tokio
  • Storage: RocksDBCF/キーにRegionIDプレフィックスで分離
  • Testing: cargo testunit/integration、Raft/KV多Regionのシナリオテスト
  • Target Platform: Linux server (Nix flake環境)
  • Project Type: backend/server (single workspace)
  • Performance Goals: リーダー選出≤60s、Split適用≤60s、移動完了≤5分成功率99%以上)
  • Constraints: 憲法に従いテスト必須・gRPCエラーは構造化ログ・互換性影響を明示
  • Scale/Scope: Region数: 最低複数同時稼働、将来数千を想定(バッチ最適化は後フェーズ)

Constitution Check

  • Test-First: 新機能ごとにユニット/インテグレーションテストを先行作成。
  • Reliability & Coverage: cargo test 必須、複数Region・Split・ConfChangeの経路にテストを追加。
  • Simplicity: まず静的Multi-Raft→Split→Moveを段階実装。バッチ化などは後続。
  • Observability: Raft/KV/PD連携で失敗時に理由をログ。
  • Versioning: Raft/PD RPC変更は契約として明示。
    → 憲法違反なしで進行可能。

Project Structure

Documentation (this feature)

specs/004-multi-raft/
├── plan.md          # This file
├── research.md      # Phase 0
├── data-model.md    # Phase 1
├── quickstart.md    # Phase 1
├── contracts/       # Phase 1
└── tasks.md         # Phase 2 (via /speckit.tasks)

Source Code (repository root)

rdb-server/src/
├── main.rs            # entry
├── store.rs           # (new) Store/Region registry & dispatch
├── peer.rs            # Raft Peer (per Region)
├── peer_manager.rs    # Raft message clients
├── raft_service.rs    # gRPC service (region-aware dispatch)
├── service.rs         # KV service (region routing)
├── raft_storage.rs    # Raft storage (Region-prefixed keys)
├── merkle.rs          # (existing) sync helpers
└── config/…           # namespace/mode config

rdb-proto/src/         # proto definitions
tests/                 # integration (multi-region, split, move)

Structure Decision: 単一バックエンド構成。Store/PeerにRegion対応を追加し、既存rdb-server配下にstore.rs等を拡張する。

Complexity Tracking

  • 現時点で憲法違反なしのため記載不要。