SlideShare a Scribd company logo
CACHE MONEY:
Tips for going FAST in a
slow world
Michael May
API Engineer
@ohaimmay 2015-07-22
Real-time Content Delivery Network
Leverage fork of Varnish Cache
sub-millisecond TTFB
Enable, not constrain
Physical
Realities
ALL communication is
bounded by
the speed of light
C(vac) = 186,000 miles/s
C(fiber) = 124,000 miles/s
c(air) ~ c(vac)
We’re really impatient
(when it comes to cat gifs, at least)
The NASA Problem
Get pics from Deep Space to Earth
1 kb/sec bandwidth
Single (compressed) 2.5Mb image takes ~1 hour
Complete sensor dataset won’t arrive until 2016!
*source:	
  http://www.planetary.org/blogs/emily-­‐lakdawalla/2015/01300800-­‐talking-­‐to-­‐pluto-­‐is-­‐hard.html
New Horizons
©	
  Ryan	
  Wick	
  /	
  Wikimedia	
  Commons	
  /	
  CC-­‐BY-­‐SA-­‐2.0	
  /	
  GFDL
Credit:	
  NASA,	
  Expedition	
  24	
  Crew
We have the same problem on Earth!
Credit:	
  NASA,	
  Expedition	
  24	
  Crew
mmay:~ $ ping fast.mmay.net
PING fast.mmay.net: 56 data bytes
64 bytes received: icmp_seq=0 ttl=44 time=273.722 ms
64 bytes received: icmp_seq=1 ttl=43 time=347.763 ms
64 bytes received: icmp_seq=2 ttl=44 time=276.129 ms
64 bytes received: icmp_seq=3 ttl=43 time=369.563 ms
64 bytes received: icmp_seq=4 ttl=44 time=269.116 ms
--- fast.mmay.net ping statistics —
6 packets transmitted, 6 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 269.116/293.231/503.991/77.754ms
ATL to SYD RTT (9k miles)
©	
  User:Timwether	
  /	
  Wikimedia	
  Commons	
  /	
  CC-­‐BY-­‐SA-­‐3.0
Moving bits around the world
takes measurable time
©	
  User:Timwether	
  /	
  Wikimedia	
  Commons	
  /	
  CC-­‐BY-­‐SA-­‐3.0
Moving bits around the ^world
takes measurable time
©	
  User:Timwether	
  /	
  Wikimedia	
  Commons	
  /	
  CC-­‐BY-­‐SA-­‐3.0
universe
ATL to SYD RTT (what we want)
mmay:~ $ ping fast.mmay.net
PING fallback.global-ssl.fastly.net (23.235.39.249): 56 data bytes
64 bytes from 23.235.39.249: icmp_seq=0 ttl=57 time=22.411 ms
64 bytes from 23.235.39.249: icmp_seq=2 ttl=57 time=30.053 ms
64 bytes from 23.235.39.249: icmp_seq=3 ttl=57 time=23.592 ms
64 bytes from 23.235.39.249: icmp_seq=4 ttl=57 time=23.180 ms
64 bytes from 23.235.39.249: icmp_seq=5 ttl=57 time=24.993 ms
--- fallback.global-ssl.fastly.net ping statistics ---
6 packets transmitted, 6 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 22.411/27.042/38.025/5.510 ms
We’re not going to beat physics
Credit:	
  US	
  Navy	
  /	
  CC-­‐BY-­‐2.0
We’re not going to beat physics
Credit:	
  US	
  Navy	
  /	
  CC-­‐BY-­‐2.0
But we will be clever engineers
> “Middle Mile” Optimizations
> “Middle Mile” Optimizations
> Global Cache
Will it cache?
Image	
  Credit:	
  ©	
  Ryan	
  Notch	
  /	
  www.areographers.com	
  /	
  CC-­‐SA-­‐3.0
