SlideShare ist ein Scribd-Unternehmen logo
1 von 86
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

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 ClusteringFastly
 
Going crazy with Varnish and Symfony
Going crazy with Varnish and SymfonyGoing crazy with Varnish and Symfony
Going crazy with Varnish and SymfonyDavid de Boer
 
Advanced VCL: how to use restart
Advanced VCL: how to use restartAdvanced VCL: how to use restart
Advanced VCL: how to use restartFastly
 
Advanced Caching Concepts @ Velocity NY 2015
Advanced Caching Concepts @ Velocity NY 2015Advanced Caching Concepts @ Velocity NY 2015
Advanced Caching Concepts @ Velocity NY 2015Rakesh Chaudhary
 
NGINX High-performance Caching
NGINX High-performance CachingNGINX High-performance Caching
NGINX High-performance CachingNGINX, 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 pipelineFastly
 
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 NginxMarian Marinov
 
Revisiting HTTP/2
Revisiting HTTP/2Revisiting HTTP/2
Revisiting HTTP/2Fastly
 
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 networkFastly
 
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 rateFastly
 
Usenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a ProxyUsenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a ProxyLeif 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 - SlidesSeveralnines
 
So I Wrote a Manifest
So I Wrote a ManifestSo I Wrote a Manifest
So I Wrote a ManifestPuppet
 
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 EC2SergeyChernyshev
 
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 NYCFastly
 

Was ist angesagt? (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
 

Andere mochten auch

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.pptxJulianita C Rodriguez
 
Cooperación Intercluster
Cooperación InterclusterCooperación Intercluster
Cooperación InterclusterTasoCluster.net
 
Corso rappresentante
Corso rappresentanteCorso rappresentante
Corso rappresentantePd Massafra
 
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ñolDomotica 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ínasaraastorgano
 
Protección Pasiva contra Incendios
Protección Pasiva contra IncendiosProtección Pasiva contra Incendios
Protección Pasiva contra Incendiosmaxibarrios
 
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æsentationReload! A/S
 
Exploración de nuevos medios
Exploración de nuevos mediosExploración de nuevos medios
Exploración de nuevos mediosregumaria
 
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 TanzaniaThe Sonora Pacific Group
 
Brand New Game Digital Interactive Branding
Brand New Game   Digital Interactive BrandingBrand New Game   Digital Interactive Branding
Brand New Game Digital Interactive BrandingBart Hufen
 

Andere mochten auch (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
 

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

Efficient HTTP Apis
Efficient HTTP ApisEfficient HTTP Apis
Efficient HTTP ApisAdrian Cole
 
Android httpclient
Android httpclientAndroid httpclient
Android httpclientallanh0526
 
Kong API Gateway
Kong API Gateway Kong API Gateway
Kong API Gateway Chris Mague
 
Nginx Scalable Stack
Nginx Scalable StackNginx Scalable Stack
Nginx Scalable StackBruno Paiuca
 
DVWA BruCON Workshop
DVWA BruCON WorkshopDVWA BruCON Workshop
DVWA BruCON Workshoptestuser1223
 
Replacing Squid with ATS
Replacing Squid with ATSReplacing Squid with ATS
Replacing Squid with ATSKit 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 WorkshopFastly
 
Android Performance #4: Network
Android Performance #4: NetworkAndroid Performance #4: Network
Android Performance #4: NetworkYonatan Levin
 
VUG5: Varnish at Opera Software
VUG5: Varnish at Opera SoftwareVUG5: Varnish at Opera Software
VUG5: Varnish at Opera SoftwareCosimo Streppone
 
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 - esDarí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 networkVitali 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 OperaCosimo Streppone
 
Serverless Multi Region Cache Replication
Serverless Multi Region Cache ReplicationServerless Multi Region Cache Replication
Serverless Multi Region Cache ReplicationSanghyun 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 - SlidesSeveralnines
 

Ähnlich wie 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
 
ReplacingSquidWithATS
ReplacingSquidWithATSReplacingSquidWithATS
ReplacingSquidWithATS
 
Replacing Squid with ATS
Replacing Squid with ATSReplacing Squid with ATS
Replacing Squid with ATS
 
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
 

Mehr von 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 ScaleFastly
 
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 InternetFastly
 
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 StreamFastly
 
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 DestinyFastly
 
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 MigrationFastly
 
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 PagesFastly
 
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 WorkshopFastly
 
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 WoeFastly
 
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 dayFastly
 
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 EdgeFastly
 
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 & ApplicationsFastly
 
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 NETWORKFastly
 
Altitude San Francisco 2018: WAF Workshop
Altitude San Francisco 2018: WAF WorkshopAltitude San Francisco 2018: WAF Workshop
Altitude San Francisco 2018: WAF WorkshopFastly
 
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 DocsFastly
 
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 EdgeFastly
 
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 SpotifyFastly
 
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
 

Mehr von 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?
 

Kürzlich hochgeladen

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 

Kürzlich hochgeladen (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 

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!