Slide 1

Slide 1 text

BEST PRACTICES & ANTI- PATTERNS
 CLOUDFRONT

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS AGENDA • CloudFront in a nutshell • CloudFront Best Practices/Anti-Patterns 3

Slide 4

Slide 4 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 01 Content Delivery Network Serves Static and Dynamic Content 4 CLOUDFRONT

Slide 5

Slide 5 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 01 Global, Redundant, Scalable Low Latency, High Bandwidth Applications 5 CLOUDFRONT

Slide 6

Slide 6 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 01 Cost Effective Transparent, PAYG, Price Classes 6 CLOUDFRONT

Slide 7

Slide 7 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 01 Wish list Edge Side Includes and Reporting 7 CLOUDFRONT

Slide 8

Slide 8 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS MINIMUM TTL REQUESTS PROTOCOL VIEWER COOKIES & QUERY STRING FORWARDING PATH PATTERNS CNAME ALIASES CACHE BEHAVIORS STREAMING DISTRIBUTION DELIVERY METHOD ORIGIN SERVER DOMAIN NAME OBJECTS OBJECT PATH/ CACHE KEY ORIGIN PROTOCOL DOWNLOAD CLOUDFRONT (CF) CONCEPTS 8 [1-10, ORDERED] [M:M] [1:1] [1-10]

Slide 9

