5. Where to start?
Ask yourself:
Why is my site slow?
a) Bad code
b) Bad server
c) It's not!
6. Bad Code
Stop.
Caching will help... but it won't solve your
bigger issues.
There are tools to help - xhprof (not covered
here)
7. 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.
8. It's not!
I like you!
Caching is always a good thing, except when
you have to debug it...
9. 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)
10. 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!
11. 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)
12. Resource Caching
Many different types of resources
Each can be cached by different tools
Example:
- Drupals CSS/JS Cache
- Drupals Page Cache
- Boost
- Varnish
14. 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
15. Resource Caching - Varnish
Application Accelerator
Linux Only
Caches resources based on initial view
Anonymous only - very picky with sessions and
cookies
Insanely Powerful
16. 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.
17. 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
18. Resource Caching - Varnish
Cache Stores
- RAM
- Disk
Ram - super fast - requires a lot of ram
Disk - fast - disk space is rarely an issue
19. Data Caching - memcached
Data and Database caching layer
Caches cache...
(and things!)
20. 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
21. 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
22. 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.
23. 3rd Party Caching - Cloudflare
Similar to Akamai
Smaller scale
Emphasis on security and DDOS protection
24. Content Distribution Networks
CDNs for short
Offload resource handling to external provider
- Images
- Video
- Audio
- Large files
Syndicate content around the world
25. 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
26. How does it all fit together?
Apache / Mysql /
Varnish Nginx memcache
Apache / Mysql /
Nginx memcache
Akamai Load Balancer
Apache / Mysql /
Nginx memcache
Varnish Apache / Mysql /
Nginx memcache
28. 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.
29. 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