altitude sf 2017: optimizing your hit rate

177
Optimizing Your Cache Hit Ratio Léon Brocard Sales Engineer | Fastly Paolo Alvarado Customer Support Manager | Fastly

Upload: fastly

Post on 22-Jan-2018

275 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Altitude SF 2017: Optimizing your hit rate

Optimizing Your Cache Hit Ratio

Léon BrocardSales Engineer | Fastly

Paolo AlvaradoCustomer Support Manager | Fastly

Page 2: Altitude SF 2017: Optimizing your hit rate

Léon Brocard

Systems Engineer

Fastly London

Paolo Alvarado

Customer Support Manager

Fastly Tokyo

Page 3: Altitude SF 2017: Optimizing your hit rate

Cache hit ratioWhy do we cache?Caching on FastlyHTTP cachingOverriding cachingCaching patternsFuture

Page 4: Altitude SF 2017: Optimizing your hit rate

This is a talk workshop

Page 5: Altitude SF 2017: Optimizing your hit rate

Blue slidemeans

interactive

Page 6: Altitude SF 2017: Optimizing your hit rate

Cachehit

ratio

Page 7: Altitude SF 2017: Optimizing your hit rate

Where is“Cache hit ratio” on

https://www.fastly.com/

Page 8: Altitude SF 2017: Optimizing your hit rate
Page 9: Altitude SF 2017: Optimizing your hit rate

https://manage.fastly.com/

[email protected]

Page 10: Altitude SF 2017: Optimizing your hit rate

Name & Domainhitrate2017<initials>.global.ssl.fastly.net

Address35.197.9.99

No TLS, Port3000

Page 11: Altitude SF 2017: Optimizing your hit rate

Name & Domainhitrate2017lb.global.ssl.fastly.net

Address35.197.9.99

No TLS, Port3000

Page 12: Altitude SF 2017: Optimizing your hit rate
Page 13: Altitude SF 2017: Optimizing your hit rate

http://hitrate2017lb.global.ssl.fastly.net/

Page 14: Altitude SF 2017: Optimizing your hit rate
Page 15: Altitude SF 2017: Optimizing your hit rate

Why do we cache?

Page 16: Altitude SF 2017: Optimizing your hit rate
Page 17: Altitude SF 2017: Optimizing your hit rate

Decrease pageload time

Page 18: Altitude SF 2017: Optimizing your hit rate

Level Capacity Latency

Can on my desk

1 can ~1s

My fridge 10 cans ~30s

Local shop 500 cans ~5m

Supermarket 10k cans ~90m

Page 19: Altitude SF 2017: Optimizing your hit rate

Level Capacity Latency

Can on my desk

1 can ~1s

My fridge 10 cans ~30s

Local shop 500 cans ~5m

Supermarket 10k cans ~90m

Page 20: Altitude SF 2017: Optimizing your hit rate

Level Capacity Latency

Cash in my wallet

$50 ~1s

Local ATM $200 ~5m

Bank $1,000 ~20m

Page 21: Altitude SF 2017: Optimizing your hit rate

Level Capacity Latency

Plate 1 serving ~1s

Serving dish 10 servings ~1m

Kitchen 100 servings ~5m

Page 22: Altitude SF 2017: Optimizing your hit rate
Page 23: Altitude SF 2017: Optimizing your hit rate

Level Capacity Latency

L1 cache 64 KiB per core ~1ns

L2 cache 256 KiB per core ~4ns

L3 cache Up to 2 MiB per core, shared

~20ns

Main memory Up to 64 GB ~100ns

Page 24: Altitude SF 2017: Optimizing your hit rate

Level Capacity Latency

Browser ~Megabytes ~0.1ms

CDN ~Gigabytes ~5ms

Origin ~Terabytes ~500ms

Page 25: Altitude SF 2017: Optimizing your hit rate

Cache?

Page 26: Altitude SF 2017: Optimizing your hit rate

L'écureuil roux cache ses provisions pour l'hiver

Page 27: Altitude SF 2017: Optimizing your hit rate

Hit Miss

Page 28: Altitude SF 2017: Optimizing your hit rate
Page 29: Altitude SF 2017: Optimizing your hit rate
Page 30: Altitude SF 2017: Optimizing your hit rate
Page 31: Altitude SF 2017: Optimizing your hit rate

Scenario Origin requests / sec

EC2 instances

No CDN 2,000 40

50% CHR 1,000 20

80% CHR 400 8

90% CHR 200 4

95% CHR 100 2

Page 32: Altitude SF 2017: Optimizing your hit rate
Page 33: Altitude SF 2017: Optimizing your hit rate
Page 34: Altitude SF 2017: Optimizing your hit rate

