Question

Difficulty: HardOptimizing Compute and Storage Performance

An enterprise financial reporting application runs on AWS. The application tier consists of a fleet of Amazon EC2 `c5.xlarge` instances in an Auto Scaling Group behind an Application Load Balancer (ALB). The application queries an Amazon RDS for PostgreSQL database (configured in a Multi-AZ deployment) to retrieve transaction logs, processes the data, and writes intermediate files to attached 300 GiB300\text{ GiB} `gp3` EBS volumes before uploading the consolidated reports to Amazon S3.

During end-of-month processing, users experience severe delays. A solutions architect reviews the Amazon CloudWatch metrics and notes the following:
* The EC2 instances show low CPU and memory utilization, but high I/O wait times.
* The `gp3` EBS volumes show `VolumeThroughput` consistently pegged at 125 MiB/s125\text{ MiB/s} and high `VolumeQueueLength`.
* The RDS database experiences high CPU utilization and read latency on the primary instance, while the standby instance CPU utilization remains near 0%0\%.

Which two actions should the solutions architect take to resolve the performance bottlenecks and optimize the system's performance? (Select TWO.)

  1. Modify the gp3 EBS volume configuration to increase the provisioned throughput beyond the default 125 MiB/s125\text{ MiB/s} to match the peak transfer rate of the application.Answer
  2. Create an Amazon RDS PostgreSQL read replica and modify the reporting application to route read-only query traffic to the read replica's endpoint.Answer
  3. C
    Modify the database connection string in the application to direct read-only query traffic to the RDS Multi-AZ standby instance's DNS endpoint.
  4. D
    Configure the Auto Scaling Group to use Application Load Balancer target tracking scaling policies and submit a support ticket to pre-warm the ALB prior to the end-of-month cycle.
  5. E
    Purchase EC2 Instance Savings Plans for the c5 instance family to reduce compute costs and use the savings to scale out the EC2 instances automatically during processing.

Answer

The solutions architect should increase the provisioned throughput on the gp3 EBS volumes beyond the default 125 MiB/s125\text{ MiB/s} and create an Amazon RDS PostgreSQL read replica to offload read-only reporting query traffic from the primary instance.
The correct approach involves identifying and addressing both the storage write bottleneck and the database read bottleneck. First, the gp3 volumes can be modified to scale throughput independently of size, resolving the baseline throughput limit of 125 MiB/s125\text{ MiB/s}. Second, creating an RDS read replica and directing read queries to it offloads the database read workload from the primary instance.

Step-by-Step Solution

1
Analyze CloudWatch metrics for the storage layer.
Identify that the gp3 EBS volumes are pegged at the default 125 MiB/s125\text{ MiB/s} throughput limit, resulting in high I/O wait times on the EC2 instances.
This confirms that the storage throughput is the primary bottleneck for the application tier's file-writing operations.
2
Propose gp3 volume optimization.
Increase the provisioned throughput of the gp3 volumes independently without resizing the volume storage capacity.
Unlike gp2, gp3 allows independent scaling of throughput and IOPS, allowing cost-effective remediation of the throughput bottleneck.
3
Analyze database resource utilization metrics.
Observe that the primary RDS instance has high CPU and read latency, while the Multi-AZ standby instance is idle.
This indicates that read-heavy query traffic is causing resource exhaustion on the primary database instance.
4
Implement read scaling for the database.
Deploy an Amazon RDS PostgreSQL read replica and direct read-only query traffic from the application to this replica endpoint.
An RDS Multi-AZ standby instance cannot serve read traffic, so a dedicated read replica is required to scale read operations.

Key Concept

Identifying storage performance bottlenecks by looking at EBS throughput limits and offloading read traffic from RDS primary instances using read replicas rather than passive standby instances.
Rate this question