Date post: | 08-May-2015 |
Category: |
Documents |
Upload: | digital006 |
View: | 4,339 times |
Download: | 0 times |
Cache All The Things
About Me
Mike BellDrupal Developer
@mikebell_http://drupal.org/user/189605
Exactly what things?
erm...
everything!
No really...
Frontend:- HTML- CSS- Images- JavascriptBackend:- PHP- MySQL
So pretty much everything then!
Where to start?
Ask yourself:Why is my site slow?
a) Bad codeb) Bad serverc) It's not!
Bad Code
Stop.
Caching will help... but it won't solve your bigger issues.
There are tools to help - xhprof (not covered here)
Bad Server?
So how's £5.99 a month working out for you?
Caching will help... but you still have bigger issues.
Scale horizontally/vertically for a quick fix then work on additional caching.
It's not!
I like you!
Caching is always a good thing, except when you have to debug it...
Caching in Drupal
- Code Level (cache_get/cache_set)- APC (not covering)- Resource caching (this get's tricky!)- DB Layer- CDNs (related to resource caching)
Code Level
Drupal has it's own caching api.
Module Developers use it!
cache_set - store data in Drupals cache tablecache_get - get data from Drupals cache table
You can even define your own cache tables!
Code Level (example)<?phpfunction mymodule_cached_data($reset = FALSE) { global $language; $langcode = $language->language;
$data = &drupal_static(__FUNCTION__, NULL, $reset);
if (!isset($data)) {if (!$reset && $cache = cache_get("mymodule_cached_data:$langcode") && !empty($cache->data)) {
$data = $cache->data;}else {
$data = t('This would be an array or string generated using translated strings.'); cache_set("mymodule_cached_data:$langcode", $data);
} } return $data;}
?>
(source - http://drupal.org/node/145279)
Resource Caching
Many different types of resources
Each can be cached by different tools
Example:- Drupals CSS/JS Cache- Drupals Page Cache- Boost- Varnish
Resource Caching
Drupal default: CSS/JS and Page
(taken from digital006.com - ooppss!)
Resource Caching - Boost
Boost - http://drupal.org/project/boost
Static caching for all Drupal Assets
Anonymous users only
Ideal for shared hosting environments
Potentially the easiest to setup
Resource Caching - Varnish
Application Accelerator
Linux Only
Caches resources based on initial view
Anonymous only - very picky with sessions and cookies
Insanely Powerful
Resource Caching - Varnish
Advanced setup - requires additional module and VCL for Drupal- http://drupal.org/project/varnish
Granular ttls (time to live)
Specific resource (image/css) and page element! All available through VCL config.
Resource Caching - Varnish
Anatomy of a varnish hit:HTTP/1.1 200 OK
Server: Apache
X-Drupal-Cache: MISS
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Tue, 08 Jan 2013 21:20:17 +0000
Cache-Control: public, max-age=900
ETag: "1357680017-1"
Content-Language: en
X-Generator: Drupal 7 (http://drupal.org)
Link: </node/5468>; rel="shortlink",<http://badgerfakedomain.com/>; rel="canonical"
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8
Date: Tue, 08 Jan 2013 21:20:22 GMT
X-Varnish: 979772308 979772303
Age: 3
Via: 1.1 varnish
Connection: keep-alive
X-Cache: HIT
Resource Caching - Varnish
Cache Stores- RAM- Disk
Ram - super fast - requires a lot of ramDisk - fast - disk space is rarely an issue
Data Caching - memcached
Data and Database caching layer
Caches cache...(and things!)
Data Caching - memcachedExample:Core cache - core cache tables (cache_*)
Moved into memcached and shared between multiple instances across multiple servers
Simple api makes getting and setting easy
Drupal requires - http://drupal.org/project/memcache and pecl extension
3rd Party Caching - Akamai
One of the biggest caching providers
A high chance you've experienced Akamai 4-5 times today.
Static cache of resourcesContent Distribution Network100+ Edge servers all over the planet
3rd Party Caching - Akamai
Coverage for DDOS attacks- Active monitoring and defense
Advanced redirection rules through control panel
It's not cheap!
It's also pretty magical.
3rd Party Caching - Cloudflare
Similar to Akamai
Smaller scale
Emphasis on security and DDOS protection
Content Distribution Networks
CDNs for short
Offload resource handling to external provider- Images- Video- Audio- Large files
Syndicate content around the world
Content Distribution Network
Why use a CDN?- Content is delivered quicker-- Latency cut down
Pricing is granular - pay as you go type deal
Amazon + Rackspace Cloud Files
How does it all fit together?
Akamai Load Balancer
Varnish
Varnish
Apache / Nginx
Apache / Nginx
Apache / Nginx
Apache / Nginx
Mysql / memcache
Mysql / memcache
Mysql / memcache
Mysql / memcache
What happens when it all goes wrong?
Caching to the rescue
Each layer provides protection
3rd Party - shield 99% of anon trafficVarnish - the rest
Anonymous users should never know your site has issues.
Debugging Tips
Configure different urls for different platforms- Easier to identify what cache layer has an issue
Don't be afraid to flush caches- Your backend should be able to cope with it
Analyse headers! Drupal and Varnish provide a lot of info
Debugging Tips
Monitor each layer- Icinga- Pingdom
Any Questions?