×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
if you can cache me
Slide 2
Slide 2 text
GET /me HTTP/1.1 ! HTTP/1.1 200 OK X-Name: Lee Jones X-Twitter: @scribblethink X-GitHub: leejones X-Speaker-Deck: leejones
Slide 3
Slide 3 text
Web Operations
Slide 4
Slide 4 text
imagine…
Slide 5
Slide 5 text
No content
Slide 6
Slide 6 text
No content
Slide 7
Slide 7 text
No content
Slide 8
Slide 8 text
No content
Slide 9
Slide 9 text
!
Slide 10
Slide 10 text
No content
Slide 11
Slide 11 text
.gif
Slide 12
Slide 12 text
so many cat gifs search
Slide 13
Slide 13 text
No content
Slide 14
Slide 14 text
$
Slide 15
Slide 15 text
it’s slow
Slide 16
Slide 16 text
it’s not done till it’s fast
Slide 17
Slide 17 text
don’t worry I got this
Slide 18
Slide 18 text
No content
Slide 19
Slide 19 text
help!!!
Slide 20
Slide 20 text
caching
Slide 21
Slide 21 text
http caching
Slide 22
Slide 22 text
varnish
Slide 23
Slide 23 text
caching HTTP reverse proxy
Slide 24
Slide 24 text
?
Slide 25
Slide 25 text
No content
Slide 26
Slide 26 text
No content
Slide 27
Slide 27 text
/recent /recent
Slide 28
Slide 28 text
http headers
Slide 29
Slide 29 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=3600 ! …
Slide 30
Slide 30 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=3600 ! … Status
Slide 31
Slide 31 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=3600 ! … Headers
Slide 32
Slide 32 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=3600 ! … Body
Slide 33
Slide 33 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=3600 ! … Cache-Control
Slide 34
Slide 34 text
Expires vs Cache-Control HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=3600 !
Slide 35
Slide 35 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=3600 ! … Cache-Control
Slide 36
Slide 36 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=3600 ! … public
Slide 37
Slide 37 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=3600 ! … max-age=3600
Slide 38
Slide 38 text
1. Cache-Control (max-age) Varnish TTL
Slide 39
Slide 39 text
No content
Slide 40
Slide 40 text
$ $ $ $ $
Slide 41
Slide 41 text
everything is awesome
Slide 42
Slide 42 text
#everythingisawesome
Slide 43
Slide 43 text
! ? ! ? !
Slide 44
Slide 44 text
where are my favorites?
Slide 45
Slide 45 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=3600 ! … public max-age=3600
Slide 46
Slide 46 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: private, max-age=0, must-revalidate ! … private max-age=0 must-revalidate
Slide 47
Slide 47 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: private, max-age=0, must-revalidate ! … private
Slide 48
Slide 48 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: private, max-age=0, must-revalidate ! … max-age=0
Slide 49
Slide 49 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: private, max-age=0, must-revalidate ! … must-revalidate
Slide 50
Slide 50 text
$ $ $ $ $
Slide 51
Slide 51 text
everything is awesome
Slide 52
Slide 52 text
! ? ! ? !
Slide 53
Slide 53 text
browsers
Slide 54
Slide 54 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=3600 ! … public max-age=3600
Slide 55
Slide 55 text
.gif .css .js
Slide 56
Slide 56 text
cat-627398830461.gif
Slide 57
Slide 57 text
main-269827387281.css
Slide 58
Slide 58 text
/popular /profile /recent
Slide 59
Slide 59 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=0 ! … public max-age=0
Slide 60
Slide 60 text
s-maxage
Slide 61
Slide 61 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=0, s-maxage=3600 ! … max-age=0 s-maxage=3600
Slide 62
Slide 62 text
1. Cache-Control (s-maxage) 2. Cache-Control (max-age) Varnish TTL
Slide 63
Slide 63 text
s-maxage: Varnish max-age: Varnish + Browsers vs
Slide 64
Slide 64 text
$ $ $ $ $
Slide 65
Slide 65 text
everything is awesome
Slide 66
Slide 66 text
! ? ! ? !
Slide 67
Slide 67 text
so many cat gifs search
Slide 68
Slide 68 text
real-time updates
Slide 69
Slide 69 text
No content
Slide 70
Slide 70 text
“real-time“ updates
Slide 71
Slide 71 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=0, s-maxage=3600 ! … max-age=0 s-maxage=3600
Slide 72
Slide 72 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=0, s-maxage=60 ! … max-age=0 s-maxage=60
Slide 73
Slide 73 text
HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=0, s-maxage=20 ! … max-age=0 s-maxage=20
Slide 74
Slide 74 text
PURGE
Slide 75
Slide 75 text
curl -XPURGE http://example.com/recent
Slide 76
Slide 76 text
curl -XPURGE http://example.com/recent PURGE
Slide 77
Slide 77 text
curl -XPURGE http://example.com/recent /recent /recent
Slide 78
Slide 78 text
after :save do purge end
Slide 79
Slide 79 text
$ $ $ $ $
Slide 80
Slide 80 text
everything is awesome
Slide 81
Slide 81 text
? ! ? !
Slide 82
Slide 82 text
it’s slow
Slide 83
Slide 83 text
everything is not the same
Slide 84
Slide 84 text
latency
Slide 85
Slide 85 text
No content
Slide 86
Slide 86 text
No content
Slide 87
Slide 87 text
No content
Slide 88
Slide 88 text
No content
Slide 89
Slide 89 text
No content
Slide 90
Slide 90 text
closer is faster
Slide 91
Slide 91 text
content delivery network CDN
Slide 92
Slide 92 text
caching HTTP reverse proxy
Slide 93
Slide 93 text
caching HTTP reverse proxy (distributed)
Slide 94
Slide 94 text
No content
Slide 95
Slide 95 text
No content
Slide 96
Slide 96 text
No content
Slide 97
Slide 97 text
No content
Slide 98
Slide 98 text
No content
Slide 99
Slide 99 text
No content
Slide 100
Slide 100 text
No content
Slide 101
Slide 101 text
No content
Slide 102
Slide 102 text
No content
Slide 103
Slide 103 text
No content
Slide 104
Slide 104 text
$ $ $ $ $
Slide 105
Slide 105 text
$ $ $ $
Slide 106
Slide 106 text
$ $ $ $
Slide 107
Slide 107 text
everything is awesome
Slide 108
Slide 108 text
No content
Slide 109
Slide 109 text
everything is (mostly) awesome
Slide 110
Slide 110 text
caching + grace
Slide 111
Slide 111 text
No content
Slide 112
Slide 112 text
so many cat gifs search
Slide 113
Slide 113 text
so many cat gifs search
Slide 114
Slide 114 text
so many cat gifs
Slide 115
Slide 115 text
so many cat gifs search
Slide 116
Slide 116 text
PURGE
Slide 117
Slide 117 text
PURGE!?
Slide 118
Slide 118 text
Surrogate-Key
Slide 119
Slide 119 text
Surrogate-Key: top-ten HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=0, s-maxage=3600 Surrogate-Key: top-ten ! …
Slide 120
Slide 120 text
Surrogate-Key: user-1234 HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: public, max-age=0, s-maxage=3600 Surrogate-Key: user-1234 ! …
Slide 121
Slide 121 text
more control
Slide 122
Slide 122 text
Surrogate-Control
Slide 123
Slide 123 text
no-cache HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: no-cache Surrogate-Control: max-age=3600 ! …
Slide 124
Slide 124 text
Surrogate-Control: max-age=3600 HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: no-cache Surrogate-Control: max-age=3600 ! …
Slide 125
Slide 125 text
Surrogate-Control: max-age=3600+600 HTTP/1.1 200 OK Content-Type: text/html ETag: "0dfdc6cc20e7c40f182b6dd6e85a9583" Cache-Control: no-cache Surrogate-Control: max-age=3600+600 ! …
Slide 126
Slide 126 text
1. Surrogate-Control 2. Cache-Control (s-maxage) 3. Cache-Control (max-age) TTL
Slide 127
Slide 127 text
Surrogate-Control: CDNs Cache-Control: CDNs + Browsers vs
Slide 128
Slide 128 text
No content
Slide 129
Slide 129 text
testing
Slide 130
Slide 130 text
staging
Slide 131
Slide 131 text
TDD
Slide 132
Slide 132 text
TDD
Slide 133
Slide 133 text
TDD
Slide 134
Slide 134 text
TDD
Slide 135
Slide 135 text
metrics
Slide 136
Slide 136 text
logging
Slide 137
Slide 137 text
start small
Slide 138
Slide 138 text
start safe
Slide 139
Slide 139 text
static assets
Slide 140
Slide 140 text
static page(s)
Slide 141
Slide 141 text
low TTL
Slide 142
Slide 142 text
thanks!
Slide 143
Slide 143 text
links: Beginner’s Guide to HTTP Cache Headers: www.mobify.com/blog/beginners-guide-to-http-cache- headers/ Caching Tutorial: www.mnot.net/cache_docs HTTP Headers: www.w3.org/Protocols/rfc2616/rfc2616-sec14.html Varnish: www.varnish-cache.org Fastly: www.fastly.com/blog/ www.fastly.com/support/ Lonely Planet: www.lonelyplanet.com
Slide 144
Slide 144 text
photo credits: ! Courtney and Lee Jones
Slide 145
Slide 145 text
No content
Slide 146
Slide 146 text
No content