Scaling your application as you grow should not mean slow to load and expensive to run. Learn how you can use different AWS building blocks such as Amazon ElastiCache and Amazon CloudFront to “cache everything possible” and increase the performance of your application by caching your frequently-accessed content. This means caching at different layers of the stack: from HTML pages to long-running database queries and search results, from static media content to application objects. And how can caching more actually cost less? Attend this session to find out!
21. Browser Caching
Set max-age or expiry date in the headers.
HTML5 Application Cache.
Helps eliminate network latency.
But… Browser cache size is limited.
(e.g. IE is 8-50M, Chrome is < 80M, Firefox is 50MB, etc.)
23. Time to First Byte
68 ms
SYN
68 ms
68 ms
136 ms
SYN/ACK
ACK,
GET /image.jpg HTTP/1.1
Client
Server
24. Bring the Bytes Closer to Your Users
10 ms
Saves 68 ms
RTT
68 ms
SYN
SYN
SYN/ACK
SYN/ACK
ACK,
GET /image.jpg HTTP/1.1
GET /image.jpg HTTP/1.1
Client
CloudFront
Origin
Time to first byte: 20 ms vs. 136 ms
27. Edge Cache
How do you decide what to cache?
• Static or Re-Usable Content
• Customized Content
• On-Demand and Live Video
• Dynamic or Unique Content
28. Cache Static or Re-Usable Content
HTTP/1.0 200 OK
Date: Mon, 19 Mar 201 12:51:28 GMT
Server: Apache
Last-Modified: Mon, 19 Mar 2012 07:15:25 GMT
Accept-Ranges: bytes
Content-Length: 1918
Cache-Control: max-age=86400
Content-Type: image/jpeg
Vary: Accept-Encoding
Age: 16
X-Cache: Hit from cloudfront
Connection: keep-alive
37. Dynamic Content?
Zero TTL – cannot be cached! CloudFront can still help…
TCP/IP optimizations for the network path
Keep-Alive Connections to reduce RTT
SSL Termination close to viewers
POST/PUT upload optimizations
Latency Based Routing
Low prices, same as static content delivery!
38. “We are excited to use CloudFront's new
POST, PUT, PATCH, and DELETE capabilities
to accelerate our RESTful APIs on Amazon
EC2. With these new HTTP methods we can
now take advantage of CloudFront’s global
footprint and optimized connections back to
our origin servers in AWS. Routing our
customers’ API requests via a CloudFront edge
location near them will help improve their
experience by minimizing packet loss and
upload latency. This will help provide a
streamlined experience for our customers.”
- Ilan Rabinovitch, Tech Lead, Site Reliability Engineering
40. You can’t have dessert,
until you have your dinner!
-An Experiment.
https://secure.flickr.com/photos/stephen-oung/6319155216/
41. Experiment Premise
• Start with basic infrastructure.
–
–
–
–
–
–
Single m1.large EC2 instance running Amazon Linux
Single non-Multi-AZ m1.xlarge RDS MySQL 5.6 instance
Apache httpd-2.2.25
PHP 5.3.27
Drupal Commerce Kickstart 7.2
EIP on Instance
• Throw a ton of traffic at it.
– 8,000,000 queries, 40 per second, from 4 other instances.
• Profile it.
– New Relic PHP agent
– webpagetest.org
44. Web Cache
Webserver or proxy caches would live between
your CDN/Users and your web tier and can offer
up increased cost performance via reducing
internal application and database load. Can also
offer up increased edge to origin speed for lots of
content.
64. Web Cache
• Opt for in-memory caching when possible.
• Pay attention to your cache hit/miss ratios. It could be a sign that you
need to re-size the instances or re-size the number of nodes in your
cache pool.
• Set smart TTLs so that you don’t affect new deploys or cache content
for too long.
• Be smart about what cookies can burst cache and what cookies can’t.
Don’t serve up other people’s content or stale dynamic pages.
65. Web Cache
How do you decide what to cache?
– All logged out user pages
– Any completely static pages
– Traffic/log analysis
•
•
•
•
Look at your web logs/CDN logs
Find heavily hit pages
Figure out how often they actually change
Apply a TTL to that page to be cached
– Even 60 second TTLs could help drastically!
67. Application Cache
Application level caches for information such
as session data, temporary application data
such as cart information, and live aggregation
of data feeds.
74. Application Cache
Use Cases:
– Session information
– Temporary data
• Cart info, metadata
– Rate limiting
• Fight abuse of APIs, spamming, functionality abuse
– Counters
• Views, Scores, Leader Boards
75. Application Cache
How do you decide what to cache?
– Ideally, you have to treat data you cache at this tier as
loss tolerant if working with in-memory caches.
– Session information that wouldn’t make sense in
cookies or in a true DB.
– Look at the kind of data your application is generating
and storing in a DB that it might not need to.
77. Database Cache
Reduce workload on database servers by
caching commonly requested information, or
any information that might not change
frequently (i.e., user info, listing info, product
info).
78. Database Cache
Popular solutions:
– In-engine query caches
– Memcached
• On dedicated host
• On DB host (built in w/ MySQL 5.6)
– Redis
• On dedicated host
79. Database Cache
A word of caution:
In-engine DB caches are often not recommended for
many use cases, as they can significantly impact the
performance of many databases. Depending on the
workload and dataset you have, an in-engine query
cache might not be a good idea for you. We recommend
off DB caches where possible.
83. MySQL 5.6 + Memcached
RDS MySQL supports version
5.6 with integrated Memcached
on the instance:
– Part of the InnoDB engine
– Memcached running as part of MySQL
talks directly to data in InnoDB tables,
essentially turning MySQL into a fast
“key-value store”
– From the opposite view point, adds
persistence to Memcached
– Same Memcached API as standalone
https://dev.mysql.com/doc/refman/5.6/en/innodb-memcached-intro.html
84. AWS Marketplace & Partners Can Help
•
Customers can find, research, buy
software.
•
Simple pricing, aligns with Amazon
EC2 usage model.
•
Launch in minutes!
•
Marketplace billing integrated into your
AWS account.
•
1100+ products across 24+ categories.
Learn more at: aws.amazon.com/marketplace
88. Experiment Infrastructure (with cake)
• Added in ElastiCache Memcached
cache.m1.large
• Added in Amazon CloudFront for static content
– Tuned expires and cache headers in Apache
• Added in APC for PHP caching
– Increased memory to 128Mb, no other changes
• Did nothing to the DB
• Drupal memcached & CDN modules
89. Experiment Infrastructure (with cake)
CloudFront
Elastic IP
Amazon RDS
DB Instance
Web/App
Instance
Clients
ElastiCache
Cache Node
92. Toronto Star
•
•
•
•
Canada’s largest daily newspaper
Focused on metro Toronto
3.3 million monthly unique visitors
Small in-house digital group,
supported by vendors & corporate IT
• Digital group run as “startup” within
corporate structure
• Tech stack includes Java, PHP,
Ruby, Python
103. Edge – The Onion Skin
• Examples: Akamai,
CloudFront
• Static Asset caching
• Full site caching
• Origins
• Behaviors
• thestar.com, wheels.ca,
toronto.com, thegridto.com
Edge
104. Edge – The Onion Skin
Cloudfront
Elastic Load Balancer
Production - US East Region
Thestar.com
architecture
VPC
Dispatcher/Apache
Amazon Linux 64 Bit
C1 Medium
Publish CQ/CRX
Publish CQ/CRX
Amazon Linux 64 Bit Amazon Linux 64 Bit
C1-Xlarge
C1-Xlarge
Dispatcher/Apache
Amazon Linux 64 Bit
C1 Medium
Publish CQ/CRX
Amazon Linux 64 Bit
C1-Xlarge
Publish CQ/CRX
Amazon Linux 64 Bit
C1-Xlarge
Dispatcher/Apache
Amazon Linux 64 Bit
C1 Medium
Publish CQ/CRX
Publish CQ/CRX
Amazon Linux 64 Bit Amazon Linux 64 Bit
C1-Xlarge
C1-Xlarge
Standby
Master
Author CQ/CRX
Amazon Linux 64 Bit
C1-Xlarge
Availability Zone A
Author CQ/CRX
Amazon Linux 64 Bit
C1-Xlarge
Availability Zone B
Availability Zone D
105. Cloudfront
Elastic Load Balancer
Production - US East Region
VPC
Dispatcher/Apache
Amazon Linux 64 Bit
C1 Medium
Publish CQ/CRX
Publish CQ/CRX
Amazon Linux 64 Bit Amazon Linux 64 Bit
C1-Xlarge
C1-Xlarge
Dispatcher/Apache
Amazon Linux 64 Bit
C1 Medium
Publish CQ/CRX
Amazon Linux 64 Bit
C1-Xlarge
Standby
Publish CQ/CRX
Amazon Linux 64 Bit
C1-Xlarge
Dispatcher/Apache
Amazon Linux 64 Bit
C1 Medium
Publish CQ/CRX
Publish CQ/CRX
Amazon Linux 64 Bit Amazon Linux 64 Bit
C1-Xlarge
C1-Xlarge
106. Whole Site Delivery
•
•
•
•
•
Cache everything possible
No server side cookies written,
only select pages pass query
strings
Control caching granularly using
19 different rules
We use a single origin, but Elastic
Load Balancing and multi-tiered
multi-AZ configuration on backend
Planning a multi-region DR
architecture that will also leverage
Amazon CloudFront
107. Reverse Proxy / Web Accelerator
• Examples: Varnish,
Nginx, Apache
• Serves “static” content
• Reduce load on app
server
• wheels.ca, mystar,
thestar.com,
thegridto.com
Reverse
proxy
125. Reverse Proxy / Web Accelerator
Varnish Cache is a web application accelerator also
known as a caching HTTP reverse proxy. You install it
in front of any server that speaks HTTP and configure
it to cache the contents. Varnish Cache is really, really
fast. It typically speeds up delivery with a factor of 300
- 1000x, depending on your architecture.
- varnish-cache.org
126. Reverse Proxy / Web Accelerator
Nginx (pronounced "engine x") is an open
source reverse proxy server for HTTP,
HTTPS, SMTP, POP3, and IMAP protocols,
as well as a load balancer, HTTP cache, and
a web server (origin server). The nginx
project started with a strong focus on high
concurrency, high performance and low
memory usage.
- Wikipedia
127. App-level caching
Memcached
Free & open source, high-performance, distributed
memory object caching system, generic in nature, but
intended for use in speeding up dynamic web
applications by alleviating database load.
Memcached is an in-memory key-value store for small
chunks of arbitrary data (strings, objects) from results of
database calls, API calls, or page rendering
128. App-level caching
Redis
Redis is an open source, BSD licensed, advanced
key-value store. It is often referred to as a data
structure server since keys can contain strings,
hashes, lists, sets and sorted sets.
– Redis.io
129. Edge – The Onion Skin
“A content delivery network is a large distributed
system of servers deployed in multiple data
centers across the Internet. The goal of a CDN is
to serve content to end-users with high availability
and high performance.” - Wikipedia
130. Reverse Proxy / Web Accelerator
“A web accelerator is a proxy server that
reduces web site access times. They can be
a self-contained hardware appliance or
installable software.” - Wikipedia