Skip to content

Architecture Decision Records (ADR) Log ​

This table documents every major architectural design decision made in 17-cdn-caching-proxy.

Decision IDDecision TopicChosen OptionAlternatives ConsideredDeciding FactorsTrade-off AcceptedRevisit When
ADR-001Core RuntimeNode.js Streams + TypeScriptRust Hyper, Go net/http, Nginx C++Unified TypeScript codebase with Next.js dashboard; rapid iteration on RFC 9111 logic.Slightly higher memory baseline than pure C++ or Rust.Single-core throughput exceeds 100k RPS.
ADR-002In-Memory StorageSegmented Buffers (MemoryStore)Redis 7, Memcached, SQLiteEliminates 1ms network hop; delivers true sub-millisecond edge response times.Cache memory is isolated per proxy instance.Cluster exceeds 50 stateless proxy pods.
ADR-003Thundering HerdIn-Memory RequestCoalescerRedis Distributed Lock, RabbitMQZero-latency coordination; instant stream fanout to all waiting sockets.Leader socket failure requires follower re-election.Multi-tier origin shield clustering required.
ADR-004Purge StrategyInverted Tag Index (PurgeIndex)URL scanning, Regex scanO(1) tag lookup allows invalidating 1,000 items in < 5ms.Tag index consumes additional RAM.Unique tag cardinality exceeds 10,000,000.
ADR-005Compression EngineNative Node.js zlibExternal Wasm codec, Origin compressionZero external native bindings; streaming transforms with backpressure.Brotli level 11 CPU intensive; capped at level 6.Hardware compression accelerator cards available.
ADR-006Telemetry ProtocolPrometheus 0.0.4 Text FormatStatsD, InfluxDB, Custom JSONStandard ecosystem compatibility with Prometheus and Grafana.Pull-based scrape model requires HTTP endpoint.Real-time push metrics needed at 100k nodes.
ADR-007Frontend DashboardNext.js 14 App Router + RechartsVite React SPA, Grafana dashboardSelf-contained, custom control UI with dynamic route and purge forms.Node.js runtime needed for Next.js build.Dedicated central multi-cluster UI built.