miroir/crates/miroir-proxy
jedarden 99767d95c7 P5.3 §13.3: Adaptive replica selection (EWMA-based)
Implemented EWMA-scored replica selection replacing round-robin:
- score(node) = α · latency_p95_ms + β · in_flight_count + γ · error_rate
- Router picks lowest-scoring node with probability 1-ε
- With ε (default 0.05) picks uniformly random for exploration

Config (plan §13.3):
  replica_selection:
    strategy: adaptive | round_robin | random
    latency_weight: 1.0
    inflight_weight: 2.0
    error_weight: 10.0
    ewma_half_life_ms: 5000
    exploration_epsilon: 0.05

Metrics:
  - miroir_replica_selection_score{node_id} gauge
  - miroir_replica_selection_exploration_total counter

Acceptance tests pass:
  - Degraded node traffic drops within 2× half-life
  - Node recovers after latency clears
  - Exploration samples degraded node (~1.7% with ε=0.05)
  - Round-robin fallback works identically to Phase 1

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 13:35:03 -04:00
..
src P5.3 §13.3: Adaptive replica selection (EWMA-based) 2026-05-23 13:35:03 -04:00
static Phase 5: Add Advanced Capabilities verification and UI static assets 2026-05-03 19:01:22 -04:00
tests P2.2: Add write path acceptance tests 2026-05-23 13:01:33 -04:00
Cargo.toml P4.1: Rebalancer background worker - verification complete 2026-05-23 08:11:31 -04:00