Caching  Strategies Michal Špaček, Skype;  WebExpo 2011 , Prague @spazef0rze, www.michalspacek.cz
What the...  Cache ? HDD cache, CPU cache, DNS cache, web cache, geocache
What the...  Cache ? HDD cache, CPU cache, DNS cache,  web cache , geocache
CLIENT (BROWSER) WEB SERVER DATABASE SERVER
HTTP level caching
Client local disk/memory cache CLIENT (BROWSER) WEB SERVER
Response headers: Expires Last-Modified ETag Cache-Control Pragma CLIENT (BROWSER) WEB SERVER
Expires:  HTTP-date Expires: Sat, 24 Sep 2011 12:00:00 GMT <  Expires CLIENT (BROWSER)
Expires:  HTTP-date Expires: Sat, 24 Sep 2011 12:00:00 GMT >  Expires CLIENT (BROWSER) WEB SERVER
Last-Modified:  HTTP-date Following request: If-Modified-Since:  HTTP-date
Last-Modified:  HTTP-date Following request: If-Modified-Since:  HTTP-date Response: Entity modified:  HTTP 200 OK Not modified:  HTTP 304 Not Modified
Last-Modified:  HTTP-date Saves bandwidth!
ETag:  quoted-string Following request: If-None-Match:  quoted-string
ETag:  quoted-string Following request: If-None-Match:  quoted-string Response: No match :  HTTP 200 OK A match:  HTTP 304 Not Modified
Saves bandwidth, too! ETag:  quoted-string
If-Modified-Since If-Unmodified-Since If-None-Match If-Match
ETag  ×  Last-Modified hash (GUID)  ×  HTTP-date (seconds)
ETag  ×  Last-Modified hash (GUID)  ×  HTTP-date (seconds) weak+strong validation  ×  strong
ETag  ×  Last-Modified hash (GUID)  ×  HTTP-date (seconds) weak+strong validation  ×  strong needs content  ×  needs date
Request+Response header Cache-Control:  whatever
Request+Response header whatever =  max-age ,  no-cache ,  public ,  must-revalidate  (response only),  ... Cache-Control:  whatever
Pragma:  no-cache Request+Response header
Pragma:  no-cache Request+Response header Request: HTTP 1.0 variant of Cache-Control: no-cache
Pragma:  no-cache Request+Response header Request: HTTP 1.0 variant of Cache-Control: no-cache Response: meaning undefined, wtf
Proxy cache CLIENT (BROWSER) WEB SERVER
Proxy cache CLIENT (BROWSER) WEB SERVER
Application level caching
Configuration Does not change often
Configuration Does not change often Parse (files)/read (from db) and store to  APC
APC:  The Alternative PHP Cache PHP extension Data store (also opcode cache)
APC:  The Alternative PHP Cache Data persist between requests
APC:  The Alternative PHP Cache Data persist between requests … until deleted or cache cleared or server restarted
Database connection cache Persistent connections (don't work) Connection pooler
Database query cache Some systems have query cache
Database query cache Some systems have query cache Some don't
Result set cache Some data don't change
Result set cache Some data don't change Fetch and store to  memcached
Memcached Client-server architecture Key-value in memory store for strings and objects
Problems with caching
Data change sometimes but not often enough Employee list of a company
Data change sometimes but not often enough Employee list of a company Invalidate cache when adding or removing employees
Data change sometimes and delay is okay Translations from database
Data change sometimes and delay is okay Translations from database Introduce cache lifetime
Moar cache keys for the same data Sorted employee list (asc, desc)
Moar cache keys for the same data Sorted employee list (asc, desc) Cache groups
Cache groups Keys: list-sorted-asc, list-sorted-desc
Cache groups Keys: list-sorted-asc, list-sorted-desc Group „list“: list-sorted-asc, list-sorted-desc, list-unsorted
Cache groups Keys: list-sorted-asc, list-sorted-desc Group „list“: list-sorted-asc, list-sorted-desc, list-unsorted Delete group „list“ when adding/removing
Cache wherever and whatever
…  but delete your whatever when needed
Caching is magic
Caching is magic but not automagic
Caching is magic but not automagic until now
www.phpguru.cz/kaskadova-cache 2010 © Skype – As seen on TV Slide
Practical implementation, anyone ? 2010 © Skype – As seen on TV Slide
Thanks for listening Michal Špaček, @spazef0rze BTW, love caching? skypecareers.com!

Caching Strategies

Editor's Notes

  • #3 Q: Kdo víte, co je to cache? ME: cache je rychlé úložiště, kam s ukládají data z pomalého úložiště Q: kdo si myslí, že jsem to řekl špatně? Me: popovídáme si potom Q: kdo používáte nějakou cache? Me: všichni
  • #5 Ukázkový model
  • #7 Co znamená cache, jak se chová klient, v nejlepším případě neodejde žádný požadavel na server
  • #8 Když odejde, server vrátí v odpovědi tyto hlavičky
  • #17 Hlavičky pro podmíněné dotazy mají obrácené varianty
  • #22 Má spoustu parametrů, tohle jsou nejzajímavější, zbytek by vydal na druhou přednášku
  • #27 V ideálním případě odpovídá cache, ne půvvodní server
  • #36 Víc se toho říct nedá, to je taky na samostatnou přednášku
  • #51 ...Což není tak jednoduchý, protože
  • #55 Největší teoretik v čechách napsal článek, návrh, jak to celý zautomatizovat, problém je ten, že existuje snad jen jeden člověk, který to dokáže prakticky napsat.