Architecture
How requests flow through the scatter-proxy pipeline — from submission to classified response.
┌──────────────┐
│ Client Code │
└──────┬───────┘
│ submit(request)
▼
┌──────────────┐
│ ScatterProxy │
│ (TaskPool) │
└──────┬───────┘
│ pick K healthy proxies
▼
┌─────────────────────┐
│ Scheduler │
│ ┌───────────────┐ │
│ │ Rate Limiters │ │
│ │ Health Scores │ │
│ │ Circuit Brkrs │ │
│ │ Adaptive K │ │
│ └───────────────┘ │
└─────────┬───────────┘
│ fan-out K paths
┌────────────┼────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Proxy #1 │ │ Proxy #2 │ │ Proxy #3 │
│ socks5h │ │ socks5h │ │ socks5h │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
└─────────────┼─────────────┘
│ first good response wins
▼
┌───────────────────┐
│ BodyClassifier │
│ → Success │
│ → ProxyBlocked │
│ → TargetError │
└────────┬──────────┘
│
▼
┌───────────────────┐
│ ScatterResponse │
│ {status, headers, │
│ body} │
└───────────────────┘
Background tasks:
• Scheduler loop — polls TaskPool, dispatches fan-out attempts
• State persistence — periodic JSON snapshots (atomic writes)
• Metrics logger — periodic tracing summary lines
• Source refresh — re-fetches proxy lists on interval