learn

Scalability

Scalability

One-Line Framework to Remember

  • TLC AC DSR LIC HM

Traffic → Load Balancer → Compute → Application → Containers/Serverless → Database → Storage → Data/RAG → LLM/Agents → Infrastructure → Performance/Cost → HA/DR → Monitoring & Testing

Easy Interview Summary

“For scalability, I first define two things: the maximum traffic the system needs to handle and how quickly traffic can increase. Then I design scalability across every layer—traffic management, compute, application architecture, containers/serverless, service quotas, databases, storage, data/RAG, LLMs, and agents. I use horizontal scaling, autoscaling, caching, semantic caching, connection pooling, asynchronous processing, queues, and appropriate database and AI scaling strategies. Finally, I validate the architecture through load and chaos testing, observability, capacity planning, FinOps, quota management, and high-availability/disaster-recovery design.”

1. Scaling Strategy

  • Limit of Scaling — Determine the maximum/peak traffic the system must handle using users, requests/sec, concurrency, data volume, and expected growth.
  • Rate of Scaling — Determine how quickly traffic can increase.
  • Design for traffic patterns — Plan for normal traffic, expected peaks, and sudden traffic spikes.
  • Define SLOs(Service Level Objectives) — Establish acceptable latency, availability, throughput, and error-rate targets before sizing the system.

2. Load Balancer & Traffic Management

  • Load balancing — Distribute traffic across healthy application instances or services.
  • Peak preparation — Validate that load balancers, backend targets, quotas, and autoscaling policies can support expected peak traffic.
  • Traffic protection — Use rate limiting, throttling, and concurrency controls to prevent downstream services from being overwhelmed.
  • Caching/CDN — Serve cacheable content closer to users and reduce requests reaching application servers.
  • Health checks — Route traffic only to healthy application instances.
  • Autoscaling integration — Configure scaling policies based on meaningful application or infrastructure metrics.

3. Compute / Server Scalability

  • Horizontal scaling — Add or remove instances as demand changes.

  • Autoscaling — Use mechanisms such as AWS Auto Scaling Groups, EC2 Auto Scaling, or equivalent cloud autoscaling services.

  • Scheduled scaling — Pre-scale resources when predictable traffic increases are known in advance.

  • Fast startup — Use optimized machine/container images and minimize initialization time so new capacity becomes available quickly.

  • Right-size compute — Select instance types based on workload characteristics:

  • Compute-heavy → Compute optimized

  • Memory-heavy → Memory optimized

  • AI/ML/GPU → Accelerated computing

  • General workload → General purpose

  • Vertical scaling — Increase machine size when appropriate, but avoid depending exclusively on larger machines.

  • Scale on demand — Use metrics such as CPU, memory, requests/sec, latency, queue depth, or business metrics rather than relying on a single metric for every workload.

4. Application Architecture

  • Independent scaling — Design services/components so heavily used parts can scale without unnecessarily scaling the entire application.
  • Microservices when justified — Use microservices when independent deployment, ownership, or scaling provides clear benefits; do not introduce microservices solely for scalability.
  • Stateless design — Keep application instances stateless where possible so requests can be distributed easily across instances.
  • Externalize state — Store sessions, workflow state, and persistent data in appropriate external systems such as databases, caches, or object storage.
  • Containers/serverless — Use containers or serverless platforms when they provide operational or scaling benefits for the workload.
  • Asynchronous processing — Use queues and background workers for long-running or non-interactive tasks.
  • Remove single points of failure — Distribute critical components and provide redundancy.

