Serving up content on the Internet is something our web sites do daily. But are we doing this in the fastest way possible? How are users in faraway countries experiencing our apps? Why do we have three webservers serving the same content over and over again? In this session, we’ll explore the Azure Content Delivery Network or CDN, a service which makes it easy to serve up blobs, videos and other content from servers close to our users. We’ll explore simple file serving as well as some more advanced, dynamic edge caching scenarios.
5. How browsers work...
Request fetching <html>
Download CSS
Download images
Download JavaScript
Download Google Analytics
Finite # of concurrent requests per host (and in
total)!
Bundling/minification
Use multiple hosts
8. Speed of light and TCP don’t like each other
US East – US West = 7400 km
or 25 ms at speed of light (299792,458 km/second in a vacuum)
or 37 ms through fiber optics (66% of SoL, glass refraction index 1.5)
TCP request/response, ACK request/response
double that 37 ms, add some compute: ~90 ms US East to West
Theoretical max. packet size is 64 kB
usually +/- 1500 bytes (MTU)
TCP slow start
http://www.stevesouders.com/blog/2010/07/13/velocity
-tcp-and-the-lower-bound-of-web-performance/
9. Combine TCP slow start and fiber optics
US East – US West
~90ms + TCP slow start
256 kB ~ 10 TCP roundtrips
that 90 ms becomes 900 ms...
http://www.stevesouders.com/blog/2010/07/13/velocity
-tcp-and-the-lower-bound-of-web-performance/
10. Cost of web load
Serving static files costs CPU
Full IIS pipeline for a tiny static file
Serving static files costs I/O
Files have to be copied from file stream to response stream
Why do this? Why not let the server handle our dynamic content?
Cookies!
Request/response cycle adds the cookie
Even for a 1 kB PNG
11. So there are some problems on the
Internet...
Browsers / connections
Speed of light / TCP slow start
Cost of web load (CPU, I/O and cookies)
13. Workarounds!
Browsers / connections
Serve some content off a different hostname
Speed of light / TCP slow start
Move content closer to the user
Cost of web load (CPU, I/O and cookies)
Serve off a cookieless domain
Move content off the web server and let someone else handle it
15. The Azure CDN
Serve content from storage / cloud service
Separate hostname (custom domain possible)
Many locations around the globe
DNS anycast to get content close to user
20. What did we just do?
First request
Second request (on same endpoint)
yawn!
21. How to use this in real life?
Create one/more public blob containers
Upload static files in there (CSS, images, scripts, ...)
Update your application to the new URLs
23. How to delete content from the CDN?
Read a book or 2 and wait (7 days default...)
Think about this upfront!
If you know expiry, set the Cache-Control header (shorter = more
updates)
If you don’t, use versioning in query strings
Better: use both
24. Versioning
Enable query strings on the CDN endpoint
Use a query string with a meaningful version
number
CDN will keep a cache per URL per query string
/foo/bar?v=1
/foo/bar?v=2
/foo/bar?v=3
25. Cloud services will make life easier
We had to “manually” upload content to storage
May be good, may be cumbersome, depends!
Would be nice if we could “deploy and forget”
Set a cloud service as the CDN origin
Will serve all content from /cdn URL
Same cache-control rules as with storage
27. Best-practices for content on the CDN
Set headers!
Cache-Control
Content-Type
Content-Encoding
Version content!
HTTP compression on origin = HTTP compression
on CDN
29. Defining “dynamic content”
Content that is generated
Parameters from query string, ASP.NET routing, ...
And/or based on data
Content that refreshes, but not too often
Anything > a couple of minutes
Examples
Charts, images, generated documents, json, API’s, ...