Architecture
High-level system design and data flow.
ποΈ System Overviewβ
Client β API Server β Asynq (Redis) β Worker Pool β DNS Servers
β β
Results β β β β β β β
π Componentsβ
π Request Flowβ
βββββββββββ 1. POST /dns-lookup βββββββββββββββ
β Client ββββββββββββββββββββββββββββββ>β API Server β
βββββββββββ β chi router β
ββββββββ¬βββββββ
β 2. Validate
β 3. Rate limit
βΌ
βββββββββββββββ
β Asynq β
β Enqueue β
ββββββββ¬βββββββ
β 4. Store task
βΌ
βββββββββββ 202 {task_id} ββββββββββββββββ
β Client β<ββββββββββββββββββββββββββββββ Redis β
ββββββ¬βββββ ββββββββ¬ββββββββ
β β 5. Dequeue
β 6. Poll GET /tasks/{id} βΌ
β ββββββββββββββββ
β β Worker Pool β
β β (dnsproxy) β
β ββββββββ¬ββββββββ
β β 7. Query DNS
β βΌ
β ββββββββββββββββ
β β DNS Servers β
β β UDP/TCP/TLS/ β
β β HTTPS/QUIC β
β ββββββββ¬ββββββββ
β β 8. Response
β βΌ
β ββββββββββββββββ
β β Redis β
β β Store result β
β ββββββββ¬ββββββββ
β β
βΌ β
βββββββββββββββββββββββββββββββββββββββββββββββββ
β 9. Fetch result
βΌ
{task_status: SUCCESS, task_result: {...}}
π§© Componentsβ
| Component | Technology | Responsibility | Scalability |
|---|---|---|---|
| API Server | chi + Tollbooth | HTTP routing, rate limiting | Stateless, horizontal |
| Task Queue | Asynq + Redis | Task persistence, distribution | Redis cluster |
| Worker Pool | Go + dnsproxy | DNS query execution | Configurable concurrency |
| Storage | Redis | Task state, results | Redis cluster |
| Metrics | Prometheus | Observability | Pull-based |
π Task Lifecycleβ
π Deployment Architecturesβ
Single Instance (Development)β
ββββββββββββββββββββββββββββββββββββ
β Docker Compose β
β β
β ββββββββ ββββββββββ ββββββββ β
β β API ββ β Redis ββ βWorkerβ β
β ββββββββ ββββββββββ ββββββββ β
ββββββββββββββββββββββββββββββββββββ
Multi-Instance (Production)β
ββββββββββββ
β LB/Nginxβ
βββββββ¬βββββ
β
βββββββββ΄ββββββββ
βΌ βΌ
βββββββββββ ββββββββββββ
β API-1 β β API-2 β
βββββ¬ββββββ ββββββ¬ββββββ
β β
βββββββββ¬ββββββββ
βΌ
βββββββββββββββ
βRedis Clusterβ
ββββββββ¬βββββββ
β
βββββββββββΌβββββββββ
βΌ βΌ βΌ
ββββββββββββββββββββββββ
βWork-1ββWork-2ββWork-Nβ
ββββββββββββββββββββββββ
Kubernetes (Scalable)β
π§ Protocol Stackβ
| Layer | Component | Implementation |
|---|---|---|
| API | HTTP Router | chi |
| Queue | Task Management | Asynq |
| Worker | Concurrency | Go goroutines |
| DNS | Multi-Protocol | AdGuard dnsproxy |
| Transport | UDP/TCP/TLS/HTTPS/QUIC | miekg/dns, crypto/tls, net/http, quic-go |
π Scalingβ
| Component | Horizontal | Vertical | Limit |
|---|---|---|---|
| API | β Stateless | Low CPU/Memory | Unlimited |
| Worker | β Task-based | Moderate CPU | DNS rate limits |
| Redis | β οΈ Cluster needed | High memory | 10k req/s (single) |
Concurrency: Total = Workers Γ MAX_WORKERS
β‘ Performanceβ
π¬ Benchmarks in progress - Comprehensive performance comparison coming soon.
π Security Layersβ
Internet β TLS (Reverse Proxy) β Auth (optional) β API β Internal Network (Redis/Workers)
- TLS termination at reverse proxy
- Rate limiting (proxy + API)
- Optional authentication
- Network isolation for Redis
- Input validation
β Error Handlingβ
| Error | HTTP Code | Behavior |
|---|---|---|
| Invalid request | 400 | Immediate rejection |
| Rate limit | 429 | Backoff required |
| No workers | 503 | Retry later |
| DNS timeout | 200 | Per-server error in result |
Philosophy: API never fails for DNS errors - each server independent, partial success allowed.
π Monitoringβ
API/Workers β /metrics β Prometheus β Grafana β Alertmanager
See Monitoring Guide for full details.
π See Alsoβ
- API Reference - REST API documentation
- Configuration - Config options
- Monitoring - Metrics and alerting