5. Container / Kubernetes Scaling

  • Resource requests/limits — Define appropriate CPU and memory requests and limits for workloads.

  • HPA — Use Horizontal Pod Autoscaler to increase or decrease pod replicas based on CPU, memory, or custom/external metrics.

  • Event-driven autoscaling — Use tools like KEDA (Kubernetes Event-driven Autoscaling) to scale workloads dynamically based on external triggers (e.g., Kafka lag, SQS queue depth).

  • Cluster Autoscaler & Modern Provisioning — Add or remove worker nodes when the cluster needs capacity. Consider modern node provisioners like Karpenter (on AWS) for faster, workload-native, and cost-efficient node scaling.

  • VPA — Use Vertical Pod Autoscaler when workloads benefit from automatically adjusting pod resource requests; understand its interaction with HPA before combining them.

  • Fast scaling — Use techniques such as cluster overprovisioning when workloads require additional node capacity with very low startup delay.

  • Application metrics — Scale using meaningful metrics such as:

  • CPU / Memory

  • Requests/sec

  • Request latency

  • Queue depth

  • Concurrent requests

  • Custom application metrics

  • Pod distribution — Use appropriate scheduling, topology spread, and disruption policies for highly available workloads.

6. Serverless Scaling

  • Automatic scaling — Serverless platforms can automatically create additional execution environments as demand increases, subject to service quotas and concurrency limits.
  • Provisioned Concurrency — Use it when predictable low startup latency is required, especially for workloads affected by cold starts.
  • Scheduled preparation — Increase provisioned capacity ahead of predictable traffic when appropriate.
  • Concurrency controls — Configure concurrency limits to protect downstream systems and control resource consumption.
  • Async processing — Use asynchronous invocation, queues, or event-driven processing when the caller does not require an immediate result.
  • Quota awareness — Verify function concurrency, event-source, API, and downstream service limits before large traffic events.

7. Account & Service Limits

  • Check quotas early — Review cloud service quotas and limits before high-traffic events.
  • Identify bottlenecks — Check limits for compute, load balancers, APIs, serverless concurrency, databases, networking, storage, and AI provider rate limits (TPM/RPM).
  • Request quota increases — Request higher service quotas when the required scale exceeds current limits.
  • Design around hard limits — If a service has a hard architectural limit, partition, distribute, or redesign the workload rather than assuming the limit can be increased.
  • Test limits — Validate quota behavior during load testing rather than discovering limits during production traffic.

8. Database Scalability

  • Size for peak load — Ensure the database can handle peak queries, transactions, connections, storage, and I/O.
  • Connection pooling — Reuse database connections instead of creating a new connection for every request.
  • RDS Proxy when appropriate — Use RDS Proxy for supported AWS database workloads when connection management, connection pooling, or failover behavior benefits from it.
  • Read scaling — Use read replicas or equivalent read-scaling mechanisms for read-heavy relational workloads.
  • Query optimization — Optimize queries, indexes, connection management, transactions, and data access patterns.
  • Caching — Cache frequently accessed data to reduce database load.
  • Partitioning/sharding — Partition or shard data when a single database cannot provide the required scale and the application can support the resulting complexity.
  • DynamoDB capacity — Select an appropriate DynamoDB capacity mode and configure/provision capacity according to workload characteristics.
  • DynamoDB hot partitions — Design partition keys to distribute traffic and avoid concentrated access patterns.
  • DAX — Use DynamoDB Accelerator when an application benefits from very low-latency, read-heavy access patterns and DAX fits the workload.

9. Storage & Static Content

  • Object storage — Store static assets and large unstructured objects in services such as Amazon S3 or equivalent object storage.
  • CDN — Use CloudFront or another CDN to cache and deliver content closer to users.
  • Separate static content — Keep static assets separate from application compute so they do not consume application-server capacity.
  • Scalable storage — Use object storage for documents, images, large files, logs, backups, and suitable AI/ML datasets.
  • Lifecycle management — Use storage lifecycle policies to move or delete data when appropriate.

10. Data & RAG Scalability

  • Scalable ingestion — Build ingestion pipelines (e.g., Apache Spark, Ray, or serverless) that can process structured and unstructured data incrementally at massive scale.
  • Incremental processing — Process only new or changed data instead of rebuilding the entire dataset for every update.
  • Data partitioning — Partition large datasets by appropriate dimensions such as tenant, time, application, or business domain.
  • Vector-store scaling — Scale vector databases/search systems (e.g., Pinecone, Milvus, Qdrant, OpenSearch) according to document volume, vector dimensions, query volume, and latency requirements. Use distributed sharding for billion-scale vectors.
  • Retrieval optimization — Use techniques such as hybrid search, metadata filtering, reranking, result caching, and incremental indexing.
  • RAG quality and performance — Optimize chunking, embeddings, indexes, retrieval parameters, and context size based on both retrieval quality and latency/cost.
  • Multi-tenant isolation — Design tenant-aware indexing and authorization so one tenant's data cannot be retrieved by another tenant.