Representativetime periodtraffic

Page 35: Altitude SF 2017: Optimizing your hit rate

Why is latency so important?

Page 36: Altitude SF 2017: Optimizing your hit rate

Wi-Fi Mobile

HTTPTCP/IP

Page 37: Altitude SF 2017: Optimizing your hit rate
Page 38: Altitude SF 2017: Optimizing your hit rate

GET /technology/2016/jul/15/how-the-internet-was-invented-1976-arpa-kahn-cerf HTTP/1.1Host: www.theguardian.com

Page 39: Altitude SF 2017: Optimizing your hit rate

HTTP/1.1 200 OKContent-Type: text/html; charset=utf-8Content-Length: 110502

<!DOCTYPE html>...

Page 40: Altitude SF 2017: Optimizing your hit rate
Page 41: Altitude SF 2017: Optimizing your hit rate

Visithitrate2017lb.global.ssl.fastly.net

View ▶ Developer ▶ Developer Tools

Network tab

Reload, ⌘R, shift-⌘R

Page 42: Altitude SF 2017: Optimizing your hit rate

c

Page 43: Altitude SF 2017: Optimizing your hit rate
Page 44: Altitude SF 2017: Optimizing your hit rate
Page 45: Altitude SF 2017: Optimizing your hit rate
Page 46: Altitude SF 2017: Optimizing your hit rate
Page 47: Altitude SF 2017: Optimizing your hit rate
Page 48: Altitude SF 2017: Optimizing your hit rate
Page 49: Altitude SF 2017: Optimizing your hit rate

1.5s 2.0s 3.5s 21.0s

Page 50: Altitude SF 2017: Optimizing your hit rate
Page 51: Altitude SF 2017: Optimizing your hit rate

www.webpagetest.orgURL: docs.fastly.comEC2 location with low pending testsConnection DSL, capture video, keep test private

Page 52: Altitude SF 2017: Optimizing your hit rate

Here’s one I prepared earlier:

http://fastly.us/2sybe4q

Page 53: Altitude SF 2017: Optimizing your hit rate

Back to developer toolsRight click on table headingResponse headers ▶ Add “Cache-Control”Response headers ▶ Manage header columns ▶ Add custom header → “X-Cache”

Page 54: Altitude SF 2017: Optimizing your hit rate
Page 55: Altitude SF 2017: Optimizing your hit rate
Page 56: Altitude SF 2017: Optimizing your hit rate
Page 57: Altitude SF 2017: Optimizing your hit rate
Page 58: Altitude SF 2017: Optimizing your hit rate

if users double their bandwidth without reducing their RTT significantly, the effect on Web Browsing will be a minimal improvement. However, decreasing RTT, regardless of current bandwidth always helps make web browsing faster

Page 59: Altitude SF 2017: Optimizing your hit rate

How can we decrease RTT?

Page 60: Altitude SF 2017: Optimizing your hit rate

How can we decrease RTT?

latency?

Page 61: Altitude SF 2017: Optimizing your hit rate

Caching

Page 62: Altitude SF 2017: Optimizing your hit rate

Visithttps://www.fastly-debug.com

/

Page 63: Altitude SF 2017: Optimizing your hit rate
Page 64: Altitude SF 2017: Optimizing your hit rate
Page 65: Altitude SF 2017: Optimizing your hit rate

HTTPcaching

Page 66: Altitude SF 2017: Optimizing your hit rate

1996 RFC 1945 HTTP/1.0

1997 RFC 2068 HTTP/1.1

1999 RFC 2616 HTTP/1.1

2014 RFC 7230 HTTP/1.1: Message Syntax and Routing

2014 RFC 7231 HTTP/1.1: Semantics and Content

2014 RFC 7232 HTTP/1.1: Conditional Requests

2014 RFC 7233 HTTP/1.1: Range Requests

2014 RFC 7234 HTTP/1.1: Caching

2014 RFC 7235 HTTP/1.1: Authentication

2015 RFC 7540 HTTP/2

Page 67: Altitude SF 2017: Optimizing your hit rate

Fresh Expired

Page 68: Altitude SF 2017: Optimizing your hit rate

Last-Modified: Fri, 13 Nov 2015 14:11:55 GMT

If-Modified-Since: Fri, 13 Nov 2015 13:58:51 GMT

HTTP/1.1 304 Not Modified

Page 69: Altitude SF 2017: Optimizing your hit rate
Page 70: Altitude SF 2017: Optimizing your hit rate
Page 71: Altitude SF 2017: Optimizing your hit rate
Page 72: Altitude SF 2017: Optimizing your hit rate

