skills/software-architecture-design/assets/operations/scalability-checklist.md

199 lines
7.0 KiB
Markdown

# System Scalability Checklist
Use this checklist when designing for horizontal scalability and high availability.
## Load Estimation
- [ ] **Current load:** [N] requests/second, [N] concurrent users
- [ ] **Peak load:** [N] requests/second (expected during [event/time])
- [ ] **Growth projection:** [X]% yearly growth
- [ ] **Target capacity:** Support [N]x current load
## Scalability Dimensions
### Horizontal Scaling (Preferred)
- [ ] **Stateless services:** All application servers are stateless
- [ ] **Session storage:** Use Redis/Memcached for distributed sessions
- [ ] **File storage:** Use object storage (S3/GCS) instead of local filesystem
- [ ] **Auto-scaling:** Configure based on CPU/memory/RPS metrics
- [ ] **Load balancer:** Layer 7 (application-aware) load balancing
### Vertical Scaling (Limited)
- [ ] **Database instance:** Right-sized for current + 6 months growth
- [ ] **Cache instance:** Sized for working set + 20% headroom
- [ ] **Max capacity:** Identified vertical scaling limit
## Database Scalability
### Read Scaling
- [ ] **Read replicas:** [N] replicas for read-heavy workloads
- [ ] **Read/write splitting:** Route reads to replicas, writes to primary
- [ ] **Connection pooling:** PgBouncer/ProxySQL to limit connections
- [ ] **Query optimization:** Queries < [10ms] with proper indexing
### Write Scaling
- [ ] **Sharding strategy:** [Hash-based / Range-based / Geographic]
- Shard key: [user_id / tenant_id / region]
- Number of shards: [N] (plan for [10x] growth)
- [ ] **Write-ahead logging:** Asynchronous replication for replicas
- [ ] **Bulk operations:** Batch inserts/updates to reduce round trips
### Caching Strategy
- [ ] **Cache layers:**
- L1: In-memory application cache ([Caffeine / Guava])
- L2: Distributed cache ([Redis / Memcached])
- L3: CDN for static assets ([CloudFront / Fastly])
- [ ] **Cache hit ratio:** Target > [90]%
- [ ] **TTL strategy:** Balance freshness vs load ([5min] for hot data, [1h] for warm)
- [ ] **Cache eviction:** LRU/LFU policy configured
- [ ] **Cache warming:** Pre-populate on deployment
- [ ] **Cache invalidation:** Event-driven invalidation for updates
## API Gateway
- [ ] **Rate limiting:**
- Per-user: [N] req/min
- Per-IP: [N] req/min
- Burst allowance: [N] requests
- [ ] **Request throttling:** Queue requests during spikes
- [ ] **Response compression:** Gzip/Brotli enabled
- [ ] **API versioning:** Support [N] concurrent versions
## Asynchronous Processing
- [ ] **Message queue:** [Kafka / RabbitMQ / AWS SQS]
- Throughput: [N] messages/second
- Retention: [X] days
- [ ] **Worker pools:** [N] workers per queue
- [ ] **Backpressure:** Reject requests when queue length > [N]
- [ ] **Dead letter queue:** For failed message handling
## Content Delivery
- [ ] **CDN:** CloudFront/Fastly for static assets
- [ ] **Edge caching:** Cache-Control headers configured
- [ ] **Image optimization:** WebP format, lazy loading
- [ ] **Asset bundling:** Minified and bundled CSS/JS
## Data Storage Patterns
### Hot/Warm/Cold Data
- [ ] **Hot data:** Last [7] days in primary DB (fast access)
- [ ] **Warm data:** Last [30] days in read replicas
- [ ] **Cold data:** Older than [30] days archived to S3/Glacier
- [ ] **Archival strategy:** Automated data lifecycle policies
### Data Partitioning
- [ ] **Time-based partitioning:** Partition by month/year for time-series data
- [ ] **Hash partitioning:** Distribute by hash(user_id) for even distribution
- [ ] **List partitioning:** Partition by region/tenant for isolation
## Connection Management
- [ ] **Database connection pool:**
- Min connections: [N]
- Max connections: [N]
- Connection timeout: [Xms]
- [ ] **HTTP keep-alive:** Reuse connections to upstream services
- [ ] **Circuit breaker:** Prevent cascade failures
## Observability for Scalability
### Key Metrics
- [ ] **Golden signals:**
- Latency: p50, p95, p99 response times
- Traffic: Requests per second
- Errors: Error rate (4xx, 5xx)
- Saturation: CPU, memory, disk, network usage
- [ ] **Capacity metrics:**
- Database connections used/available
- Queue depth and processing rate
- Cache hit/miss ratio
- Thread pool utilization
### Alerts
- [ ] CPU > [70]% for [5] minutes → Scale out
- [ ] Memory > [80]% for [5] minutes → Investigate memory leak
- [ ] Database connections > [80]% → Add replicas
- [ ] Queue depth > [1000] → Add workers
- [ ] Error rate > [1]% → Page on-call
## Load Testing
- [ ] **Baseline test:** Measure current performance under typical load
- [ ] **Stress test:** Identify breaking point (max capacity before failure)
- [ ] **Spike test:** Test behavior under sudden 10x traffic spike
- [ ] **Soak test:** Run at [2x] typical load for [24] hours
- [ ] **Tools:** [k6 / JMeter / Gatling / Locust]
### Load Test Scenarios
- [ ] Scenario 1: [N] users browsing product catalog
- [ ] Scenario 2: [N] users checking out simultaneously
- [ ] Scenario 3: [N] API clients polling for updates
- [ ] Target performance: p95 < [200ms], error rate < [0.1]%
## Cost Optimization
- [ ] **Right-sizing:** Use smallest instance that meets SLA
- [ ] **Reserved instances:** [70]% reserved, [30]% on-demand/spot
- [ ] **Auto-scaling policies:**
- Scale up: When CPU > [70]% for [2] minutes
- Scale down: When CPU < [30]% for [10] minutes
- Min instances: [N], Max instances: [N]
- [ ] **Database optimization:** Remove unused indexes, optimize slow queries
- [ ] **CDN optimization:** Increase cache TTL where possible
## Geographic Distribution
- [ ] **Multi-region deployment:**
- Primary region: [us-east-1]
- Secondary region: [eu-west-1]
- Failover: Automatic DNS failover
- [ ] **Data locality:** Store user data in nearest region (GDPR compliance)
- [ ] **Latency optimization:** < [100ms] within region, < [300ms] cross-region
## Disaster Recovery
- [ ] **RTO (Recovery Time Objective):** [X] hours
- [ ] **RPO (Recovery Point Objective):** [X] minutes
- [ ] **Backup frequency:** Database backup every [X] hours
- [ ] **Failover testing:** Quarterly DR drills
- [ ] **Data replication:** Asynchronous cross-region replication
## Security at Scale
- [ ] **DDoS protection:** CloudFlare/AWS Shield enabled
- [ ] **Rate limiting:** Per-IP and per-user limits
- [ ] **WAF rules:** Block common attack patterns
- [ ] **Certificate management:** Auto-renewal with Let's Encrypt/ACM
## Deployment Strategy
- [ ] **Blue-green deployment:** Zero-downtime releases
- [ ] **Canary releases:** [10]% traffic to new version initially
- [ ] **Feature flags:** Toggle features without deployment
- [ ] **Rollback plan:** Automated rollback if error rate > [X]%
## Checklist Before Production
- [ ] Load tested at [3x] expected peak traffic
- [ ] Auto-scaling policies validated
- [ ] Database read replicas configured
- [ ] Caching strategy implemented and tested
- [ ] Monitoring and alerts configured
- [ ] Disaster recovery plan documented and tested
- [ ] Cost monitoring and budgets set
- [ ] Security review completed
- [ ] Runbooks created for common incidents
- [ ] On-call rotation established