11. GenAI / LLM Scalability

  • Model selection — Select models based on accuracy requirements, latency, throughput, context requirements, availability, and cost.
  • Model routing — Use smaller models for simpler tasks and larger models when additional capability is required.
  • Fallback strategy — Implement model/provider fallback where reliability requirements justify it.
  • Efficient self-hosting — If hosting open-source models, use frameworks like vLLM (with PagedAttention) or TensorRT-LLM to maximize GPU utilization, optimize KV cache memory, and radically scale throughput.
  • Adapter scaling (PEFT/LoRA) — Serve multiple custom-tuned models from a single base model instance by swapping lightweight adapters, saving massive GPU VRAM costs.
  • Semantic Caching — Use tools like GPTCache to cache identical or highly similar prompt responses, drastically reducing expensive API calls and inference latency.
  • Context optimization — Reduce unnecessary prompt/context tokens to improve latency and cost.
  • Batch processing — Use batch inference APIs or asynchronous processing for workloads that do not require immediate responses to save up to 50% on API costs.
  • Streaming — Stream model output for interactive applications when supported to improve perceived responsiveness.
  • Concurrency control — Control concurrent model requests to stay within provider quotas (Tokens Per Minute/Requests Per Minute) and protect downstream systems.
  • Token monitoring — Track input/output tokens, latency, throughput, errors, and cost.

12. Agent & Multi-Agent Scalability

  • Stateless agents — Keep agents stateless where possible and store persistent workflow state externally.
  • Durable execution — Use stateful orchestrators (like LangGraph or Temporal) to maintain complex workflow states reliably, ensuring long-running agents can pause, resume (human-in-the-loop), and recover from crashes without losing context.
  • Specialized agents — Split complex workflows into specialized components when this improves maintainability or allows independent scaling.
  • Parallel execution — Execute genuinely independent tasks in parallel to reduce overall workflow latency.
  • Queue-based processing — Use queues for asynchronous agent tasks and workloads that can tolerate delayed execution.
  • Reliability controls — Implement timeouts, retries, exponential backoff, concurrency limits, loop detection/prevention, failure isolation, and idempotency.
  • Failure containment — Prevent a slow or failed agent/tool from blocking the entire workflow.
  • Tool protection — Rate-limit and protect external APIs/tools called by agents.

13. Streaming & AIOps Scalability

  • Event streaming — Use platforms such as Kafka, Amazon Kinesis, Azure Event Hubs, or Google Pub/Sub for high-volume event processing.
  • Partitioning — Partition streams using appropriate keys such as tenant, service, application, or event type.
  • Consumer scaling — Scale consumers according to event volume, partition count, processing latency, and consumer lag.
  • Event filtering — Filter, aggregate, and deduplicate events before sending them to expensive downstream processing or AI systems.
  • Backpressure — Slow or pause producers/consumers appropriately when downstream systems cannot keep up.
  • Dead-letter handling — Send repeatedly failed events to a dead-letter queue/topic for later investigation or reprocessing.
  • Idempotency — Ensure duplicate events do not produce unintended duplicate side effects.
  • AIOps pipeline — A scalable AIOps flow can be structured as: Logs/Metrics/Traces → Event Processing → Correlation/Analysis → AI → Decision → Automation
  • Human approval — Require human approval for high-impact or irreversible automated actions where appropriate.

