06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS ABOUT ME • Solutions Architect • Early AWS adopter (2007) • Built Cotton On Group’s AWS Infrastructure (2012) 2
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS HOW IT WORKS 10 1. Client request file 2. If file in cache CF return file Nearest Edge Location a. If file not in cache, CloudFront request to origin b. Origin returns latest version of file, status 200, cached in CloudFront 1. Client request file 2. If file in cache CF return file Nearest Edge Location a. If file in cache but expired, CloudFront request to origin b. Cached file is latest, status 304, CloudFront keeps file in cache, No change in Date, Expire Refreshed Age Condition GET Routing based on low latency/price class 01
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 1. 10 Origin Servers per CF Distribution 2. 10 Cache Behavior per CF Distribution 3. 10 CNAME per CF Distribution 4. 10 Cookies forwarded per Cache Behavior 11 01 MAKE A NOTE
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Programmatic 3 invalidation requests at any given time with each include maximum of 1000 files CACHE INVALIDATION 15
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Eventual Consistency Invalidation takes time to propagate across all edge locations CACHE INVALIDATION 16
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Deal breaker: Browser cache Versioning is best way to avoid the invalidation related issues CACHE INVALIDATION 17
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Versioning using query strings File name plus query string with version: /static/profile.png?versionID=123 VERSIONING 18
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Versioning using content based hash key File name as unique key based on file content: /static/712vds57tr18929812312enb.png VERSIONING 22
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS MD5 HASH USING FILE CONTENT B723EH0F0DF PROFILE.PNG UPLOAD TO S3 USE HASH AS FILE NAME STATIC/IMAGES/B723EH0F0DF.PNG CF KEY STATIC/IMAGES/B723EH0F0DF.PNG FOR S3 CONTENT 23 Avoid content duplication
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Versioning using prefix/suffix File name with version prefix/suffix: /static/profile_123.png File name with version prefix/suffix: /static/profile_ 712vds57tr18929812312enb.png VERSIONING 25
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 For compression CF relies on the origin servers (Custom vs S3) COMPRESSION 28
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Upload both gzip and non-gzip versions of the file in the same S3 bucket COMPRESSION 30
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Use one/both of these •On Origin server set Cache- Control max-age header •In Cache Behavior set Minimum TTL EXPIRATION 33
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Depending on request frequency, CloudFront might remove the object before its expiration EXPIRATION 35
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Avoid Expire header After expiry browser cachability issues (stale response) Can not cache object if {Age <=0 OR Expire Date - Current Date <=0} EXPIRATION 36
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Browser limit number of simultaneous synchronous connections to one server (n) DOMAIN SHARDING 37 Client Browser Server time -> GET 200 OK GET 200 OK X n
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Sharding across 2 CNAME aliases will double the parallel download DOMAIN SHARDING 39 Client Browser CNAME2 ->Server time -> GET 200 OK GET 200 OK X n Client Browser CNAME1 ->Server time -> GET 200 OK GET 200 OK X n
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Watch out for the object paths /video/uploads/, /audio/uploads/, /images/uploads/ BAD /uploads/video/, /uploads/audio/, /uploads/image/ GOOD Use wild card patterns (/uploads/*) BUCKET ORGANISATION 44
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Enable logging Store access log file to S3. One bucket per distribution. LOGGING 46
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Tons of log files As traffic levels climb, the number of log files will increase Delayed (24H), missing logs, not in order LOGGING 47
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Quantifying Scalability Tradition Load Testing not useful One Client → Same DNS Request → Same Set of IPs PERFORMANCE TESTING 52
06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Load Testing (Edge Location, EIP) 1.Multiple Client from different geolocations 2.Independent DNS request, different set of IPs 3.Distribute load across set of IPs PERFORMANCE TESTING 53