ETag: “3e8d1bf998b31cb811264f4789eac005”

If-None-Match: “3e8d1bf998b31cb811264f4789eac005”

HTTP/1.1 304 Not Modified

Page 73: Altitude SF 2017: Optimizing your hit rate
Page 74: Altitude SF 2017: Optimizing your hit rate
Page 75: Altitude SF 2017: Optimizing your hit rate

Visithitrate2017lb.global.ssl.fastly.net

Network tabBrowser cachemax-age=60 tabFirst time. Second time.

Page 76: Altitude SF 2017: Optimizing your hit rate
Page 77: Altitude SF 2017: Optimizing your hit rate

Cache-Control: max-age=60Date: Thu, 25 May 2017 10:16:09 GMTExpires: Thu, 25 May 2017 10:16:58 GMT

Page 78: Altitude SF 2017: Optimizing your hit rate
Page 79: Altitude SF 2017: Optimizing your hit rate
Page 80: Altitude SF 2017: Optimizing your hit rate
Page 81: Altitude SF 2017: Optimizing your hit rate

Cache-Control: max-age=1800

Page 82: Altitude SF 2017: Optimizing your hit rate

Cache-Control: s-max-age=1800, max-age=60Surrogate-Control: max-age=1800

Page 83: Altitude SF 2017: Optimizing your hit rate

Visithitrate2017lb.global.ssl.fastly.net

Network tabBrowser cache⌘RCache-Control:(none) / private / max-age=60

Page 84: Altitude SF 2017: Optimizing your hit rate

Tool time

Page 85: Altitude SF 2017: Optimizing your hit rate

Install Chrome Extension “Browser Cache Hit Ratio”...

https://fastly.us/browser-cachehitratio

Page 86: Altitude SF 2017: Optimizing your hit rate

Install Chrome Extension “Fastly Cache Hit Ratio”...

https://fastly.us/cachehitratio

Page 87: Altitude SF 2017: Optimizing your hit rate

Install Chrome Extension “Modheader”...

https://fastly.us/modheader

Page 88: Altitude SF 2017: Optimizing your hit rate

Visithitrate2017lb.global.ssl.fastly.net

Page 89: Altitude SF 2017: Optimizing your hit rate

Break

Page 90: Altitude SF 2017: Optimizing your hit rate

What’s myTTL again?

Page 91: Altitude SF 2017: Optimizing your hit rate
Page 92: Altitude SF 2017: Optimizing your hit rate
Page 93: Altitude SF 2017: Optimizing your hit rate

Changingcaching

Page 94: Altitude SF 2017: Optimizing your hit rate

On the origin with

HTTP headers

Override in Fastly

Page 95: Altitude SF 2017: Optimizing your hit rate

No Cache-Control header

Page 96: Altitude SF 2017: Optimizing your hit rate
Page 97: Altitude SF 2017: Optimizing your hit rate

Fastly Service ▶ Configuration ▶ Clone active ▶ Settings ▶ Fallback TTL ▶ 10 ▶ Save ▶ Activate ▶ Purge ▶ Purge All ▶ Purge

Page 98: Altitude SF 2017: Optimizing your hit rate

Cache-Control: private

Cache-Control: max-age=60

Page 99: Altitude SF 2017: Optimizing your hit rate

Varnish Configuration Language

Page 100: Altitude SF 2017: Optimizing your hit rate

defaultTTL?

Page 101: Altitude SF 2017: Optimizing your hit rate