14. Infrastructure & Deployment Scalability

  • Infrastructure as Code — Use AWS CDK, CloudFormation, Terraform, or equivalent tools for repeatable infrastructure.
  • GitOps — Use declarative continuous deployment tools like ArgoCD or Flux to automatically sync Kubernetes cluster states with Git repositories, ensuring scalable, auditable, and automated rollouts.
  • CI/CD — Automate testing and deployment through CI/CD pipelines.
  • Parameterization — Parameterize infrastructure for customers, regions, environments, and workloads.
  • Reusable modules — Create reusable infrastructure components instead of duplicating infrastructure definitions.
  • Deployment strategies — Use rolling, canary, or blue/green deployments when appropriate for the workload.
  • Version everything important — Version models, prompts, agent logic, RAG indexes/configuration, application code, and infrastructure.
  • Rollback — Maintain a tested rollback or recovery mechanism.
  • Multi-region when required — Use multi-region architecture only when availability, latency, regulatory, or disaster-recovery requirements justify its additional complexity.

15. Performance, Cost & Capacity

  • Monitor core metrics — Track latency, throughput, concurrency, CPU/Memory, token usage, database connections, error rate, and cost.
  • Find bottlenecks end-to-end — Analyze the complete request path: Load Balancer → Compute → Application → Database → External Services → AI/LLM
  • Reduce unnecessary work — Use caching, batching, asynchronous processing, and efficient queries where appropriate.
  • Right-size resources — Choose appropriate compute, database, and model capacity rather than simply increasing resource size.
  • FinOps and Spot compute — Leverage spot instances/preemptible VMs for fault-tolerant, asynchronous AI workloads (like batch embedding generation or model training) to reduce compute costs significantly.
  • Cost-aware scaling — Balance performance requirements against infrastructure, database, network, and AI/LLM costs.
  • Capacity forecasting — Use historical usage and expected growth to forecast future capacity requirements.

16. Reliability & High Availability

  • Multi-AZ deployment — Deploy critical workloads across multiple Availability Zones where the service supports it.
  • Redundancy — Replicate critical application components and data according to availability requirements.
  • Resilience patterns — Implement retries, timeouts, circuit breakers, health checks, failover, and graceful degradation.
  • Failure isolation — Prevent failure in one component from cascading through the entire application.
  • Backup and recovery — Maintain backups and regularly test restoration.
  • Disaster recovery — Define RTO and RPO and design the recovery architecture around those requirements.
  • Dependency resilience — Plan for failures or throttling of external APIs, AI providers, databases, and other dependencies.

17. Monitoring & Testing

  • Load testing — Test expected production traffic levels.
  • Stress testing — Determine how the system behaves beyond normal capacity.
  • Spike testing — Test sudden increases and decreases in traffic.
  • Endurance testing — Test sustained traffic over long periods to identify leaks, degradation, or resource exhaustion.
  • Chaos engineering — Purposefully inject failures (e.g., killing pods, simulating network latency, or throttling APIs) to validate system resilience and fallback strategies before real-world incidents occur.
  • Failure testing — Test component failures, dependency failures, network failures, and recovery behavior.
  • Test realistic traffic — Test normal, peak, and sudden traffic patterns rather than only average traffic.
  • End-to-end monitoring — Monitor: User → Load Balancer → Application → Database → AI/RAG → External Services
  • GenAI observability — Monitor RAG retrieval quality, LLM latency, agent execution time, tool calls, token usage, model errors, output quality, and cost using tools like LangSmith or Arize.
  • Capacity validation — Confirm that scaling behavior, quotas, limits, and recovery mechanisms work under realistic load.

18. AWS High-Traffic Events

  • Event planning — For major expected traffic events, review the architecture and scaling strategy well before the event.
  • AWS support coordination — Consider AWS Infrastructure Event Management (IEM) when the event and architecture justify additional AWS planning/support.
  • Review expected traffic — Estimate peak requests, concurrency, geographic distribution, and traffic growth rate.
  • Review quotas — Verify relevant AWS service quotas and request increases where necessary.
  • Validate scaling — Confirm autoscaling, scheduled scaling, caching, database capacity, and downstream limits.
  • Load test beforehand — Test the architecture at or near expected peak levels where practical.
  • Monitor during the event — Establish dashboards, alerts, escalation paths, and operational ownership before the event.
  • Recovery plan — Ensure rollback, failover, and incident-response procedures are documented and tested.

Learning checkpoint

Mark this guide complete to include it in your local Engineering Journey.

Knowledge path

Connected concepts

Explore the knowledge graph

WATCH WITH THIS TOPIC