Your application consists of 10% writes and 90% reads. You currently service all requests through a Route53 Alias
Record directed towards an AWS ELB, which sits in front of an EC2 Auto Scaling Group. Your system is getting very
expensive when there are large traffic spikes during certain news events, during which many more people request to
read similar data all at the same time. What is the simplest and cheapest way to reduce costs and scale with spikes like
Create an S3 bucket and asynchronously replicate common requests responses into S3 objects. When a request comes in for a
precomputed response, redirect to AWS S3.
Create another ELB and Auto Scaling Group layer mounted on top of the other system, adding a tier to the system. Serve most read
requests out of the top layer.
Create a CloudFront Distribution and direct Route53 to the Distribution.
Use the ELB as an Origin and specify Cache Behaviours to proxy cache requests which can be served late.
Create a Memcached cluster in AWS ElastiCache. Create cache logic to serve requests which can be served late from the in-memory
cache for increased performance.
CloudFront is ideal for scenarios in which entire requests can be served out of a cache and usage patterns involve heavy
reads and spikiness in demand. A cache behavior is the set of rules you configure for a given URL pattern based on file
extensions, file names, or any portion of a URL path on your website (e.g., *.jpg). You can configure multiple cache
behaviors for your web distribution. Amazon CloudFront will match incoming viewer requests with your list of URL patterns,
and if there is a match, the service will honor the cache behavior you configure for that URL pattern. Each cache behavior
can include the following Amazon CloudFront configuration values: origin server name, viewer connection protocol,
minimum expiration period, query string parameters, cookies, and trusted signers for private content.