Which solution meets these requirements and is the MOST operationally efficient?
Use Amazon API Gateway and direct transactions to the AWS Lambda functions as the application layer. Use Amazon Simple Queue Service (Amazon SQS) as the communication layer between application services.
Use Amazon CloudWatch metrics to analyze the application performance history to determine the server’s peak utilization during the performance failures. Increase the size of the application server’s Amazon EC2 instances to meet the peak requirements.
Use Amazon Simple Notification Service (Amazon SNS) to handle the messaging between application servers running on Amazon EC2 in an Auto Scaling group. Use Amazon CloudWatch to monitor the SNS queue length and scale up and down as required.
Use Amazon Simple Queue Service (Amazon SQS) to handle the messaging between application servers running on Amazon EC2 in an Auto Scaling group. Use Amazon CloudWatch to monitor the SQS queue length and scale up when communication failures are detected.
Explanations:
This solution leverages Amazon API Gateway to manage RESTful API requests efficiently, with AWS Lambda as the application layer to handle transactions without overloading any single component. Using Amazon SQS for communication allows for decoupling of services and ensures that messages are queued if one tier is overloaded, which improves reliability and scalability.
This option suggests simply increasing the size of EC2 instances based on historical performance metrics. While it may address the immediate performance issue, it does not modernize the application architecture or provide a long-term solution to the scalability problem, as it doesn’t include any decoupling or queueing mechanisms to handle overloads.
This approach uses SNS for messaging, which is primarily for publish/subscribe scenarios and not ideal for handling message queuing between services in a multi-tiered application. It also lacks a mechanism for dealing with overloads and scaling the services effectively, relying instead on manual monitoring and scaling adjustments.
While using SQS for messaging between EC2 instances in an Auto Scaling group is a step in the right direction, it still relies on EC2 instances for the application layer, which may not fully modernize the architecture. Additionally, SQS does not directly scale the application tier itself; it only queues messages. The solution does not address how to manage the application tier efficiently under load.