STATIC
ETERNALLY
STATIC
TRULY
DYNAMIC
EVENT
DRIVEN
“Event Driven” Content
> Valid for > 0 seconds (pseudo-static?)
> Changes unpredictably
> That change requires immediate update
mmay:~ $ ping new-horizons.nasa.space
PING new-horizons.nasa.space: 56 data bytes
1 byte received: time=16200s (4.5 hours)
--- ping new-horizons.nasa.space ping statistics —
1 packets transmitted, 1 packets received
SFO to PLUTO RTT (3 billion mi)
Web Perf 101
Critical path optimization / use Google PageSpeed
Rendering optimizations
Compress/Minify text (html, js, css), images, fonts
Optimize HTTP Caching Strategies!!!!
*Optimize HTTP Caching Strategies
Varnish
Varnish
HTTP Reverse Proxy Cache
Varnish
HTTP Reverse Proxy Cache
Is my Varnish Working?
Is my Varnish Working?
mmay:~ $ curl -svo /dev/null https://app.fastly.com
* Connected to app.fastly.com
> GET / HTTP/1.1
> User-Agent: curl
> Host: app.fastly.com
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Via: 1.1 varnish
< X-Served-By: cache-atl6230-ATL
< X-Cache: MISS
< X-Cache-Hits: 0
< Vary: Accept-Encoding
[data not shown]
* Connection #0 to host app.fastly.com left intact
Is my Varnish Working?
mmay:~ $ curl -svo /dev/null https://app.fastly.com
* Connected to app.fastly.com
> GET / HTTP/1.1
> User-Agent: curl
> Host: app.fastly.com
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Via: 1.1 varnish
< X-Served-By: cache-atl6230-ATL
< X-Cache: MISS
< X-Cache-Hits: 0
< Vary: Accept-Encoding
[data not shown]
* Connection #0 to host app.fastly.com left intact
Is my Varnish Working?
mmay:~ $ curl -svo /dev/null https://app.fastly.com
* Connected to app.fastly.com
> GET / HTTP/1.1
> User-Agent: curl
> Host: app.fastly.com
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Via: 1.1 varnish
< X-Served-By: cache-atl6230-ATL
< X-Cache: MISS
< X-Cache-Hits: 0
< Vary: Accept-Encoding
[data not shown]
* Connection #0 to host app.fastly.com left intact
I’ll be talking to ya
Is my Varnish Working?
mmay:~ $ curl -svo /dev/null https://app.fastly.com
* Connected to app.fastly.com
> GET / HTTP/1.1
> User-Agent: curl
> Host: app.fastly.com
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Via: 1.1 varnish
< X-Served-By: cache-atl6230-ATL
< X-Cache: MISS
< X-Cache-Hits: 0
< Vary: Accept-Encoding
[data not shown]
* Connection #0 to host app.fastly.com left intact
Is my Varnish Working?
mmay:~ $ curl -svo /dev/null https://app.fastly.com
* Connected to app.fastly.com
> GET / HTTP/1.1
> User-Agent: curl
> Host: app.fastly.com
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Via: 1.1 varnish
< X-Served-By: cache-atl6230-ATL
< X-Cache: MISS
< X-Cache-Hits: 0
< Vary: Accept-Encoding
[data not shown]
* Connection #0 to host app.fastly.com left intact
Is my Varnish Working?
mmay:~ $ curl -svo /dev/null https://app.fastly.com
* Connected to app.fastly.com
> GET / HTTP/1.1
> User-Agent: curl
> Host: app.fastly.com
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Via: 1.1 varnish
< X-Served-By: cache-atl6230-ATL
< X-Cache: MISS
< X-Cache-Hits: 0
< Vary: Accept-Encoding
[data not shown]
* Connection #0 to host app.fastly.com left intact
Hey,
I was proxied
Is my Varnish Working?
mmay:~ $ curl -svo /dev/null https://app.fastly.com
* Connected to app.fastly.com
> GET / HTTP/1.1
> User-Agent: curl
> Host: app.fastly.com
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Via: 1.1 varnish
< X-Served-By: cache-pdx999-PDX
< X-Cache: HIT
< X-Cache-Hits: 10
< Vary: Accept-Encoding
[data not shown]
* Connection #0 to host app.fastly.com left intact
Is my Varnish Working?
mmay:~ $ curl -svo /dev/null https://app.fastly.com
* Connected to app.fastly.com
> GET / HTTP/1.1
> User-Agent: curl
> Host: app.fastly.com
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Via: 1.1 varnish
< X-Served-By: cache-pdx999-PDX
< X-Cache: HIT
< X-Cache-Hits: 10
< Vary: Accept-Encoding
[data not shown]
* Connection #0 to host app.fastly.com left intact
Cool cache stuff
*Optimize HTTP Caching Strategies
*Optimize HTTP Caching Strategies
Cache-Control: public, max-age=10
Is the object in the cache valid?
Is the object in the cache valid?
aka Revalidation
HTTP Response with ETag
HTTP Request with If-None-Match
Cache-Control: First Request
Cache-Control: Grace Mode
stale-if-error / stale-while-revalidate
Cache-Control:
max-age=3600,
s-maxage=864000,
stale-while-revalidate=3600,
stale-if-error=3600
Back in the day,
the server was responsible
for rendering pages
AJAX
AJAX
Extract server-side rendering of private
content into APIs
Fetch & render private data client-side
Cache API for increased performance
API Caching with event-driven purge
Set Cache-Control with a reasonably long TTL
API Caching with event-driven purge
Set Cache-Control with a reasonably long TTL
Set Surrogate-Key(s) with unique cache key(s)
API Caching with event-driven purge
Set Cache-Control with a reasonably long TTL
Set Surrogate-Key(s) with unique cache key(s)
Invalidate cached responses by Surrogate-Key purge
Example response handlers with API Caching
GET /content.json {
- Validation
- DB Lookup
- Set Cache-Control Header
- Set ‘Surrogate-Key: my_cache_key’ Header
- Render response
}
PUT /content.json {
- Validation
- Update DB
- Purge ‘my_cache_key’
(e.g. curl -XPOST https://api.fastly.com/purge/my_cache_key)
- Render response
AJAX “like” request flow w/ Varnish
Varnish
Request flow with Varnish Synthetic
Varnish
Synthetic Response VCL
synthetic {"OK"};
Synthetic Response VCL for “like”
hello	
  world
sub vcl_recv {
if (req.url ~ "^/like" && req.request == "POST") {
error 702 "OK";
}
}
Synthetic Response VCL for “like”
hello	
  world
sub vcl_error {
if (obj.status == 702) {
set obj.status = 200;
set obj.http.Content-Type = “text/plain;”
synthetic {"OK"};
}
return (deliver);
}
Synthetic Response VCL for “like”
hello	
  world
sub vcl_log {
if (req.url ~ "^/like" && req.method == "POST") {
log {"syslog “like :: “} req.url {" "} resp.status;
}
}
Caching and Cookies
Set-Cookie
Sent by server
“Cookie” sent by client
If cookies in response, not cached by default
Vary’ing on Cookie is unwise
Vary
Specifies which headers the cache will
take into account on object lookup.
(outside of Host and Path)
Out of a sample of 100,000 requests,
there were 8,000 different User-Agents!
Caching when cookies present
1. Remove cookie and save in temp variable
2. Do normal cache lookup
3. Set cookie from temp var right before delivery
hello	
  world
hello	
  world
Caching when cookies present (VCL)
// Request received
sub vcl_recv {
// If request includes Cookie, save temporarily
// & remove for cache lookup
if (req.http.Cookie ~ "mycookie=") {
set req.http.Tmp-Set-Cookie = req.http.Cookie;
unset req.http.Cookie;
} else {
set req.hash_always_miss = true;
}
}
Caching when cookies present (VCL)
// Cache miss, fetch from origin
sub vcl_fetch {
// if origin returns Set-Cookie, save temporarily
// & remove so response can be cached
if (beresp.http.Set-Cookie) {
set req.http.Tmp-Set-Cookie = beresp.http.Set-Cookie;
unset beresp.http.Set-Cookie;
}
}
// One last thing
sub vcl_deliver {
// Include Set-Cookie in response to client
if (req.http.Tmp-Set-Cookie) {
set resp.http.Set-Cookie = req.http.Tmp-Set-Cookie;
}
}
Wrapping Up
Wrapping Up
c is our speed limit, moving data around takes time
Wrapping Up
c is our speed limit, moving data around takes time
CDNs are more than a dumb static content cache
Wrapping Up
c is our speed limit, moving data around takes time
CDNs can be more than a dumb static content cache
Cache “event driven” content and script logic at the
edge using VCL
Wrapping Up
c is our speed limit, moving data around takes time
CDNs can do more than be a static content cache
Cache “event driven” content and script logic at the
edge using VCL
Increase that CACHE HIT RATIO!
Tips for going fast in a slow world: Michael May at OSCON 2015

More Related Content

What's hot

Altitude SF 2017: Advanced VCL: Shielding and Clustering
Altitude SF 2017: Advanced VCL: Shielding and ClusteringAltitude SF 2017: Advanced VCL: Shielding and Clustering
Altitude SF 2017: Advanced VCL: Shielding and Clustering
Fastly
 
Going crazy with Varnish and Symfony
Going crazy with Varnish and SymfonyGoing crazy with Varnish and Symfony
Going crazy with Varnish and Symfony
David de Boer
 
Advanced VCL: how to use restart
Advanced VCL: how to use restartAdvanced VCL: how to use restart
Advanced VCL: how to use restart
Fastly
 
Advanced Caching Concepts @ Velocity NY 2015
Advanced Caching Concepts @ Velocity NY 2015Advanced Caching Concepts @ Velocity NY 2015
Advanced Caching Concepts @ Velocity NY 2015
Rakesh Chaudhary
 
NGINX High-performance Caching
NGINX High-performance CachingNGINX High-performance Caching
NGINX High-performance Caching
NGINX, Inc.
 
Altitude SF 2017: Building a continuous deployment pipeline
Altitude SF 2017: Building a continuous deployment pipelineAltitude SF 2017: Building a continuous deployment pipeline
Altitude SF 2017: Building a continuous deployment pipeline
Fastly
 
Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...
Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...
Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...
Fastly
 
Caching the Uncacheable [Long Version]
Caching the Uncacheable [Long Version]Caching the Uncacheable [Long Version]
Caching the Uncacheable [Long Version]
Fastly
 
Load Balancing with Nginx
Load Balancing with NginxLoad Balancing with Nginx
Load Balancing with Nginx
Marian Marinov
 
Revisiting HTTP/2
Revisiting HTTP/2Revisiting HTTP/2
Revisiting HTTP/2
Fastly
 
Altitude SF 2017: The power of the network
Altitude SF 2017: The power of the networkAltitude SF 2017: The power of the network
Altitude SF 2017: The power of the network
Fastly
 
Interactive web. O rly?
Interactive web. O rly?Interactive web. O rly?
Interactive web. O rly?timbc
 
Altitude SF 2017: Optimizing your hit rate
Altitude SF 2017: Optimizing your hit rateAltitude SF 2017: Optimizing your hit rate
Altitude SF 2017: Optimizing your hit rate
Fastly
 
Usenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a ProxyUsenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a Proxy
Leif Hedstrom
 
How To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - SlidesHow To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - Slides
Severalnines
 
So I Wrote a Manifest
So I Wrote a ManifestSo I Wrote a Manifest
So I Wrote a Manifest
Puppet
 
Building your own CDN using Amazon EC2
Building your own CDN using Amazon EC2Building your own CDN using Amazon EC2
Building your own CDN using Amazon EC2
SergeyChernyshev
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to Chef
Suresh Paulraj
 
Inside election night at The New York Times | Altitude NYC
Inside election night at The New York Times | Altitude NYCInside election night at The New York Times | Altitude NYC
Inside election night at The New York Times | Altitude NYC
Fastly
 
The HTML5 WebSocket API
The HTML5 WebSocket APIThe HTML5 WebSocket API
The HTML5 WebSocket API
David Lindkvist
 

What's hot (20)

Altitude SF 2017: Advanced VCL: Shielding and Clustering
Altitude SF 2017: Advanced VCL: Shielding and ClusteringAltitude SF 2017: Advanced VCL: Shielding and Clustering
Altitude SF 2017: Advanced VCL: Shielding and Clustering
 
Going crazy with Varnish and Symfony
Going crazy with Varnish and SymfonyGoing crazy with Varnish and Symfony
Going crazy with Varnish and Symfony
 
Advanced VCL: how to use restart
Advanced VCL: how to use restartAdvanced VCL: how to use restart
Advanced VCL: how to use restart
 
Advanced Caching Concepts @ Velocity NY 2015
Advanced Caching Concepts @ Velocity NY 2015Advanced Caching Concepts @ Velocity NY 2015
Advanced Caching Concepts @ Velocity NY 2015
 
NGINX High-performance Caching
NGINX High-performance CachingNGINX High-performance Caching
NGINX High-performance Caching
 
Altitude SF 2017: Building a continuous deployment pipeline
Altitude SF 2017: Building a continuous deployment pipelineAltitude SF 2017: Building a continuous deployment pipeline
Altitude SF 2017: Building a continuous deployment pipeline
 
Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...
Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...
Altitude SF 2017: Fastly GSLB: Scaling your microservice and multi-cloud envi...
 
Caching the Uncacheable [Long Version]
Caching the Uncacheable [Long Version]Caching the Uncacheable [Long Version]
Caching the Uncacheable [Long Version]
 
Load Balancing with Nginx
Load Balancing with NginxLoad Balancing with Nginx
Load Balancing with Nginx
 
Revisiting HTTP/2
Revisiting HTTP/2Revisiting HTTP/2
Revisiting HTTP/2
 
Altitude SF 2017: The power of the network
Altitude SF 2017: The power of the networkAltitude SF 2017: The power of the network
Altitude SF 2017: The power of the network
 
Interactive web. O rly?
Interactive web. O rly?Interactive web. O rly?
Interactive web. O rly?
 
Altitude SF 2017: Optimizing your hit rate
Altitude SF 2017: Optimizing your hit rateAltitude SF 2017: Optimizing your hit rate
Altitude SF 2017: Optimizing your hit rate
 
Usenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a ProxyUsenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a Proxy
 
How To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - SlidesHow To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - Slides
 
So I Wrote a Manifest
So I Wrote a ManifestSo I Wrote a Manifest
So I Wrote a Manifest
 
Building your own CDN using Amazon EC2
Building your own CDN using Amazon EC2Building your own CDN using Amazon EC2
Building your own CDN using Amazon EC2
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to Chef
 
Inside election night at The New York Times | Altitude NYC
Inside election night at The New York Times | Altitude NYCInside election night at The New York Times | Altitude NYC
Inside election night at The New York Times | Altitude NYC
 
The HTML5 WebSocket API
The HTML5 WebSocket APIThe HTML5 WebSocket API
The HTML5 WebSocket API
 

Viewers also liked

Derechos de privacidad y de informacion.pptx
Derechos de privacidad y de informacion.pptxDerechos de privacidad y de informacion.pptx
Derechos de privacidad y de informacion.pptx
Julianita C Rodriguez
 
Cooperación Intercluster
Cooperación InterclusterCooperación Intercluster
Cooperación Intercluster
TasoCluster.net
 
Corso rappresentante
Corso rappresentanteCorso rappresentante
Corso rappresentantePd Massafra
 
Presentation Web Pas
Presentation Web PasPresentation Web Pas
Presentation Web Pas
gonzalo mejías
 
Manual de usuario tira de 6 enchufes Z-Wave Greenwave español
Manual de usuario tira de 6 enchufes Z-Wave Greenwave españolManual de usuario tira de 6 enchufes Z-Wave Greenwave español
Manual de usuario tira de 6 enchufes Z-Wave Greenwave español
Domotica daVinci
 
Irina Tripapina, Head of International Development, myTarget (Mail.ru Group)
Irina Tripapina, Head of International Development, myTarget (Mail.ru Group)Irina Tripapina, Head of International Development, myTarget (Mail.ru Group)
Irina Tripapina, Head of International Development, myTarget (Mail.ru Group)
White Nights Conference
 
Dicionário de acordes
Dicionário de acordesDicionário de acordes
Dicionário de acordesJúlio Rocha
 
Quick guide rcn business svs partner program
Quick guide rcn business svs partner program Quick guide rcn business svs partner program
Quick guide rcn business svs partner program
RCN Business
 
Traducción, biosíntesis de proteínas
Traducción, biosíntesis de proteínasTraducción, biosíntesis de proteínas
Traducción, biosíntesis de proteínas
araastorgano
 
Presentacion peinameXpress
Presentacion peinameXpressPresentacion peinameXpress
Presentacion peinameXpress
Cristina Hernando Polo
 
Protección Pasiva contra Incendios
Protección Pasiva contra IncendiosProtección Pasiva contra Incendios
Protección Pasiva contra Incendios
maxibarrios
 
BUSINESS MODEL CYBERNETICS: Simply Create, Deliver, and Share Awesome Custome...
BUSINESS MODEL CYBERNETICS: Simply Create, Deliver, and Share Awesome Custome...BUSINESS MODEL CYBERNETICS: Simply Create, Deliver, and Share Awesome Custome...
BUSINESS MODEL CYBERNETICS: Simply Create, Deliver, and Share Awesome Custome...
Rod King, Ph.D.
 
Reload præsentation
Reload præsentationReload præsentation
Reload præsentation
Reload! A/S
 
Exploración de nuevos medios
Exploración de nuevos mediosExploración de nuevos medios
Exploración de nuevos medios
regumaria
 
Igualdad animal
Igualdad animalIgualdad animal
Igualdad animalLRH1
 
3 c16980 81_userguide
3 c16980 81_userguide3 c16980 81_userguide
3 c16980 81_userguideken
 
Zero Energy Cool Chamber Training in Tanzania
Zero Energy Cool Chamber Training in TanzaniaZero Energy Cool Chamber Training in Tanzania
Zero Energy Cool Chamber Training in Tanzania
The Sonora Pacific Group
 
Optimizing your checkout flow for conversions (w blue acorn)
Optimizing your checkout flow for conversions (w  blue acorn)Optimizing your checkout flow for conversions (w  blue acorn)
Optimizing your checkout flow for conversions (w blue acorn)
Gabrielle Retcho, Digital Marketer
 
Brand New Game Digital Interactive Branding
Brand New Game   Digital Interactive BrandingBrand New Game   Digital Interactive Branding
Brand New Game Digital Interactive Branding
Bart Hufen
 

Viewers also liked (20)

Derechos de privacidad y de informacion.pptx
Derechos de privacidad y de informacion.pptxDerechos de privacidad y de informacion.pptx
Derechos de privacidad y de informacion.pptx
 
Cooperación Intercluster
Cooperación InterclusterCooperación Intercluster
Cooperación Intercluster
 
Corso rappresentante
Corso rappresentanteCorso rappresentante
Corso rappresentante
 
Presentation Web Pas
Presentation Web PasPresentation Web Pas
Presentation Web Pas
 
Manual de usuario tira de 6 enchufes Z-Wave Greenwave español
Manual de usuario tira de 6 enchufes Z-Wave Greenwave españolManual de usuario tira de 6 enchufes Z-Wave Greenwave español
Manual de usuario tira de 6 enchufes Z-Wave Greenwave español
 
Irina Tripapina, Head of International Development, myTarget (Mail.ru Group)
Irina Tripapina, Head of International Development, myTarget (Mail.ru Group)Irina Tripapina, Head of International Development, myTarget (Mail.ru Group)
Irina Tripapina, Head of International Development, myTarget (Mail.ru Group)
 
Dicionário de acordes
Dicionário de acordesDicionário de acordes
Dicionário de acordes
 
Quick guide rcn business svs partner program
Quick guide rcn business svs partner program Quick guide rcn business svs partner program
Quick guide rcn business svs partner program
 
Traducción, biosíntesis de proteínas
Traducción, biosíntesis de proteínasTraducción, biosíntesis de proteínas
Traducción, biosíntesis de proteínas
 
Presentacion peinameXpress
Presentacion peinameXpressPresentacion peinameXpress
Presentacion peinameXpress
 
Protección Pasiva contra Incendios
Protección Pasiva contra IncendiosProtección Pasiva contra Incendios
Protección Pasiva contra Incendios
 
BUSINESS MODEL CYBERNETICS: Simply Create, Deliver, and Share Awesome Custome...
BUSINESS MODEL CYBERNETICS: Simply Create, Deliver, and Share Awesome Custome...BUSINESS MODEL CYBERNETICS: Simply Create, Deliver, and Share Awesome Custome...
BUSINESS MODEL CYBERNETICS: Simply Create, Deliver, and Share Awesome Custome...
 
Reload præsentation
Reload præsentationReload præsentation
Reload præsentation
 
Exploración de nuevos medios
Exploración de nuevos mediosExploración de nuevos medios
Exploración de nuevos medios
 
Igualdad animal
Igualdad animalIgualdad animal
Igualdad animal
 
Heloisa
HeloisaHeloisa
Heloisa
 
3 c16980 81_userguide
3 c16980 81_userguide3 c16980 81_userguide
3 c16980 81_userguide
 
Zero Energy Cool Chamber Training in Tanzania
Zero Energy Cool Chamber Training in TanzaniaZero Energy Cool Chamber Training in Tanzania
Zero Energy Cool Chamber Training in Tanzania
 
Optimizing your checkout flow for conversions (w blue acorn)
Optimizing your checkout flow for conversions (w  blue acorn)Optimizing your checkout flow for conversions (w  blue acorn)
Optimizing your checkout flow for conversions (w blue acorn)
 
Brand New Game Digital Interactive Branding
Brand New Game   Digital Interactive BrandingBrand New Game   Digital Interactive Branding
Brand New Game Digital Interactive Branding
 

Similar to Tips for going fast in a slow world: Michael May at OSCON 2015

Nginx
NginxNginx
Efficient HTTP Apis
Efficient HTTP ApisEfficient HTTP Apis
Efficient HTTP Apis
Adrian Cole
 
Android httpclient
Android httpclientAndroid httpclient
Android httpclient
allanh0526
 
Kong API Gateway
Kong API Gateway Kong API Gateway
Kong API Gateway
Chris Mague
 
Nginx Scalable Stack
Nginx Scalable StackNginx Scalable Stack
Nginx Scalable Stack
Bruno Paiuca
 
DVWA BruCON Workshop
DVWA BruCON WorkshopDVWA BruCON Workshop
DVWA BruCON Workshop
testuser1223
 
Replacing Squid with ATS
Replacing Squid with ATSReplacing Squid with ATS
Replacing Squid with ATS
Kit Chan
 
Altitude San Francisco 2018: Testing with Fastly Workshop
Altitude San Francisco 2018: Testing with Fastly WorkshopAltitude San Francisco 2018: Testing with Fastly Workshop
Altitude San Francisco 2018: Testing with Fastly Workshop
Fastly
 
Long live to CMAN!
Long live to CMAN!Long live to CMAN!
Long live to CMAN!
Ludovico Caldara
 
Android Performance #4: Network
Android Performance #4: NetworkAndroid Performance #4: Network
Android Performance #4: Network
Yonatan Levin
 
VUG5: Varnish at Opera Software
VUG5: Varnish at Opera SoftwareVUG5: Varnish at Opera Software
VUG5: Varnish at Opera Software
Cosimo Streppone
 
Load testing with Blitz
Load testing with BlitzLoad testing with Blitz
Load testing with Blitz
Lindsay Holmwood
 
Async programming: From 0 to task.IsComplete - es
Async programming: From 0 to task.IsComplete - esAsync programming: From 0 to task.IsComplete - es
Async programming: From 0 to task.IsComplete - es
Darío Kondratiuk
 
Varnish and Drupal- Accelerating Website Performance and Flexibility with Var...
Varnish and Drupal- Accelerating Website Performance and Flexibility with Var...Varnish and Drupal- Accelerating Website Performance and Flexibility with Var...
Varnish and Drupal- Accelerating Website Performance and Flexibility with Var...
Acquia
 
Performance #4 network
Performance #4  networkPerformance #4  network
Performance #4 network
Vitali Pekelis
 
How we use and deploy Varnish at Opera
How we use and deploy Varnish at OperaHow we use and deploy Varnish at Opera
How we use and deploy Varnish at Opera
Cosimo Streppone
 
Serverless Multi Region Cache Replication
Serverless Multi Region Cache ReplicationServerless Multi Region Cache Replication
Serverless Multi Region Cache Replication
Sanghyun Lee
 
Scale Your Application while Improving Performance and Lowering Costs (SVC203...
Scale Your Application while Improving Performance and Lowering Costs (SVC203...Scale Your Application while Improving Performance and Lowering Costs (SVC203...
Scale Your Application while Improving Performance and Lowering Costs (SVC203...
Amazon Web Services
 
Load Balancing MySQL with HAProxy - Slides
Load Balancing MySQL with HAProxy - SlidesLoad Balancing MySQL with HAProxy - Slides
Load Balancing MySQL with HAProxy - Slides
Severalnines
 

Similar to Tips for going fast in a slow world: Michael May at OSCON 2015 (20)

Nginx
NginxNginx
Nginx
 
Efficient HTTP Apis
Efficient HTTP ApisEfficient HTTP Apis
Efficient HTTP Apis
 
Android httpclient
Android httpclientAndroid httpclient
Android httpclient
 
Kong API Gateway
Kong API Gateway Kong API Gateway
Kong API Gateway
 
Nginx Scalable Stack
Nginx Scalable StackNginx Scalable Stack
Nginx Scalable Stack
 
DVWA BruCON Workshop
DVWA BruCON WorkshopDVWA BruCON Workshop
DVWA BruCON Workshop
 
Replacing Squid with ATS
Replacing Squid with ATSReplacing Squid with ATS
Replacing Squid with ATS
 
ReplacingSquidWithATS
ReplacingSquidWithATSReplacingSquidWithATS
ReplacingSquidWithATS
 
Altitude San Francisco 2018: Testing with Fastly Workshop
Altitude San Francisco 2018: Testing with Fastly WorkshopAltitude San Francisco 2018: Testing with Fastly Workshop
Altitude San Francisco 2018: Testing with Fastly Workshop
 
Long live to CMAN!
Long live to CMAN!Long live to CMAN!
Long live to CMAN!
 
Android Performance #4: Network
Android Performance #4: NetworkAndroid Performance #4: Network
Android Performance #4: Network
 
VUG5: Varnish at Opera Software
VUG5: Varnish at Opera SoftwareVUG5: Varnish at Opera Software
VUG5: Varnish at Opera Software
 
Load testing with Blitz
Load testing with BlitzLoad testing with Blitz
Load testing with Blitz
 
Async programming: From 0 to task.IsComplete - es
Async programming: From 0 to task.IsComplete - esAsync programming: From 0 to task.IsComplete - es
Async programming: From 0 to task.IsComplete - es
 
Varnish and Drupal- Accelerating Website Performance and Flexibility with Var...
Varnish and Drupal- Accelerating Website Performance and Flexibility with Var...Varnish and Drupal- Accelerating Website Performance and Flexibility with Var...
Varnish and Drupal- Accelerating Website Performance and Flexibility with Var...
 
Performance #4 network
Performance #4  networkPerformance #4  network
Performance #4 network
 
How we use and deploy Varnish at Opera
How we use and deploy Varnish at OperaHow we use and deploy Varnish at Opera
How we use and deploy Varnish at Opera
 
Serverless Multi Region Cache Replication
Serverless Multi Region Cache ReplicationServerless Multi Region Cache Replication
Serverless Multi Region Cache Replication
 
Scale Your Application while Improving Performance and Lowering Costs (SVC203...
Scale Your Application while Improving Performance and Lowering Costs (SVC203...Scale Your Application while Improving Performance and Lowering Costs (SVC203...
Scale Your Application while Improving Performance and Lowering Costs (SVC203...
 
Load Balancing MySQL with HAProxy - Slides
Load Balancing MySQL with HAProxy - SlidesLoad Balancing MySQL with HAProxy - Slides
Load Balancing MySQL with HAProxy - Slides
 

More from Fastly

Altitude San Francisco 2018: Preparing for Video Streaming Events at Scale
Altitude San Francisco 2018: Preparing for Video Streaming Events at ScaleAltitude San Francisco 2018: Preparing for Video Streaming Events at Scale
Altitude San Francisco 2018: Preparing for Video Streaming Events at Scale
Fastly
 
Altitude San Francisco 2018: Building the Souther Hemisphere of the Internet
Altitude San Francisco 2018: Building the Souther Hemisphere of the InternetAltitude San Francisco 2018: Building the Souther Hemisphere of the Internet
Altitude San Francisco 2018: Building the Souther Hemisphere of the Internet
Fastly
 
Altitude San Francisco 2018: The World Cup Stream
Altitude San Francisco 2018: The World Cup StreamAltitude San Francisco 2018: The World Cup Stream
Altitude San Francisco 2018: The World Cup Stream
Fastly
 
Altitude San Francisco 2018: We Own Our Destiny
Altitude San Francisco 2018: We Own Our DestinyAltitude San Francisco 2018: We Own Our Destiny
Altitude San Francisco 2018: We Own Our Destiny
Fastly
 
Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...
Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...
Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...
Fastly
 
Altitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration
Altitude San Francisco 2018: Moving Off the Monolith: A Seamless MigrationAltitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration
Altitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration
Fastly
 
Altitude San Francisco 2018: Bringing TLS to GitHub Pages
Altitude San Francisco 2018: Bringing TLS to GitHub PagesAltitude San Francisco 2018: Bringing TLS to GitHub Pages
Altitude San Francisco 2018: Bringing TLS to GitHub Pages
Fastly
 
Altitude San Francisco 2018: HTTP Invalidation Workshop
Altitude San Francisco 2018: HTTP Invalidation WorkshopAltitude San Francisco 2018: HTTP Invalidation Workshop
Altitude San Francisco 2018: HTTP Invalidation Workshop
Fastly
 
Altitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe
Altitude San Francisco 2018: HTTP/2 Tales: Discovery and WoeAltitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe
Altitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe
Fastly
 
Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...
Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...
Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...
Fastly
 
Altitude San Francisco 2018: Scaling Ethereum to 10B requests per day
Altitude San Francisco 2018: Scaling Ethereum to 10B requests per dayAltitude San Francisco 2018: Scaling Ethereum to 10B requests per day
Altitude San Francisco 2018: Scaling Ethereum to 10B requests per day
Fastly
 
Altitude San Francisco 2018: Authentication at the Edge
Altitude San Francisco 2018: Authentication at the EdgeAltitude San Francisco 2018: Authentication at the Edge
Altitude San Francisco 2018: Authentication at the Edge
Fastly
 
Altitude San Francisco 2018: WebAssembly Tools & Applications
Altitude San Francisco 2018: WebAssembly Tools & ApplicationsAltitude San Francisco 2018: WebAssembly Tools & Applications
Altitude San Francisco 2018: WebAssembly Tools & Applications
Fastly
 
Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK
Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORKAltitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK
Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK
Fastly
 
Altitude San Francisco 2018: WAF Workshop
Altitude San Francisco 2018: WAF WorkshopAltitude San Francisco 2018: WAF Workshop
Altitude San Francisco 2018: WAF Workshop
Fastly
 
Altitude San Francisco 2018: Logging at the Edge
Altitude San Francisco 2018: Logging at the Edge Altitude San Francisco 2018: Logging at the Edge
Altitude San Francisco 2018: Logging at the Edge
Fastly
 
Altitude San Francisco 2018: Video Workshop Docs
Altitude San Francisco 2018: Video Workshop DocsAltitude San Francisco 2018: Video Workshop Docs
Altitude San Francisco 2018: Video Workshop Docs
Fastly
 
Altitude San Francisco 2018: Programming the Edge
Altitude San Francisco 2018: Programming the EdgeAltitude San Francisco 2018: Programming the Edge
Altitude San Francisco 2018: Programming the Edge
Fastly
 
Enabling lightning fast content delivery for Spotify
Enabling lightning fast content delivery for SpotifyEnabling lightning fast content delivery for Spotify
Enabling lightning fast content delivery for Spotify
Fastly
 
What's next in edge computing?
What's next in edge computing?What's next in edge computing?
What's next in edge computing?
Fastly
 

More from Fastly (20)

Altitude San Francisco 2018: Preparing for Video Streaming Events at Scale
Altitude San Francisco 2018: Preparing for Video Streaming Events at ScaleAltitude San Francisco 2018: Preparing for Video Streaming Events at Scale
Altitude San Francisco 2018: Preparing for Video Streaming Events at Scale
 
Altitude San Francisco 2018: Building the Souther Hemisphere of the Internet
Altitude San Francisco 2018: Building the Souther Hemisphere of the InternetAltitude San Francisco 2018: Building the Souther Hemisphere of the Internet
Altitude San Francisco 2018: Building the Souther Hemisphere of the Internet
 
Altitude San Francisco 2018: The World Cup Stream
Altitude San Francisco 2018: The World Cup StreamAltitude San Francisco 2018: The World Cup Stream
Altitude San Francisco 2018: The World Cup Stream
 
Altitude San Francisco 2018: We Own Our Destiny
Altitude San Francisco 2018: We Own Our DestinyAltitude San Francisco 2018: We Own Our Destiny
Altitude San Francisco 2018: We Own Our Destiny
 
Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...
Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...
Altitude San Francisco 2018: Scale and Stability at the Edge with 1.4 Billion...
 
Altitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration
Altitude San Francisco 2018: Moving Off the Monolith: A Seamless MigrationAltitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration
Altitude San Francisco 2018: Moving Off the Monolith: A Seamless Migration
 
Altitude San Francisco 2018: Bringing TLS to GitHub Pages
Altitude San Francisco 2018: Bringing TLS to GitHub PagesAltitude San Francisco 2018: Bringing TLS to GitHub Pages
Altitude San Francisco 2018: Bringing TLS to GitHub Pages
 
Altitude San Francisco 2018: HTTP Invalidation Workshop
Altitude San Francisco 2018: HTTP Invalidation WorkshopAltitude San Francisco 2018: HTTP Invalidation Workshop
Altitude San Francisco 2018: HTTP Invalidation Workshop
 
Altitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe
Altitude San Francisco 2018: HTTP/2 Tales: Discovery and WoeAltitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe
Altitude San Francisco 2018: HTTP/2 Tales: Discovery and Woe
 
Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...
Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...
Altitude San Francisco 2018: How Magento moved to the cloud while maintaining...
 
Altitude San Francisco 2018: Scaling Ethereum to 10B requests per day
Altitude San Francisco 2018: Scaling Ethereum to 10B requests per dayAltitude San Francisco 2018: Scaling Ethereum to 10B requests per day
Altitude San Francisco 2018: Scaling Ethereum to 10B requests per day
 
Altitude San Francisco 2018: Authentication at the Edge
Altitude San Francisco 2018: Authentication at the EdgeAltitude San Francisco 2018: Authentication at the Edge
Altitude San Francisco 2018: Authentication at the Edge
 
Altitude San Francisco 2018: WebAssembly Tools & Applications
Altitude San Francisco 2018: WebAssembly Tools & ApplicationsAltitude San Francisco 2018: WebAssembly Tools & Applications
Altitude San Francisco 2018: WebAssembly Tools & Applications
 
Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK
Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORKAltitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK
Altitude San Francisco 2018: Fastly Purge Control at the USA TODAY NETWORK
 
Altitude San Francisco 2018: WAF Workshop
Altitude San Francisco 2018: WAF WorkshopAltitude San Francisco 2018: WAF Workshop
Altitude San Francisco 2018: WAF Workshop
 
Altitude San Francisco 2018: Logging at the Edge
Altitude San Francisco 2018: Logging at the Edge Altitude San Francisco 2018: Logging at the Edge
Altitude San Francisco 2018: Logging at the Edge
 
Altitude San Francisco 2018: Video Workshop Docs
Altitude San Francisco 2018: Video Workshop DocsAltitude San Francisco 2018: Video Workshop Docs
Altitude San Francisco 2018: Video Workshop Docs
 
Altitude San Francisco 2018: Programming the Edge
Altitude San Francisco 2018: Programming the EdgeAltitude San Francisco 2018: Programming the Edge
Altitude San Francisco 2018: Programming the Edge
 
Enabling lightning fast content delivery for Spotify
Enabling lightning fast content delivery for SpotifyEnabling lightning fast content delivery for Spotify
Enabling lightning fast content delivery for Spotify
 
What's next in edge computing?
What's next in edge computing?What's next in edge computing?
What's next in edge computing?
 

Recently uploaded

FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
Abida Shariff
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 

Recently uploaded (20)

FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 

Tips for going fast in a slow world: Michael May at OSCON 2015

  • 1. CACHE MONEY: Tips for going FAST in a slow world Michael May API Engineer @ohaimmay 2015-07-22
  • 2. Real-time Content Delivery Network Leverage fork of Varnish Cache sub-millisecond TTFB Enable, not constrain
  • 3.
  • 4.
  • 6. ALL communication is bounded by the speed of light
  • 7. C(vac) = 186,000 miles/s C(fiber) = 124,000 miles/s c(air) ~ c(vac)
  • 8. We’re really impatient (when it comes to cat gifs, at least)
  • 9.
  • 10. The NASA Problem Get pics from Deep Space to Earth 1 kb/sec bandwidth Single (compressed) 2.5Mb image takes ~1 hour Complete sensor dataset won’t arrive until 2016! *source:  http://www.planetary.org/blogs/emily-­‐lakdawalla/2015/01300800-­‐talking-­‐to-­‐pluto-­‐is-­‐hard.html New Horizons
  • 11. ©  Ryan  Wick  /  Wikimedia  Commons  /  CC-­‐BY-­‐SA-­‐2.0  /  GFDL
  • 13. We have the same problem on Earth! Credit:  NASA,  Expedition  24  Crew
  • 14. mmay:~ $ ping fast.mmay.net PING fast.mmay.net: 56 data bytes 64 bytes received: icmp_seq=0 ttl=44 time=273.722 ms 64 bytes received: icmp_seq=1 ttl=43 time=347.763 ms 64 bytes received: icmp_seq=2 ttl=44 time=276.129 ms 64 bytes received: icmp_seq=3 ttl=43 time=369.563 ms 64 bytes received: icmp_seq=4 ttl=44 time=269.116 ms --- fast.mmay.net ping statistics — 6 packets transmitted, 6 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 269.116/293.231/503.991/77.754ms ATL to SYD RTT (9k miles)
  • 15. ©  User:Timwether  /  Wikimedia  Commons  /  CC-­‐BY-­‐SA-­‐3.0
  • 16. Moving bits around the world takes measurable time ©  User:Timwether  /  Wikimedia  Commons  /  CC-­‐BY-­‐SA-­‐3.0
  • 17. Moving bits around the ^world takes measurable time ©  User:Timwether  /  Wikimedia  Commons  /  CC-­‐BY-­‐SA-­‐3.0 universe
  • 18. ATL to SYD RTT (what we want) mmay:~ $ ping fast.mmay.net PING fallback.global-ssl.fastly.net (23.235.39.249): 56 data bytes 64 bytes from 23.235.39.249: icmp_seq=0 ttl=57 time=22.411 ms 64 bytes from 23.235.39.249: icmp_seq=2 ttl=57 time=30.053 ms 64 bytes from 23.235.39.249: icmp_seq=3 ttl=57 time=23.592 ms 64 bytes from 23.235.39.249: icmp_seq=4 ttl=57 time=23.180 ms 64 bytes from 23.235.39.249: icmp_seq=5 ttl=57 time=24.993 ms --- fallback.global-ssl.fastly.net ping statistics --- 6 packets transmitted, 6 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 22.411/27.042/38.025/5.510 ms
  • 19. We’re not going to beat physics Credit:  US  Navy  /  CC-­‐BY-­‐2.0
  • 20. We’re not going to beat physics Credit:  US  Navy  /  CC-­‐BY-­‐2.0 But we will be clever engineers
  • 21. > “Middle Mile” Optimizations
  • 22. > “Middle Mile” Optimizations > Global Cache
  • 23. Will it cache? Image  Credit:  ©  Ryan  Notch  /  www.areographers.com  /  CC-­‐SA-­‐3.0 STATIC
  • 27.
  • 28.
  • 29. “Event Driven” Content > Valid for > 0 seconds (pseudo-static?) > Changes unpredictably > That change requires immediate update
  • 30.
  • 31. mmay:~ $ ping new-horizons.nasa.space PING new-horizons.nasa.space: 56 data bytes 1 byte received: time=16200s (4.5 hours) --- ping new-horizons.nasa.space ping statistics — 1 packets transmitted, 1 packets received SFO to PLUTO RTT (3 billion mi)
  • 32. Web Perf 101 Critical path optimization / use Google PageSpeed Rendering optimizations Compress/Minify text (html, js, css), images, fonts Optimize HTTP Caching Strategies!!!!
  • 37. Is my Varnish Working?
  • 38. Is my Varnish Working? mmay:~ $ curl -svo /dev/null https://app.fastly.com * Connected to app.fastly.com > GET / HTTP/1.1 > User-Agent: curl > Host: app.fastly.com > < HTTP/1.1 200 OK < Connection: keep-alive < Via: 1.1 varnish < X-Served-By: cache-atl6230-ATL < X-Cache: MISS < X-Cache-Hits: 0 < Vary: Accept-Encoding [data not shown] * Connection #0 to host app.fastly.com left intact
  • 39. Is my Varnish Working? mmay:~ $ curl -svo /dev/null https://app.fastly.com * Connected to app.fastly.com > GET / HTTP/1.1 > User-Agent: curl > Host: app.fastly.com > < HTTP/1.1 200 OK < Connection: keep-alive < Via: 1.1 varnish < X-Served-By: cache-atl6230-ATL < X-Cache: MISS < X-Cache-Hits: 0 < Vary: Accept-Encoding [data not shown] * Connection #0 to host app.fastly.com left intact
  • 40. Is my Varnish Working? mmay:~ $ curl -svo /dev/null https://app.fastly.com * Connected to app.fastly.com > GET / HTTP/1.1 > User-Agent: curl > Host: app.fastly.com > < HTTP/1.1 200 OK < Connection: keep-alive < Via: 1.1 varnish < X-Served-By: cache-atl6230-ATL < X-Cache: MISS < X-Cache-Hits: 0 < Vary: Accept-Encoding [data not shown] * Connection #0 to host app.fastly.com left intact I’ll be talking to ya
  • 41. Is my Varnish Working? mmay:~ $ curl -svo /dev/null https://app.fastly.com * Connected to app.fastly.com > GET / HTTP/1.1 > User-Agent: curl > Host: app.fastly.com > < HTTP/1.1 200 OK < Connection: keep-alive < Via: 1.1 varnish < X-Served-By: cache-atl6230-ATL < X-Cache: MISS < X-Cache-Hits: 0 < Vary: Accept-Encoding [data not shown] * Connection #0 to host app.fastly.com left intact
  • 42. Is my Varnish Working? mmay:~ $ curl -svo /dev/null https://app.fastly.com * Connected to app.fastly.com > GET / HTTP/1.1 > User-Agent: curl > Host: app.fastly.com > < HTTP/1.1 200 OK < Connection: keep-alive < Via: 1.1 varnish < X-Served-By: cache-atl6230-ATL < X-Cache: MISS < X-Cache-Hits: 0 < Vary: Accept-Encoding [data not shown] * Connection #0 to host app.fastly.com left intact
  • 43. Is my Varnish Working? mmay:~ $ curl -svo /dev/null https://app.fastly.com * Connected to app.fastly.com > GET / HTTP/1.1 > User-Agent: curl > Host: app.fastly.com > < HTTP/1.1 200 OK < Connection: keep-alive < Via: 1.1 varnish < X-Served-By: cache-atl6230-ATL < X-Cache: MISS < X-Cache-Hits: 0 < Vary: Accept-Encoding [data not shown] * Connection #0 to host app.fastly.com left intact Hey, I was proxied
  • 44. Is my Varnish Working? mmay:~ $ curl -svo /dev/null https://app.fastly.com * Connected to app.fastly.com > GET / HTTP/1.1 > User-Agent: curl > Host: app.fastly.com > < HTTP/1.1 200 OK < Connection: keep-alive < Via: 1.1 varnish < X-Served-By: cache-pdx999-PDX < X-Cache: HIT < X-Cache-Hits: 10 < Vary: Accept-Encoding [data not shown] * Connection #0 to host app.fastly.com left intact
  • 45. Is my Varnish Working? mmay:~ $ curl -svo /dev/null https://app.fastly.com * Connected to app.fastly.com > GET / HTTP/1.1 > User-Agent: curl > Host: app.fastly.com > < HTTP/1.1 200 OK < Connection: keep-alive < Via: 1.1 varnish < X-Served-By: cache-pdx999-PDX < X-Cache: HIT < X-Cache-Hits: 10 < Vary: Accept-Encoding [data not shown] * Connection #0 to host app.fastly.com left intact Cool cache stuff
  • 46.
  • 48. *Optimize HTTP Caching Strategies Cache-Control: public, max-age=10
  • 49. Is the object in the cache valid?
  • 50. Is the object in the cache valid? aka Revalidation
  • 52. HTTP Request with If-None-Match
  • 56. Back in the day, the server was responsible for rendering pages
  • 57. AJAX
  • 58. AJAX Extract server-side rendering of private content into APIs Fetch & render private data client-side Cache API for increased performance
  • 59. API Caching with event-driven purge Set Cache-Control with a reasonably long TTL
  • 60. API Caching with event-driven purge Set Cache-Control with a reasonably long TTL Set Surrogate-Key(s) with unique cache key(s)
  • 61. API Caching with event-driven purge Set Cache-Control with a reasonably long TTL Set Surrogate-Key(s) with unique cache key(s) Invalidate cached responses by Surrogate-Key purge
  • 62. Example response handlers with API Caching GET /content.json { - Validation - DB Lookup - Set Cache-Control Header - Set ‘Surrogate-Key: my_cache_key’ Header - Render response } PUT /content.json { - Validation - Update DB - Purge ‘my_cache_key’ (e.g. curl -XPOST https://api.fastly.com/purge/my_cache_key) - Render response
  • 63.
  • 64.
  • 65. AJAX “like” request flow w/ Varnish Varnish
  • 66. Request flow with Varnish Synthetic Varnish
  • 68.
  • 69. Synthetic Response VCL for “like” hello  world sub vcl_recv { if (req.url ~ "^/like" && req.request == "POST") { error 702 "OK"; } }
  • 70. Synthetic Response VCL for “like” hello  world sub vcl_error { if (obj.status == 702) { set obj.status = 200; set obj.http.Content-Type = “text/plain;” synthetic {"OK"}; } return (deliver); }
  • 71. Synthetic Response VCL for “like” hello  world sub vcl_log { if (req.url ~ "^/like" && req.method == "POST") { log {"syslog “like :: “} req.url {" "} resp.status; } }
  • 73. Set-Cookie Sent by server “Cookie” sent by client If cookies in response, not cached by default Vary’ing on Cookie is unwise
  • 74. Vary Specifies which headers the cache will take into account on object lookup. (outside of Host and Path)
  • 75.
  • 76. Out of a sample of 100,000 requests, there were 8,000 different User-Agents!
  • 77. Caching when cookies present 1. Remove cookie and save in temp variable 2. Do normal cache lookup 3. Set cookie from temp var right before delivery hello  world hello  world
  • 78. Caching when cookies present (VCL) // Request received sub vcl_recv { // If request includes Cookie, save temporarily // & remove for cache lookup if (req.http.Cookie ~ "mycookie=") { set req.http.Tmp-Set-Cookie = req.http.Cookie; unset req.http.Cookie; } else { set req.hash_always_miss = true; } }
  • 79. Caching when cookies present (VCL) // Cache miss, fetch from origin sub vcl_fetch { // if origin returns Set-Cookie, save temporarily // & remove so response can be cached if (beresp.http.Set-Cookie) { set req.http.Tmp-Set-Cookie = beresp.http.Set-Cookie; unset beresp.http.Set-Cookie; } } // One last thing sub vcl_deliver { // Include Set-Cookie in response to client if (req.http.Tmp-Set-Cookie) { set resp.http.Set-Cookie = req.http.Tmp-Set-Cookie; } }
  • 80.
  • 82. Wrapping Up c is our speed limit, moving data around takes time
  • 83. Wrapping Up c is our speed limit, moving data around takes time CDNs are more than a dumb static content cache
  • 84. Wrapping Up c is our speed limit, moving data around takes time CDNs can be more than a dumb static content cache Cache “event driven” content and script logic at the edge using VCL
  • 85. Wrapping Up c is our speed limit, moving data around takes time CDNs can do more than be a static content cache Cache “event driven” content and script logic at the edge using VCL Increase that CACHE HIT RATIO!