AWS SAA-C03: Designing High-Performing and Elastic Compute Solutions
1. Foundations and Exam Mindset
For AWS Certified Solutions Architect Associate (SAA-C03), “design high-performing and elastic compute solutions” is really a workload-matching exercise. What it’s really testing is which compute approach fits the traffic pattern, latency target, state model, operational overhead, availability requirement, and budget. That’s the clue you want to train yourself to spot. The best answer is usually the simplest managed option that fully satisfies the requirement, not the most feature-rich one.
Scalability is the ability to handle growth. Elasticity is the ability to scale up and down automatically as demand changes. Horizontal scaling usually beats vertical scaling for availability and fault tolerance because it works naturally with load balancers, Auto Scaling, and multi-AZ design. For production and business-critical workloads, assume multi-AZ unless the question clearly limits scope or budget.
Stateless design is a major enabler of elasticity. Keep session state outside the compute tier in services like ElastiCache or DynamoDB so any instance, task, or function can handle any request. For asynchronous systems, also think about idempotency: workers may retry, Lambda may reprocess, and SQS standard queues provide at-least-once delivery. So anyway, elastic architectures have to be designed to handle duplicates safely.
Back-pressure matters too. If users do not need an immediate response, decouple with SQS instead of forcing synchronous scaling. A queue soaks up bursts, isolates failures, and lets workers scale independently. I’ve seen that solve problems that bigger instances never touched. Honestly, that’s often the real answer when the exam says a system fails during spikes even though the instances are already huge.
What the exam is really testing: can you identify clues like “bursty,” “minimal operational overhead,” “host-level access,” “Kubernetes required,” “path-based routing,” “TCP/UDP,” or “managed batch scheduling” and map them to the right service model?
2. Service Selection and Decision Framework
Use this compact decision tree on exam day:
- Need OS access, custom agents, special drivers, or long-running processes? → EC2
- Event-driven, short-lived, unpredictable traffic, minimal ops? → Lambda
- Need containers but not Kubernetes? → ECS
- Kubernetes is explicitly required? → EKS
- Want containers without managing servers? → Fargate as the compute option for ECS or EKS
- Need managed batch scheduling and job queues? → AWS Batch
- Need the quickest managed deployment for a common web app stack? → Elastic Beanstalk, which provisions resources such as EC2, ALB, and Auto Scaling underneath
Key comparisons:
- EC2 vs Lambda: EC2 for control and long-running or specialized workloads; Lambda for event-driven processing with a 15-minute maximum execution time.
- ECS vs EKS: ECS is usually the simpler AWS-native answer; EKS is justified when Kubernetes compatibility is a real requirement.
- Fargate vs EC2-backed containers: Fargate reduces ops; EC2-backed capacity gives more control, privileged access, and sometimes better cost at scale.
- Batch vs scheduled ECS/EC2 workers: Batch is the managed answer when the requirement is explicitly job scheduling and queue-based batch execution.
Exam clue mapping:
| Clue in question | Best-fit answer | Why not the common wrong answer |
|---|---|---|
| Minimal operational overhead, bursty requests | Lambda or Fargate | EC2 adds patching and capacity management |
| Host access, custom software, legacy agent | EC2 | Lambda and Fargate do not provide host-level control |
| Kubernetes standard must be preserved | EKS | ECS is simpler but not Kubernetes |
| Path-based routing for web services | ALB | NLB has no Layer 7 routing logic |
| TCP/UDP, static IP, source IP preservation | NLB | ALB is for HTTP/HTTPS and app-layer routing |
| Buffer spikes, process later | SQS + workers | Bigger instances do not solve burst absorption |
3. EC2 Performance Tuning Essentials
EC2 is still central to SAA-C03 because many workloads need control, predictable performance, or compatibility. Choose instance families by workload shape: T for burstable low-cost general use, M for balanced workloads, C for compute-heavy apps, R for memory-heavy apps, and storage-optimized families when local I/O is the bottleneck. Watch the T-family CPU credit model; it is cost-effective for bursty low baseline usage, but a poor fit for sustained CPU-heavy workloads.
Also know the common trade-offs between Graviton and x86: Graviton often offers strong price-performance for supported workloads, while x86 may be required for binary compatibility or vendor software constraints.
Performance is not just vCPU and memory. EBS throughput and IOPS are frequent bottlenecks. gp3 is the common general-purpose default because IOPS and throughput can be tuned independently; io1/io2 fit high-performance, low-latency I/O workloads. Instance store can provide very fast ephemeral local storage, but data is lost if the instance stops or fails. Use it only when the workload tolerates that risk.
The Nitro System improves performance by offloading virtualization, networking, and security functions to dedicated hardware. ENA provides enhanced networking, though support depends on instance type, AMI, and drivers. Network bandwidth also varies significantly by family and size, so “bigger CPU” is not always the answer to a throughput problem.
Placement groups matter in specialized designs. Cluster placement groups are best for low-latency east-west traffic, typically within a single AZ, which means they improve performance but can reduce resilience if misused. Spread and partition placement groups reduce correlated failure risk. For tightly coupled HPC workloads, know that Elastic Fabric Adapter exists, but it is a niche fit on supported instance types and operating systems.
Purchasing model clues: On-Demand for flexibility, Savings Plans for flexible steady usage, Reserved Instances for committed EC2 capacity, Spot for fault-tolerant workloads with a typical 2-minute interruption notice, and On-Demand Capacity Reservations when assured AZ-specific capacity matters.
4. Auto Scaling Patterns and Diagnostics
An Auto Scaling group defines minimum, desired, and maximum capacity across subnets and Availability Zones. But here’s the thing: good elasticity is a lot more than just turning Auto Scaling on and walking away. You need the right metric, instance warmup, and health behavior.
Metric selection:
- CPU utilization for compute-bound applications
- RequestCountPerTarget or latency for web tiers behind an ALB
- SQS backlog per instance or message age for worker fleets
- Custom business metrics when infrastructure metrics lag the real bottleneck
Scaling policy types: target tracking for most dynamic demand, step scaling for threshold-based jumps, scheduled scaling for known peaks, and predictive scaling for recurring patterns. Predictive scaling helps with patterns; it does not replace dynamic scaling for sudden bursts.
Important mechanics the exam can hint at:
- Default instance warmup prevents newly launched instances from distorting metrics before they are ready.
- Health check grace period gives booting instances time to pass checks.
- Lifecycle hooks let you run bootstrap or graceful shutdown actions.
- Instance refresh supports controlled rolling replacement.
- Mixed instances policies combine instance types and purchase options.
- Capacity rebalancing helps Spot-heavy groups replace at-risk instances early.
A practical mixed-capacity pattern is a baseline of On-Demand or Savings Plan-covered instances plus Spot for elastic overflow. That is often the best cost-performance answer for stateless fleets.
If scaling does not fix performance, check: app startup time, health check timing, queue backlog growth, downstream database saturation, or non-stateless session handling. Scale-out fails when new capacity is slow to become useful.
5. Load Balancing for Performance and Availability
ALB, NLB, and GWLB are not interchangeable.
Application Load Balancer (ALB) is Layer 7 and fits HTTP/HTTPS, host-based routing, path-based routing, gRPC, and web application patterns. It supports target types including instance, IP, and Lambda. Use ALB when the question describes URL routing, microservices, or a web front end. That’s the natural fit. Sticky sessions, TLS termination, and deregistration delay are common operational features to know.
Network Load Balancer (NLB) is Layer 4 and fits TCP, TLS, UDP, and TCP_UDP traffic. It’s the right answer when the exam mentions very high throughput, low latency, source IP preservation, or static IPs. Those clues are usually pretty direct. For internet-facing NLBs, you can associate Elastic IPs per AZ. NLB target types include instance, IP, and ALB. Health checks differ from ALB and can use TCP, HTTP, or HTTPS depending on target type.
Gateway Load Balancer (GWLB) is for transparent insertion of virtual security appliances using GENEVE. It is not a general web load balancer.
Know the nuance around cross-zone load balancing: it affects traffic distribution and can affect behavior and cost depending on the load balancer type. For exam purposes, the main clue is still protocol and routing need: path/host routing = ALB, TCP/UDP or static IP = NLB, security appliance insertion = GWLB.
6. Serverless Compute: Lambda and API Gateway
Lambda is one of the strongest SAA-C03 answers for bursty, event-driven, short-lived processing. But be precise: Lambda functions should be designed as stateless. Execution environments may be reused, and /tmp storage can persist within a warm environment, but you must not rely on local state between invocations. Lambda has a maximum execution time of 15 minutes, configurable ephemeral storage in /tmp up to 10 GB, and scaling is governed by account and function concurrency quotas, not infinite capacity.
Reserved concurrency both sets aside concurrency for a function and caps its maximum concurrency. That’s useful when you’re trying to protect downstream systems such as RDS. Provisioned concurrency keeps execution environments pre-initialized to reduce cold starts for latency-sensitive paths.
Invocation models matter:
- Synchronous: API Gateway or direct invoke waits for the response.
- Asynchronous: services like EventBridge or S3 invoke Lambda and retry on failure.
- Event source mappings: services like SQS poll and batch records for Lambda.
For SQS-triggered Lambda, know the exam-relevant mechanics: batch size affects throughput, visibility timeout should exceed expected processing time, partial batch response can avoid replaying successful records, and DLQs help isolate poison messages. If the queue backlog grows, the bottleneck may be downstream, not Lambda itself.
API Gateway supports REST APIs, HTTP APIs, and WebSocket APIs. It’s a managed front door for authentication, throttling, usage plans, and serverless integrations. The exam may also compare it with ALB + Lambda targets for HTTP workloads, but API Gateway is usually the more feature-rich managed API answer.
One more nuance: VPC-attached Lambda can increase complexity when the function needs private resources. It is often necessary, but you should recognize that networking and downstream latency can become part of the performance story.
7. Containers and Batch: ECS, EKS, Fargate, and AWS Batch
Fargate is not an orchestrator; it is a serverless compute option for ECS or EKS. ECS is usually the simpler AWS-native container orchestration answer, and I often prefer it when Kubernetes isn’t actually required. Core ECS constructs worth knowing are cluster, task definition, task, and service. In practice, task definitions include CPU, memory, port mappings, logging, health checks, and IAM roles such as the task role and execution role.
EKS provides managed Kubernetes control plane components, but you still operate Kubernetes workloads and make EC2 capacity decisions for node-backed clusters. Understand the scaling layers: Horizontal Pod Autoscaler scales pods, while node capacity is handled separately by mechanisms such as Cluster Autoscaler. That separation is a common source of confusion.
Fargate reduces host management but is not suitable when workloads need privileged containers, DaemonSets, daemon-level host access, or specialized host customization. In EKS specifically, DaemonSets are not supported on Fargate, which is a useful exam elimination clue.
AWS Batch is the managed answer for queued jobs, retries, priorities, and compute environment orchestration. If the question says scheduled jobs, parallel processing, or managed batch scheduling, Batch is usually better than building your own worker scheduler on EC2 or ECS.
8. Messaging Patterns for Elastic Compute
SQS, SNS, and EventBridge solve different problems. SQS is a durable pull-based queue for buffering and back-pressure. SNS is a pub/sub push service for fan-out. EventBridge is an event bus for routing and filtering events across services. EventBridge is excellent for integration; it is not a substitute for SQS when you need workload buffering.
Know SQS Standard vs FIFO:
- Standard: nearly unlimited throughput, at-least-once delivery, best-effort ordering
- FIFO: ordered processing and deduplication support with lower throughput characteristics
Important queue settings:
- Visibility timeout should exceed processing time
- Long polling reduces empty receives and cost
- Dead-letter queues isolate poison messages after repeated failure
- Retention period affects recovery and replay windows
For worker scaling, do not look only at raw queue depth. Consider message age, processing time, and backlog per consumer. That’s what keeps you from under-scaling or over-scaling the fleet.
9. Performance, Security, and Cost Optimization
High-performing compute design often depends on services around compute. CloudFront reduces latency and origin load with edge caching. Global Accelerator improves ingress performance by routing users to the optimal AWS edge location and then across the AWS global network to healthy endpoints. Route 53 latency-based and failover routing are also exam-relevant traffic patterns.
ElastiCache is one of the best performance levers in AWS because it reduces repeated database reads and lowers compute pressure. For shared file needs, EFS provides elastic NFS storage for Linux workloads, while FSx variants fit specific needs such as Windows File Server or Lustre.
Security is part of good compute architecture. Use IAM roles for EC2 instance profiles, Lambda execution roles, and ECS task roles; avoid hardcoded credentials. Keep compute in private subnets when possible, control traffic with security groups, understand that NACLs are subnet-level stateless filters, and store secrets in Secrets Manager or Parameter Store. Elastic systems should also protect downstream resources with throttling, queue buffering, and reserved concurrency.
For cost optimization, right-size first, then choose the right commitment model. A common pattern I like is keeping the steady baseline on Savings Plans or Reserved capacity, then using On-Demand or Spot for the elastic burst. And it’s worth comparing the economics of the services themselves: Lambda is excellent for sporadic work, Fargate works well for low-ops containers, and EC2 usually makes the most sense for steady or highly tuned workloads.hly tuned workloads.
10. Troubleshooting and Exam Traps
Common diagnostics:
- ALB returns 503/5xx during spikes → check unhealthy targets, app startup delay, health check path, subnet/AZ coverage, and whether scaling is using the right metric.
- EC2 fleet scales out but latency stays high → check EBS IOPS/throughput, connection pooling, database bottlenecks, and session stickiness.
- Lambda times out or throttles → check memory sizing, downstream latency, VPC path, reserved concurrency, and account concurrency limits.
- ECS tasks stay pending → check cluster capacity, CPU/memory reservations, task placement, and networking limits.
- Queue backlog keeps growing → check visibility timeout, poison messages, consumer concurrency, and downstream saturation.
High-frequency exam traps:
- Choosing EKS when Kubernetes is not required
- Choosing Lambda for a 45-minute job when the limit is 15 minutes
- Choosing NLB when path-based routing is required
- Choosing larger instances when the real bottleneck is EBS, network, startup time, or the database
- Ignoring multi-AZ for production availability
- Using Spot for interruption-sensitive workloads
Final memory anchors: ALB = Layer 7 routing. NLB = Layer 4, static IP, source IP preservation. Lambda = event-driven, 15-minute max, concurrency-aware. Fargate = serverless compute for containers, not an orchestrator. Batch = managed batch scheduler. SQS = buffering. SNS = fan-out. EventBridge = routing.
If you keep matching workload clues to service behavior, this domain becomes much easier. The exam is not rewarding the most advanced architecture. It is rewarding the most appropriate one.