if ( beresp.http.Expires || beresp.http.Surrogate-Control ~ "max-age" || beresp.http.Cache-Control ~"(s-maxage|max-age)" ) { # keep the ttl here } else { # apply the default ttl set beresp.ttl = 10s;}

Page 102: Altitude SF 2017: Optimizing your hit rate
Page 103: Altitude SF 2017: Optimizing your hit rate
Page 104: Altitude SF 2017: Optimizing your hit rate

if (req.url == "/dogs/max-age=60") { set beresp.http.Cache-Control = "max-age=10";}

Page 105: Altitude SF 2017: Optimizing your hit rate
Page 106: Altitude SF 2017: Optimizing your hit rate
Page 107: Altitude SF 2017: Optimizing your hit rate
Page 108: Altitude SF 2017: Optimizing your hit rate

if (req.url == "/dogs/max-age=60") { set beresp.ttl = 10s; set beresp.http.Cache-Control = "max-age=10";}

Page 109: Altitude SF 2017: Optimizing your hit rate

sub vcl_fetch { if (beresp.http.Cache-Control) { if (req.url.path ~ "^/users/flair/") { set beresp.http.Cache-Control = "public, max-age=180"; } else { set beresp.http.Cache-Control = "private"; }}

Here’s an example of where VCL comes in very handy. Recently we deployed .NET 4.6.2 which had a very nasty bug that set max-age on cache responses to over 2000 years. The quickest way to mitigate this for all of our services affected was to override that cache header as-needed at the edge. As I write this, the following VCL is active:

Page 110: Altitude SF 2017: Optimizing your hit rate

What’s in a cache key?

Page 111: Altitude SF 2017: Optimizing your hit rate

req.http.hostThe incoming request’s host header

req.urlThe full URL including query string

#####GENERATION#####A generation number used for purging all

Page 112: Altitude SF 2017: Optimizing your hit rate

What do these URLs have in common?

● /search?query=dogs&page=1● /search?page=1&query=dogs

Page 113: Altitude SF 2017: Optimizing your hit rate
Page 114: Altitude SF 2017: Optimizing your hit rate
Page 115: Altitude SF 2017: Optimizing your hit rate

/search?query=dogs&page=1Fastly-Debug-Digest: 9ff1c58f06cac2fd3a48f7c105da6e1d035c770c635371f2ddabdb987818e36c

/search?page=1&query=dogsFastly-Debug-Digest:9ff1c58f06cac2fd3a48f7c105da6e1d035c770c635371f2ddabdb987818e36c

Page 116: Altitude SF 2017: Optimizing your hit rate

The uncacheable

Page 117: Altitude SF 2017: Optimizing your hit rate
Page 118: Altitude SF 2017: Optimizing your hit rate

“Dynamic content is really interesting”—Hooman 2014

Classically, dynamic content was uncacheable because it required interaction with a backend.

Page 119: Altitude SF 2017: Optimizing your hit rate

How can we cache dynamic

content?

Page 120: Altitude SF 2017: Optimizing your hit rate

Set-Cookie:Cache-Control: private

Page 121: Altitude SF 2017: Optimizing your hit rate
Page 122: Altitude SF 2017: Optimizing your hit rate

How do we force an update for cached

content?

Page 123: Altitude SF 2017: Optimizing your hit rate
Page 124: Altitude SF 2017: Optimizing your hit rate

Purging

Page 125: Altitude SF 2017: Optimizing your hit rate

Single URL PurgeInstant Purge an individual URL.

Surrogate-Key PurgeInstant Purge a particular service of items tagged with a Surrogate-Key.

Purge AllInstant Purge everything from a service.

Page 126: Altitude SF 2017: Optimizing your hit rate
Page 127: Altitude SF 2017: Optimizing your hit rate
Page 128: Altitude SF 2017: Optimizing your hit rate
Page 129: Altitude SF 2017: Optimizing your hit rate

Offloading from origins

Page 130: Altitude SF 2017: Optimizing your hit rate

HTTPS everywhere

http://hitrate2017lb.global.ssl.fastly.net/301 Moved Permanently redirect to:https://hitrate2017lb.global.ssl.fastly.net/

Page 131: Altitude SF 2017: Optimizing your hit rate

HIT-SYNTH

Page 132: Altitude SF 2017: Optimizing your hit rate
Page 133: Altitude SF 2017: Optimizing your hit rate

Strict-Transport-Security: max-age=31536000

HSTS Preload List

Page 134: Altitude SF 2017: Optimizing your hit rate

Serving Stale

Page 135: Altitude SF 2017: Optimizing your hit rate

What does a negative number here mean?

Page 136: Altitude SF 2017: Optimizing your hit rate
Page 137: Altitude SF 2017: Optimizing your hit rate
Page 138: Altitude SF 2017: Optimizing your hit rate

“Worst-case scenario, we can always ghost-serve. Which actually happened: our Rolling Stone legacy origin was down for three days; the only reason readers could still visit our site without noticing the problem was because we used Fastly’s stale-if-error.”

— Chris Boylan, Director of Engineering,Wenner Media

Page 139: Altitude SF 2017: Optimizing your hit rate

How can we purge while still

offloading?

Page 140: Altitude SF 2017: Optimizing your hit rate

Soft PurgeSingle URL PurgeSurrogate-Key Purge

Soft Purging sets an object’s TTL to 0s, forcing revalidation. For best results, use in combination with stale-while-revalidate and/or stale-if-error

Page 141: Altitude SF 2017: Optimizing your hit rate

Levels of caches

Page 142: Altitude SF 2017: Optimizing your hit rate

× =

Page 143: Altitude SF 2017: Optimizing your hit rate

× =

Page 144: Altitude SF 2017: Optimizing your hit rate

50%CHR

50%CHR

× = 75%CHR

50 50

25 25

Page 145: Altitude SF 2017: Optimizing your hit rate

90%CHR

90%CHR

× = 99%CHR

90 10

9 1

Page 146: Altitude SF 2017: Optimizing your hit rate

× =

Page 147: Altitude SF 2017: Optimizing your hit rate
Page 148: Altitude SF 2017: Optimizing your hit rate
Page 149: Altitude SF 2017: Optimizing your hit rate
Page 150: Altitude SF 2017: Optimizing your hit rate
Page 151: Altitude SF 2017: Optimizing your hit rate

When the royal baby George Alexander Louis was born in 2013, the Guardian's traffic spiked from an average of 400 requests per second to over 1,000 requests per second. Fastly shielded the Guardian's origin servers from the hundreds of thousands of new requests pouring in, maintaining site uptime and delivering consistent performance for readers around the world. The company’s software architect, Matthew O’Brien, said that it’s difficult to predict news events, but Fastly helps them prepare accordingly.

Page 152: Altitude SF 2017: Optimizing your hit rate

Cache in browser and Fastly for different

amount of time?

Page 153: Altitude SF 2017: Optimizing your hit rate

Cache-Control: privateSurrogate-Control: max-age=60, stale-while-revalidate=5, stale-if-error=86400

Page 154: Altitude SF 2017: Optimizing your hit rate

Cache-Control: max-age=5Surrogate-Control: max-age=3600

Page 155: Altitude SF 2017: Optimizing your hit rate

“Fastly effectively handled the higher levels of traffic we experienced during the Apple Watch announcement.” Using Fastly’s stale-while-revalidate feature to serve readers slightly outdated content while the cached content was refreshed, WIRED knew readers would never see errors. Zack described stale-while-revalidate as one of Fastly’s “most exciting features.” He said, “It allowed us to successfully serve the live blog while constantly updating its content, ensuring our readers had access to the freshest content without seeing errors."

— Zack Tollman, Lead Engineer at WIRED

Page 156: Altitude SF 2017: Optimizing your hit rate

Observing cache hit ratio

Page 157: Altitude SF 2017: Optimizing your hit rate
Page 158: Altitude SF 2017: Optimizing your hit rate
Page 159: Altitude SF 2017: Optimizing your hit rate

X-Cache: HITX-Cache-Hits: 649406

Page 160: Altitude SF 2017: Optimizing your hit rate

X-Cache: HIT, HITX-Cache-Hits: 649406, 922

Page 161: Altitude SF 2017: Optimizing your hit rate

fastly_info.state

Jun 08 14:27:24 cache-ord1722 papertrail: MISS-CLUSTER "-" [08/Jun/2017:14:27:23 +0000] GET /recipes/?show=Beef%20brochettes HTTP/1.1 200 26

Page 162: Altitude SF 2017: Optimizing your hit rate

Logging atthe edge

Chris JackelSystems Engineer | Fastly

Page 163: Altitude SF 2017: Optimizing your hit rate

vcl_hashvs

Vary

Page 164: Altitude SF 2017: Optimizing your hit rate

Hash Vary

Page 165: Altitude SF 2017: Optimizing your hit rate

Accept-Encoding: gzip, deflate, br

Content-Encoding: gzipVary: Accept-Encoding

Page 166: Altitude SF 2017: Optimizing your hit rate
Page 167: Altitude SF 2017: Optimizing your hit rate

Future

Page 168: Altitude SF 2017: Optimizing your hit rate

Cache-Control: max-age=31536000, immutable

Page 169: Altitude SF 2017: Optimizing your hit rate

HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection

Page 170: Altitude SF 2017: Optimizing your hit rate

Service WorkersThis specification describes a method that enables applications to take advantage of persistent background processing, including hooks to enable bootstrapping of web applications while offline

Page 171: Altitude SF 2017: Optimizing your hit rate

The power of the network

Andrew BettsPrincipal Developer Advocate | Fastly

Page 172: Altitude SF 2017: Optimizing your hit rate

Emerging and future web trends

Alex RussellSoftware Engineer | Google

Page 173: Altitude SF 2017: Optimizing your hit rate

Summary

Page 174: Altitude SF 2017: Optimizing your hit rate

Cache hit ratioWhy do we cache?Caching on FastlyHTTP cachingOverriding cachingCaching patternsFuture

Page 175: Altitude SF 2017: Optimizing your hit rate

Run live experiments

Page 176: Altitude SF 2017: Optimizing your hit rate
Page 177: Altitude SF 2017: Optimizing your hit rate

Thanks for participatingLéon & Paolo