Cache All The Things
About Me Mike Bell Drupal Developer @mikebell_ http://drupal.org/user/189605
Exactly what things? erm... everything!
No really... Frontend: - HTML - CSS - Images - Javascript Backend: - PHP - MySQL So pretty much everything then!
Where to start? Ask yourself: Why is my site slow? a) Bad code b) Bad server c) 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 table cache_get - get data from Drupals cache table You can even define your own cache tables!
Code Level (example) <?php function 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 ram Disk - fast - disk space is rarely an issue
Data Caching - memcached Data and Database caching layer Caches cache... (and things!)
Data Caching - memcached Example: 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 resources Content Distribution Network 100+ 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? Varnish Apache / Nginx Mysql / memcache Akamai Load Balancer Apache / Nginx Apache / Nginx Mysql / memcache Mysql / memcache Varnish Apache / Nginx Mysql / memcache
What happens when it all goes wrong?
Caching to the rescue Each layer provides protection 3rd Party - shield 99% of anon traffic Varnish - 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?