Slide 9 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 9 CloudFront Distribution Origin Servers Cache Behavior S3 Bucket with images S3 Bucket with photos EC2 Instance default (*) photos(photos/*) thumbnail(thumbnail/*) Cached objects with cache key Edge Locations Viewer Client Browser Cache key = Object path relative to origin + forwarded query string/cookies From nearest edge location GET http://my.cloudfront.net/photos/profile.png Returns object with matching cache key photos/profile.png Cached Etag, Date, LastModified for each objects http:/// 01 CLOUDFRONT (CF) CONCEPTS

Slide 10

Slide 10 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 9 CloudFront Distribution Origin Servers Cache Behavior S3 Bucket with images S3 Bucket with photos EC2 Instance default (*) photos(photos/*) thumbnail(thumbnail/*) Cached objects with cache key Edge Locations Viewer Client Browser Cache key = Object path relative to origin + forwarded query string/cookies From nearest edge location GET http://my.cloudfront.net/photos/profile.png Returns object with matching cache key photos/profile.png Cached Etag, Date, LastModified for each objects http:/// Custom Origin Dynamic Content S3 Origin Static Content 01 CLOUDFRONT (CF) CONCEPTS

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Cache invalidation ANTI-PATTERNS 12

Slide 14

Slide 14 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 13 02 BEST PRACTICES

Slide 15

Slide 15 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 1. Versioning 13 02 BEST PRACTICES

Slide 16

Slide 16 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 1. Versioning 2. Compression 13 02 BEST PRACTICES

Slide 17

Slide 17 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 1. Versioning 2. Compression 3. Domain Sharding 13 02 BEST PRACTICES

Slide 18

Slide 18 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 1. Versioning 2. Compression 3. Domain Sharding 4. Expiration 13 02 BEST PRACTICES

Slide 19

Slide 19 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 1. Versioning 2. Compression 3. Domain Sharding 4. Expiration 5. Bucket Organization 13 02 BEST PRACTICES

Slide 20

Slide 20 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 1. Versioning 2. Compression 3. Domain Sharding 4. Expiration 5. Bucket Organization 6. Logging 13 02 BEST PRACTICES

Slide 21

Slide 21 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 1. Versioning 2. Compression 3. Domain Sharding 4. Expiration 5. Bucket Organization 6. Logging 7. Performance Testing 13 02 BEST PRACTICES

Slide 22

Slide 22 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Expensive Unmanageable if you have object dependencies CACHE INVALIDATION 14

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Eventual Consistency Invalidation takes time to propagate across all edge locations CACHE INVALIDATION 16

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Requires Versioning enabled Origin (Custom/S3) VERSIONING 19

Slide 28

Slide 28 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS UPLOAD TO S3 STATIC/IMAGES/PROFILE.PNG PROFILE.PNG RETURN X-AMZ-VERSION-ID = 644C69E1 CF KEY STATIC/IMAGES/PROFILE.PNG? VERSIONID=644C69E1 VERSIONED ENABLED S3 CONTENT 20 02

Slide 29

Slide 29 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS MINIFY+COMBINE MAIN.CSS MAIN.JS CSS AND JS PHOTO.CSS, APP.CSS, PROFILE.CSS PHOTO.JS, APP.JS, PROFILE.JS VERSIONIFY BUILD NUMBER OR HASH OF GIT/HG HEAD CF KEY MAIN.CSS?V=468DF6B MAIN.JS?V=468DF6B VERSIONIFY APPLICATION CONTENT 21 02

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS MINIFY+COMBINE STATIC/MAIN.CSS STATIC/MAIN.JS CSS AND JS PHOTO.CSS, APP.CSS, PROFILE.CSS PHOTO.JS, APP.JS, PROFILE.JS MD5 HASH OF FILE CONTENT AS FILE NAMES STATIC/8972BW7DYF2H.CSS STATIC/67BFWU9HHUW.JS CF KEY STATIC/8972BW7DYF2H.CSS STATIC/67BFWU9HHUW.JS VERSIONIFY APPLICATION CONTENT 24 02

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Compressed content is served faster and uses less bandwidth COMPRESSION 26

Slide 35

Slide 35 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Can serve both compressed and uncompressed version of files COMPRESSION 27

Slide 36

Slide 36 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 For compression CF relies on the origin servers (Custom vs S3) COMPRESSION 28

Slide 37

Slide 37 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 55 Viewer request To receive compressed content browser request must include Accept-Encoding: gzip COMPRESSION 29

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 When uploading gzip file to S3 set Content-Encoding to gzip COMPRESSION 31

Slide 40

Slide 40 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 HTML, CSS, JS etc On-the-fly compression by custom origin server (Nginx, Apache) COMPRESSION 32

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Default expiration 24hrs Set Cache-Control max-age or Minimum TTL very far future max {Cache-Control max-age directive, Cache Behavior Minimum TTL} EXPIRATION 34

Slide 43

Slide 43 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Depending on request frequency, CloudFront might remove the object before its expiration EXPIRATION 35

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Browser treat CNAM aliases as different servers Bypass parallel download limit using 2 or more CNAM aliases Route 53, Wild Card CNAME, Custom SSL DOMAIN SHARDING 38

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 On application side Enable CF sharding logic (template compilation etc) DOMAIN SHARDING 40

Slide 49

Slide 49 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 41 CDN with domain sharding CDN without domain sharding HTML Template Without CDN Compiled OR DOM Manipulation Compiled OR DOM Manipulation

Slide 50

Slide 50 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Performance Considerations •When to shard? •DNS lookup, Connection time, Evenly distribute •Mobile browsers, Network congestion, Battery Life •SPDY (HTTP MULTIPLEXING) DOMAIN SHARDING 42

Slide 51

Slide 51 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Limited Cache Behavior Plan your bucket organisation (object keys) BUCKET ORGANISATION 43

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Reporting non-existence •Object/Content Popularity Report •Cache Hit Ratio •Edge Location Report •Error Report •Mapping Geo-IP and Geo-location LOGGING 45

Slide 54

Slide 54 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Enable logging Store access log file to S3. One bucket per distribution. LOGGING 46

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Combine log files and analyze Using EMR (Custom scripts, CloudFront LogAnalyzer, EmrEtlRunner) LOGGING 48

Slide 57

Slide 57 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Measuring Latency Delay in DNS resolution and content delivery PERFORMANCE TESTING 49

Slide 58

Slide 58 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Backbone Testing (Ideal Word) Measuring latency from CDN Server → Backbone PERFORMANCE TESTING 50

Slide 59

Slide 59 text

06-11-2013 @ABHISHEKTIWARI | CLOUDFRONT BEST PRACTICES & ANTI-PATTERNS 02 Last Mile Testing (Real World) Measuring latency from CDN Server → Backbone → Device 3rd party service (Gomez), Application instrument PERFORMANCE TESTING 51

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

Q & A THANK YOU http://bit.ly/abhishektiwari http://abhishek-tiwari.com