CloudFront BEST PRACTICES & ANTI-PATTERNS

14,226 views

Published on

CloudFront is a Content Delivery Network (CDN) provided by Amazon Web Services (AWS). It integrates seamlessly with other AWS services.

Agenda of this presentation is
1. CloudFront OVERVIEW
2. CloudFront BEST PRACTICES & ANTI-PATTERNS

This presentation was prepared for AWS Sydney Meetup.

Published in: Technology
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
14,226
On SlideShare
0
From Embeds
0
Number of Embeds
5,668
Actions
Shares
0
Downloads
107
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

CloudFront BEST PRACTICES & ANTI-PATTERNS

  1. 1. CloudFront BEST PRACTICES & ANTI-PATTERNS Abhishek Tiwari @abhishektiwari http://abhishek-tiwari.com Wednesday, 7 August 13
  2. 2. About me Wednesday, 7 August 13
  3. 3. About me Solutions Architect Wednesday, 7 August 13
  4. 4. About me Solutions Architect Early AWS adopter (2007) Wednesday, 7 August 13
  5. 5. About me Solutions Architect Early AWS adopter (2007) Built Cotton On Group’s AWS Infrastructure (2012) Wednesday, 7 August 13
  6. 6. Agenda CloudFront in a nutshell CloudFront Best Practices/Anti-Patterns Wednesday, 7 August 13
  7. 7. CloudFront (CF) Wednesday, 7 August 13
  8. 8. CloudFront (CF) Content Delivery Network Wednesday, 7 August 13
  9. 9. CloudFront (CF) Content Delivery Network Serves Static and Dynamic Content Wednesday, 7 August 13
  10. 10. CloudFront (CF) Content Delivery Network Serves Static and Dynamic Content Global, Redundant, Scalable Wednesday, 7 August 13
  11. 11. CloudFront (CF) Content Delivery Network Serves Static and Dynamic Content Global, Redundant, Scalable Low Latency, High Bandwidth Wednesday, 7 August 13
  12. 12. CloudFront (CF) Content Delivery Network Serves Static and Dynamic Content Global, Redundant, Scalable Low Latency, High Bandwidth Cost Effective: Transparent, PAYG, Price Classes Wednesday, 7 August 13
  13. 13. CloudFront (CF) Content Delivery Network Serves Static and Dynamic Content Global, Redundant, Scalable Low Latency, High Bandwidth Cost Effective: Transparent, PAYG, Price Classes NO Edge Side Includes (ESI) Wednesday, 7 August 13
  14. 14. CF Concepts Wednesday, 7 August 13
  15. 15. CF Concepts Distribution Wednesday, 7 August 13
  16. 16. CF Concepts Distribution Delivery Method (Download or Streaming) Wednesday, 7 August 13
  17. 17. CF Concepts Distribution Delivery Method (Download or Streaming) CNAME Aliases (1-10) Wednesday, 7 August 13
  18. 18. CF Concepts Distribution Delivery Method (Download or Streaming) CNAME Aliases (1-10) Origin Server/s (M:M) Wednesday, 7 August 13
  19. 19. CF Concepts Distribution Delivery Method (Download or Streaming) CNAME Aliases (1-10) Origin Server/s (M:M) Domain Name, Origin ID, Origin Protocol Wednesday, 7 August 13
  20. 20. CF Concepts Distribution Delivery Method (Download or Streaming) CNAME Aliases (1-10) Origin Server/s (M:M) Domain Name, Origin ID, Origin Protocol Object/s (Object Path/Cache Key) Wednesday, 7 August 13
  21. 21. CF Concepts Distribution Delivery Method (Download or Streaming) CNAME Aliases (1-10) Origin Server/s (M:M) Domain Name, Origin ID, Origin Protocol Object/s (Object Path/Cache Key) Cache Behavior/s (1-10, 1:1, Ordered) Wednesday, 7 August 13
  22. 22. CF Concepts Distribution Delivery Method (Download or Streaming) CNAME Aliases (1-10) Origin Server/s (M:M) Domain Name, Origin ID, Origin Protocol Object/s (Object Path/Cache Key) Cache Behavior/s (1-10, 1:1, Ordered) Path Patterns, Origin ID, Viewer Protocol, Minimum TTL, Cookies/ Query String Forwarding Wednesday, 7 August 13
  23. 23. CF Concepts Distribution Delivery Method (Download or Streaming) CNAME Aliases (1-10) Origin Server/s (M:M) Domain Name, Origin ID, Origin Protocol Object/s (Object Path/Cache Key) Cache Behavior/s (1-10, 1:1, Ordered) Path Patterns, Origin ID, Viewer Protocol, Minimum TTL, Cookies/ Query String Forwarding Edge Location (42+) Wednesday, 7 August 13
  24. 24. CF Concepts Distribution Delivery Method (Download or Streaming) CNAME Aliases (1-10) Origin Server/s (M:M) Domain Name, Origin ID, Origin Protocol Object/s (Object Path/Cache Key) Cache Behavior/s (1-10, 1:1, Ordered) Path Patterns, Origin ID, Viewer Protocol, Minimum TTL, Cookies/ Query String Forwarding Edge Location (42+) Viewer (GET, Range GET, HEAD Requests) Wednesday, 7 August 13
  25. 25. CF Concepts http://mycontent.cloudfront.net/photos/profile.png Cache Key: photos/profile.png (Same for HTTP/HTTPS) Cache Key: object path relative to origin + forwarded query string/cookies Wednesday, 7 August 13
  26. 26. CF Concepts Dynamic Content http://mycontent.cloudfront.net/photos/profile.png Cache Key: photos/profile.png (Same for HTTP/HTTPS) Cache Key: object path relative to origin + forwarded query string/cookies Wednesday, 7 August 13
  27. 27. CF Concepts Dynamic Content Static Content http://mycontent.cloudfront.net/photos/profile.png Cache Key: photos/profile.png (Same for HTTP/HTTPS) Cache Key: object path relative to origin + forwarded query string/cookies Wednesday, 7 August 13
  28. 28. How it works 1. Client request file 2. If file in cache CF return file Nearest Edge Location a. If file not in cache, CF request to origin b. Origin returns file, status 200, cached in CF 1. Client request file 2. If file in cache CF return file Nearest Edge Location a. If file in cache but expired, CF request to origin b. Origin returns 304, CF keeps file in cache Routing based on low latency/price class Routing based on low latency/price class Condition GET Wednesday, 7 August 13
  29. 29. Distribution Wednesday, 7 August 13
  30. 30. Distribution Download Distribution Wednesday, 7 August 13
  31. 31. Distribution Download Distribution Viewer Protocol HTTP/HTTPS Wednesday, 7 August 13
  32. 32. Distribution Download Distribution Viewer Protocol HTTP/HTTPS Origin: S3 or Custom Wednesday, 7 August 13
  33. 33. Distribution Download Distribution Viewer Protocol HTTP/HTTPS Origin: S3 or Custom Cookies/Query String Forwarding Wednesday, 7 August 13
  34. 34. Distribution Download Distribution Viewer Protocol HTTP/HTTPS Origin: S3 or Custom Cookies/Query String Forwarding Streaming Distribution Wednesday, 7 August 13
  35. 35. Distribution Download Distribution Viewer Protocol HTTP/HTTPS Origin: S3 or Custom Cookies/Query String Forwarding Streaming Distribution Viewer Protocol: Adobe RTMP Wednesday, 7 August 13
  36. 36. Distribution Download Distribution Viewer Protocol HTTP/HTTPS Origin: S3 or Custom Cookies/Query String Forwarding Streaming Distribution Viewer Protocol: Adobe RTMP Origin: S3 only (No Custom) Wednesday, 7 August 13
  37. 37. Distribution Download Distribution Viewer Protocol HTTP/HTTPS Origin: S3 or Custom Cookies/Query String Forwarding Streaming Distribution Viewer Protocol: Adobe RTMP Origin: S3 only (No Custom) Dynamic/Adoptive Streaming (Adjust bit rate during playback) Wednesday, 7 August 13
  38. 38. Query String Forwarding Wednesday, 7 August 13
  39. 39. Query String Forwarding Forward query string to origin Wednesday, 7 August 13
  40. 40. Query String Forwarding Forward query string to origin Multiple parameters, order/case sensitive Wednesday, 7 August 13
  41. 41. Query String Forwarding Forward query string to origin Multiple parameters, order/case sensitive Order sensitive: Two objects in CF Wednesday, 7 August 13
  42. 42. Query String Forwarding Forward query string to origin Multiple parameters, order/case sensitive Order sensitive: Two objects in CF http://d111111abcdef8.cloudfront.net/images/image.jpg?height=a&width=b Wednesday, 7 August 13
  43. 43. Query String Forwarding Forward query string to origin Multiple parameters, order/case sensitive Order sensitive: Two objects in CF http://d111111abcdef8.cloudfront.net/images/image.jpg?height=a&width=b http://d111111abcdef8.cloudfront.net/images/image.jpg?width=b&height=a Wednesday, 7 August 13
  44. 44. Query String Forwarding Forward query string to origin Multiple parameters, order/case sensitive Order sensitive: Two objects in CF http://d111111abcdef8.cloudfront.net/images/image.jpg?height=a&width=b http://d111111abcdef8.cloudfront.net/images/image.jpg?width=b&height=a Case sensitive: Two objects in CF Wednesday, 7 August 13
  45. 45. Query String Forwarding Forward query string to origin Multiple parameters, order/case sensitive Order sensitive: Two objects in CF http://d111111abcdef8.cloudfront.net/images/image.jpg?height=a&width=b http://d111111abcdef8.cloudfront.net/images/image.jpg?width=b&height=a Case sensitive: Two objects in CF http://d111111abcdef8.cloudfront.net/images/image.jpg?type=png Wednesday, 7 August 13
  46. 46. Query String Forwarding Forward query string to origin Multiple parameters, order/case sensitive Order sensitive: Two objects in CF http://d111111abcdef8.cloudfront.net/images/image.jpg?height=a&width=b http://d111111abcdef8.cloudfront.net/images/image.jpg?width=b&height=a Case sensitive: Two objects in CF http://d111111abcdef8.cloudfront.net/images/image.jpg?type=png http://d111111abcdef8.cloudfront.net/images/image.jpg?type=PNG Wednesday, 7 August 13
  47. 47. Cookies Forwarding Wednesday, 7 August 13
  48. 48. Cookies Forwarding Forwarded cookies (FC): NV pairs, not attributes Wednesday, 7 August 13
  49. 49. Cookies Forwarding Forwarded cookies (FC): NV pairs, not attributes If choose to forward cookies to origin, Wednesday, 7 August 13
  50. 50. Cookies Forwarding Forwarded cookies (FC): NV pairs, not attributes If choose to forward cookies to origin, Can forward all cookies, OR Wednesday, 7 August 13
  51. 51. Cookies Forwarding Forwarded cookies (FC): NV pairs, not attributes If choose to forward cookies to origin, Can forward all cookies, OR Only specified cookies Wednesday, 7 August 13
  52. 52. Cookies Forwarding Forwarded cookies (FC): NV pairs, not attributes If choose to forward cookies to origin, Can forward all cookies, OR Only specified cookies Object path+FC uniquely identify in CF Wednesday, 7 August 13
  53. 53. Cookies Forwarding Forwarded cookies (FC): NV pairs, not attributes If choose to forward cookies to origin, Can forward all cookies, OR Only specified cookies Object path+FC uniquely identify in CF NV pair/Case sensitive Wednesday, 7 August 13
  54. 54. Origin Wednesday, 7 August 13
  55. 55. Origin S3 Origin: Best for Static media content (Image, Video, Audio) Wednesday, 7 August 13
  56. 56. Origin S3 Origin: Best for Static media content (Image, Video, Audio) Custom Origin: Best for Static application content (JS, CSS, Fonts) Wednesday, 7 August 13
  57. 57. Origin S3 Origin: Best for Static media content (Image, Video, Audio) Custom Origin: Best for Static application content (JS, CSS, Fonts) Custom Origin: Best for Dynamic media content (HTML, Thumbnails) Wednesday, 7 August 13
  58. 58. Make a note Wednesday, 7 August 13
  59. 59. Make a note Eventual Consistency Wednesday, 7 August 13
  60. 60. Make a note Eventual Consistency 10 Origin Servers per CF Distribution Wednesday, 7 August 13
  61. 61. Make a note Eventual Consistency 10 Origin Servers per CF Distribution 10 Cache Behavior per CF Distribution Wednesday, 7 August 13
  62. 62. Make a note Eventual Consistency 10 Origin Servers per CF Distribution 10 Cache Behavior per CF Distribution 10 CNAME per CF Distribution Wednesday, 7 August 13
  63. 63. Make a note Eventual Consistency 10 Origin Servers per CF Distribution 10 Cache Behavior per CF Distribution 10 CNAME per CF Distribution 10 Cookies forwarded per Cache Behavior Wednesday, 7 August 13
  64. 64. Best Practices Wednesday, 7 August 13
  65. 65. Best Practices Versioning Wednesday, 7 August 13
  66. 66. Best Practices Versioning Compression Wednesday, 7 August 13
  67. 67. Best Practices Versioning Compression Domain Sharding Wednesday, 7 August 13
  68. 68. Best Practices Versioning Compression Domain Sharding Expiration Wednesday, 7 August 13
  69. 69. Best Practices Versioning Compression Domain Sharding Expiration Bucket Organization Wednesday, 7 August 13
  70. 70. Best Practices Versioning Compression Domain Sharding Expiration Bucket Organization Logging Wednesday, 7 August 13
  71. 71. Best Practices Versioning Compression Domain Sharding Expiration Bucket Organization Logging Performance Testing Wednesday, 7 August 13
  72. 72. Anti-Patterns Cache Invalidation Wednesday, 7 August 13
  73. 73. Cache Invalidation Wednesday, 7 August 13
  74. 74. Cache Invalidation Programmatic Cache Invalidation Wednesday, 7 August 13
  75. 75. Cache Invalidation Programmatic Cache Invalidation Cache Invalidation is expensive Wednesday, 7 August 13
  76. 76. Cache Invalidation Programmatic Cache Invalidation Cache Invalidation is expensive Unmanageable if you have object dependencies Wednesday, 7 August 13
  77. 77. Cache Invalidation Programmatic Cache Invalidation Cache Invalidation is expensive Unmanageable if you have object dependencies 3 invalidation requests at any given time Wednesday, 7 August 13
  78. 78. Cache Invalidation Programmatic Cache Invalidation Cache Invalidation is expensive Unmanageable if you have object dependencies 3 invalidation requests at any given time Each invalidation request can included maximum of 1000 files Wednesday, 7 August 13
  79. 79. Cache Invalidation Wednesday, 7 August 13
  80. 80. Cache Invalidation Invalidation takes time to propagate across all edge locations (5-15 minutes) Wednesday, 7 August 13
  81. 81. Cache Invalidation Invalidation takes time to propagate across all edge locations (5-15 minutes) Deal breaker: browser cache Wednesday, 7 August 13
  82. 82. Cache Invalidation Invalidation takes time to propagate across all edge locations (5-15 minutes) Deal breaker: browser cache Versioning is best way to avoid the invalidation related issues Wednesday, 7 August 13
  83. 83. Versioning Wednesday, 7 August 13
  84. 84. Versioning CF relies on Origin Servers for versioning Wednesday, 7 August 13
  85. 85. Versioning CF relies on Origin Servers for versioning S3 supports versioning Wednesday, 7 August 13
  86. 86. Versioning CF relies on Origin Servers for versioning S3 supports versioning Version enabled Custom Origin Wednesday, 7 August 13
  87. 87. Versioning Wednesday, 7 August 13
  88. 88. Versioning Versioning using query strings Wednesday, 7 August 13
  89. 89. Versioning Versioning using query strings File name plus query string with version /static/profile.png?versionID=123 Wednesday, 7 August 13
  90. 90. Versioning Versioning using query strings File name plus query string with version /static/profile.png?versionID=123 Versioning using content based hash key Wednesday, 7 August 13
  91. 91. Versioning Versioning using query strings File name plus query string with version /static/profile.png?versionID=123 Versioning using content based hash key File name as unique key based on file content /static/712vds57tr18929812312enb.png Wednesday, 7 August 13
  92. 92. Versioning Versioning using query strings File name plus query string with version /static/profile.png?versionID=123 Versioning using content based hash key File name as unique key based on file content /static/712vds57tr18929812312enb.png Versioning using prefix/suffix Wednesday, 7 August 13
  93. 93. Versioning Versioning using query strings File name plus query string with version /static/profile.png?versionID=123 Versioning using content based hash key File name as unique key based on file content /static/712vds57tr18929812312enb.png Versioning using prefix/suffix File name with version prefix/suffix /static/profile_123.png Wednesday, 7 August 13
  94. 94. Versioning Versioning using query strings File name plus query string with version /static/profile.png?versionID=123 Versioning using content based hash key File name as unique key based on file content /static/712vds57tr18929812312enb.png Versioning using prefix/suffix File name with version prefix/suffix /static/profile_123.png File name with version prefix/suffix /static/profile_ 712vds57tr18929812312enb.png Wednesday, 7 August 13
  95. 95. Versioning Versioning using query strings File name plus query string with version /static/profile.png?versionID=123 Versioning using content based hash key File name as unique key based on file content /static/712vds57tr18929812312enb.png Versioning using prefix/suffix File name with version prefix/suffix /static/profile_123.png File name with version prefix/suffix /static/profile_ 712vds57tr18929812312enb.png You can use a mixed versioning approach Wednesday, 7 August 13
  96. 96. Versioning using query strings Wednesday, 7 August 13
  97. 97. Versioning using query strings CF supports versioning using query strings forwarding Wednesday, 7 August 13
  98. 98. Versioning using query strings CF supports versioning using query strings forwarding Versioning enabled Origin (Custom/S3) Wednesday, 7 August 13
  99. 99. Versioning using query strings CF supports versioning using query strings forwarding Versioning enabled Origin (Custom/S3) For S3 Content Wednesday, 7 August 13
  100. 100. Versioning using query strings CF supports versioning using query strings forwarding Versioning enabled Origin (Custom/S3) For S3 Content On object upload version enabled S3 bucket will return x-amz-version-id Wednesday, 7 August 13
  101. 101. Versioning using query strings CF supports versioning using query strings forwarding Versioning enabled Origin (Custom/S3) For S3 Content On object upload version enabled S3 bucket will return x-amz-version-id profile.png Wednesday, 7 August 13
  102. 102. Versioning using query strings CF supports versioning using query strings forwarding Versioning enabled Origin (Custom/S3) For S3 Content On object upload version enabled S3 bucket will return x-amz-version-id profile.png Upload to S3 Wednesday, 7 August 13
  103. 103. Versioning using query strings CF supports versioning using query strings forwarding Versioning enabled Origin (Custom/S3) For S3 Content On object upload version enabled S3 bucket will return x-amz-version-id profile.png Upload to S3 static/images/profile.png Wednesday, 7 August 13
  104. 104. Versioning using query strings CF supports versioning using query strings forwarding Versioning enabled Origin (Custom/S3) For S3 Content On object upload version enabled S3 bucket will return x-amz-version-id profile.png Upload to S3 static/images/profile.png Return x-amz-version-id Wednesday, 7 August 13
  105. 105. Versioning using query strings CF supports versioning using query strings forwarding Versioning enabled Origin (Custom/S3) For S3 Content On object upload version enabled S3 bucket will return x-amz-version-id profile.png Upload to S3 static/images/profile.png Return x-amz-version-id static/images/profile.png? versionId=644c69e148 Wednesday, 7 August 13
  106. 106. Versioning using query strings Wednesday, 7 August 13
  107. 107. Versioning using query strings Versionify Application content Wednesday, 7 August 13
  108. 108. Versioning using query strings Versionify Application content Use Build Number or Hash of GIT/HG Head Wednesday, 7 August 13
  109. 109. Versioning using query strings Versionify Application content Use Build Number or Hash of GIT/HG Head photo.css, app.css, profile.css photo.js, app.js, profile.js Wednesday, 7 August 13
  110. 110. Versioning using query strings Versionify Application content Use Build Number or Hash of GIT/HG Head photo.css, app.css, profile.css photo.js, app.js, profile.js Minify+Combine Wednesday, 7 August 13
  111. 111. Versioning using query strings Versionify Application content Use Build Number or Hash of GIT/HG Head photo.css, app.css, profile.css photo.js, app.js, profile.js Minify+Combine main.css main.js Wednesday, 7 August 13
  112. 112. Versioning using query strings Versionify Application content Use Build Number or Hash of GIT/HG Head photo.css, app.css, profile.css photo.js, app.js, profile.js Minify+Combine main.css main.js Versionify Wednesday, 7 August 13
  113. 113. Versioning using query strings Versionify Application content Use Build Number or Hash of GIT/HG Head photo.css, app.css, profile.css photo.js, app.js, profile.js Minify+Combine main.css main.js Versionify main.css?v=468df6b main.js?v=468df6b Wednesday, 7 August 13
  114. 114. Versioning using query strings Wednesday, 7 August 13
  115. 115. Versioning using content based hash key Wednesday, 7 August 13
  116. 116. Versioning using content based hash key File name is an unique hash key generated from file content (MD5) Wednesday, 7 August 13
  117. 117. Versioning using content based hash key File name is an unique hash key generated from file content (MD5) For S3 content Wednesday, 7 August 13
  118. 118. Versioning using content based hash key File name is an unique hash key generated from file content (MD5) For S3 content Before uploading to S3 generate MD5 hash for file Wednesday, 7 August 13
  119. 119. Versioning using content based hash key File name is an unique hash key generated from file content (MD5) For S3 content Before uploading to S3 generate MD5 hash for file Use hash as file name to upload on S3 Wednesday, 7 August 13
  120. 120. Versioning using content based hash key File name is an unique hash key generated from file content (MD5) For S3 content Before uploading to S3 generate MD5 hash for file Use hash as file name to upload on S3 Avoid content duplication by comparing MD5 hashes Wednesday, 7 August 13
  121. 121. Versioning using content based hash key File name is an unique hash key generated from file content (MD5) For S3 content Before uploading to S3 generate MD5 hash for file Use hash as file name to upload on S3 Avoid content duplication by comparing MD5 hashes profile.jpg Wednesday, 7 August 13
  122. 122. Versioning using content based hash key File name is an unique hash key generated from file content (MD5) For S3 content Before uploading to S3 generate MD5 hash for file Use hash as file name to upload on S3 Avoid content duplication by comparing MD5 hashes profile.jpg MD5 Hash File Name Wednesday, 7 August 13
  123. 123. Versioning using content based hash key File name is an unique hash key generated from file content (MD5) For S3 content Before uploading to S3 generate MD5 hash for file Use hash as file name to upload on S3 Avoid content duplication by comparing MD5 hashes profile.jpg MD5 Hash File Name b723eh0f0df.png Wednesday, 7 August 13
  124. 124. Versioning using content based hash key File name is an unique hash key generated from file content (MD5) For S3 content Before uploading to S3 generate MD5 hash for file Use hash as file name to upload on S3 Avoid content duplication by comparing MD5 hashes profile.jpg MD5 Hash File Name b723eh0f0df.png Upload to S3 Wednesday, 7 August 13
  125. 125. Versioning using content based hash key File name is an unique hash key generated from file content (MD5) For S3 content Before uploading to S3 generate MD5 hash for file Use hash as file name to upload on S3 Avoid content duplication by comparing MD5 hashes profile.jpg MD5 Hash File Name b723eh0f0df.png Upload to S3 static/images/b723eh0f0df.png Wednesday, 7 August 13
  126. 126. Versioning using content based hash key Wednesday, 7 August 13
  127. 127. Versioning using content based hash key For application content use a pipeline Wednesday, 7 August 13
  128. 128. Versioning using content based hash key For application content use a pipeline file names generated using MD5 hash of file content Wednesday, 7 August 13
  129. 129. Versioning using content based hash key For application content use a pipeline file names generated using MD5 hash of file content photo.css, app.css, profile.css photo.js, app.js, profile.js Wednesday, 7 August 13
  130. 130. Versioning using content based hash key For application content use a pipeline file names generated using MD5 hash of file content photo.css, app.css, profile.css photo.js, app.js, profile.js Minify+Combine Wednesday, 7 August 13
  131. 131. Versioning using content based hash key For application content use a pipeline file names generated using MD5 hash of file content photo.css, app.css, profile.css photo.js, app.js, profile.js Minify+Combine main.css main.js Wednesday, 7 August 13
  132. 132. Versioning using content based hash key For application content use a pipeline file names generated using MD5 hash of file content photo.css, app.css, profile.css photo.js, app.js, profile.js Minify+Combine main.css main.js MD5 Hash File Name Wednesday, 7 August 13
  133. 133. Versioning using content based hash key For application content use a pipeline file names generated using MD5 hash of file content photo.css, app.css, profile.css photo.js, app.js, profile.js Minify+Combine main.css main.js MD5 Hash File Name 8972bw7dyf2h.css 67bfwu9hhuw.js Wednesday, 7 August 13
  134. 134. Versioning using content based hash key Wednesday, 7 August 13
  135. 135. Compression Wednesday, 7 August 13
  136. 136. Compression Compressed content is served faster and uses less bandwidth Wednesday, 7 August 13
  137. 137. Compression Compressed content is served faster and uses less bandwidth CF can serve both compressed and uncompressed version of files Wednesday, 7 August 13
  138. 138. Compression Compressed content is served faster and uses less bandwidth CF can serve both compressed and uncompressed version of files Depends on viewer or browser request Wednesday, 7 August 13
  139. 139. Compression Compressed content is served faster and uses less bandwidth CF can serve both compressed and uncompressed version of files Depends on viewer or browser request To receive compressed content browser must include Accept-Encoding: gzip in the request header Wednesday, 7 August 13
  140. 140. Compression Compressed content is served faster and uses less bandwidth CF can serve both compressed and uncompressed version of files Depends on viewer or browser request To receive compressed content browser must include Accept-Encoding: gzip in the request header For compression CF relies on the custom origin servers Wednesday, 7 August 13
  141. 141. Compression Compressed content is served faster and uses less bandwidth CF can serve both compressed and uncompressed version of files Depends on viewer or browser request To receive compressed content browser must include Accept-Encoding: gzip in the request header For compression CF relies on the custom origin servers S3 does not perform the compression Wednesday, 7 August 13
  142. 142. Compression Wednesday, 7 August 13
  143. 143. Compression S3 can store both gzip and non-gzip versions of the file in the same bucket Wednesday, 7 August 13
  144. 144. Compression S3 can store both gzip and non-gzip versions of the file in the same bucket When uploading gzip file to Amazon S3 set Content-Encoding to gzip Wednesday, 7 August 13
  145. 145. Compression S3 can store both gzip and non-gzip versions of the file in the same bucket When uploading gzip file to Amazon S3 set Content-Encoding to gzip On-the-fly compression by custom origin server (Nginx, Apache) Wednesday, 7 August 13
  146. 146. Compression S3 can store both gzip and non-gzip versions of the file in the same bucket When uploading gzip file to Amazon S3 set Content-Encoding to gzip On-the-fly compression by custom origin server (Nginx, Apache) Compress: HTML, CSS, JS etc Wednesday, 7 August 13
  147. 147. Compression S3 can store both gzip and non-gzip versions of the file in the same bucket When uploading gzip file to Amazon S3 set Content-Encoding to gzip On-the-fly compression by custom origin server (Nginx, Apache) Compress: HTML, CSS, JS etc Compress Image: JPEG, WebP (Q= 0-100) Wednesday, 7 August 13
  148. 148. Expiration Wednesday, 7 August 13
  149. 149. Expiration Use one/both of these Wednesday, 7 August 13
  150. 150. Expiration Use one/both of these On Origin server set Cache-Control max-age header Wednesday, 7 August 13
  151. 151. Expiration Use one/both of these On Origin server set Cache-Control max-age header In Cache Behavior set Minimum TTL Wednesday, 7 August 13
  152. 152. Expiration Use one/both of these On Origin server set Cache-Control max-age header In Cache Behavior set Minimum TTL Date header/Age header (RFC 2616) Wednesday, 7 August 13
  153. 153. Expiration Use one/both of these On Origin server set Cache-Control max-age header In Cache Behavior set Minimum TTL Date header/Age header (RFC 2616) Avoid Expire header Wednesday, 7 August 13
  154. 154. Expiration Wednesday, 7 August 13
  155. 155. Expiration Browser cachability issues (known bug) Wednesday, 7 August 13
  156. 156. Expiration Browser cachability issues (known bug) Set Cache-Control max-age or Minimum TTL very far future Wednesday, 7 August 13
  157. 157. Expiration Browser cachability issues (known bug) Set Cache-Control max-age or Minimum TTL very far future Depending on request frequency, CloudFront might remove the object before its expiration Wednesday, 7 August 13
  158. 158. Expiration Browser cachability issues (known bug) Set Cache-Control max-age or Minimum TTL very far future Depending on request frequency, CloudFront might remove the object before its expiration Default expiration 24hrs Wednesday, 7 August 13
  159. 159. Expiration Browser cachability issues (known bug) Set Cache-Control max-age or Minimum TTL very far future Depending on request frequency, CloudFront might remove the object before its expiration Default expiration 24hrs Objects are cached for max {Cache-Control max-age directive, Cache Behavior Minimum TTL} Wednesday, 7 August 13
  160. 160. Domain Sharding Wednesday, 7 August 13
  161. 161. Domain Sharding To increase client side performance Wednesday, 7 August 13
  162. 162. Domain Sharding To increase client side performance On average 100+ resources on an ecommerce page Wednesday, 7 August 13
  163. 163. Domain Sharding To increase client side performance On average 100+ resources on an ecommerce page Browsers limit the number of simultaneous connections to one server Wednesday, 7 August 13
  164. 164. Domain Sharding To increase client side performance On average 100+ resources on an ecommerce page Browsers limit the number of simultaneous connections to one server Hence limit the parallel download from one server Wednesday, 7 August 13
  165. 165. Domain Sharding Wednesday, 7 August 13
  166. 166. Domain Sharding Use two or more CNAME aliases to serve the content from a CF distribution Wednesday, 7 August 13
  167. 167. Domain Sharding Use two or more CNAME aliases to serve the content from a CF distribution Browser treat them as different servers Wednesday, 7 August 13
  168. 168. Domain Sharding Use two or more CNAME aliases to serve the content from a CF distribution Browser treat them as different servers Sharding across 2 CNAME aliases will double the parallel download (Best 2-3) Wednesday, 7 August 13
  169. 169. Domain Sharding Use two or more CNAME aliases to serve the content from a CF distribution Browser treat them as different servers Sharding across 2 CNAME aliases will double the parallel download (Best 2-3) More than 4 CNAME will degrade browser performance (high CPU and memory uses) Wednesday, 7 August 13
  170. 170. Domain Sharding Wednesday, 7 August 13
  171. 171. Domain Sharding Use CF CNAME alias feature Wednesday, 7 August 13
  172. 172. Domain Sharding Use CF CNAME alias feature Use Route 53 for CNAME Aliasing Wednesday, 7 August 13
  173. 173. Domain Sharding Use CF CNAME alias feature Use Route 53 for CNAME Aliasing Custom Wild Card SSL Certificate Wednesday, 7 August 13
  174. 174. Domain Sharding Use CF CNAME alias feature Use Route 53 for CNAME Aliasing Custom Wild Card SSL Certificate On application side: enable CF sharding logic (template compilation etc) Wednesday, 7 August 13
  175. 175. Domain Sharding <span style="width:inherit;"> <a href="http://mysite.com/about"><img src="http://cf.mycloudfront.net/about.jpg" alt=""/></a> </span> <span style="width:inherit;"> <a href="http://mysite.com/blogs"><img src="http://cf.mycloudfront.net/blogs.jpg" alt=""/></a> </span> <span style="width:inherit;"> <a href="http://mysite.com/contact"><img src="http://cf.mycloudfront.net/cont.jpg" alt=""/></a> </span> <span style="width:inherit;"> <a href="http://mysite.com/about"><img src="http://cf1.mycloudfront.net/about.jpg" alt=""/></a> </span> <span style="width:inherit;"> <a href="http://mysite.com/blogs"><img src="http://cf2.mycloudfront.net/blogs.jpg" alt=""/></a> </span> <span style="width:inherit;"> <a href="http://mysite.com/contact"><img src="http://cf1.mycloudfront.net/cont.jpg" alt=""/></ a> </span> <span style="width:inherit;"> <a href="http://mysite.com/about"><img src="{{ CDN_DOMAINS }}/about.jpg" alt=""/></a> </span> <span style="width:inherit;"> <a href="http://mysite.com/blogs"><img src="{{ CDN_DOMAINS }}/blogs.jpg" alt=""/></a> </span> <span style="width:inherit;"> <a href="http://mysite.com/contact"><img src="{{ CDN_DOMAINS }}/cont.jpg" alt=""/></a> </span> <span style="width:inherit;"> <a href="http://mysite.com/about"><img src="http://mysite.com/about.jpg" alt=""/></a> </span> <span style="width:inherit;"> <a href="http://mysite.com/blogs"><img src="http://mysite.com/blogs.jpg" alt=""/></a> </span> <span style="width:inherit;"> <a href="http://mysite.com/contact"><img src="http://mysite.com/cont.jpg" alt=""/></a> </span> CDN with domain shardingCDN without domain sharding HTML Template Without CDN Compiled OR DOM Manipulation Compiled OR DOM Manipulation Wednesday, 7 August 13
  176. 176. Domain Sharding Wednesday, 7 August 13
  177. 177. Domain Sharding Wednesday, 7 August 13
  178. 178. Domain Sharding Apply domain sharding only where it’s needed most Wednesday, 7 August 13
  179. 179. Domain Sharding Apply domain sharding only where it’s needed most Evenly distribute the resources amongst the shards Wednesday, 7 August 13
  180. 180. Domain Sharding Apply domain sharding only where it’s needed most Evenly distribute the resources amongst the shards Consider performance overhead due to the DNS lookup and connection time Wednesday, 7 August 13
  181. 181. Domain Sharding Apply domain sharding only where it’s needed most Evenly distribute the resources amongst the shards Consider performance overhead due to the DNS lookup and connection time Sharding may not be good for Mobile Browsers (CPU, Battery Life) Wednesday, 7 August 13
  182. 182. Bucket Organisation Wednesday, 7 August 13
  183. 183. Bucket Organisation Limited Cache Behavior per CF Distribution Wednesday, 7 August 13
  184. 184. Bucket Organisation Limited Cache Behavior per CF Distribution Plan your bucket organisation (object keys) Wednesday, 7 August 13
  185. 185. Bucket Organisation Limited Cache Behavior per CF Distribution Plan your bucket organisation (object keys) Watch out for the upload paths Wednesday, 7 August 13
  186. 186. Bucket Organisation Limited Cache Behavior per CF Distribution Plan your bucket organisation (object keys) Watch out for the upload paths /video/uploads/, /audio/uploads/, /images/uploads/ BAD Wednesday, 7 August 13
  187. 187. Bucket Organisation Limited Cache Behavior per CF Distribution Plan your bucket organisation (object keys) Watch out for the upload paths /video/uploads/, /audio/uploads/, /images/uploads/ BAD /uploads/video/, /uploads/audio/, /uploads/image/ GOOD Wednesday, 7 August 13
  188. 188. Bucket Organisation Limited Cache Behavior per CF Distribution Plan your bucket organisation (object keys) Watch out for the upload paths /video/uploads/, /audio/uploads/, /images/uploads/ BAD /uploads/video/, /uploads/audio/, /uploads/image/ GOOD Use wild card patterns (/uploads/*) Wednesday, 7 August 13
  189. 189. Logging Wednesday, 7 August 13
  190. 190. Logging Enable logging, store access log file to S3 Wednesday, 7 August 13
  191. 191. Logging Enable logging, store access log file to S3 One log file per distribution Wednesday, 7 August 13
  192. 192. Logging Enable logging, store access log file to S3 One log file per distribution Combine log files and analyze logs (EMR) Wednesday, 7 August 13
  193. 193. Logging Enable logging, store access log file to S3 One log file per distribution Combine log files and analyze logs (EMR) W3C extended log file format Wednesday, 7 August 13
  194. 194. Logging Enable logging, store access log file to S3 One log file per distribution Combine log files and analyze logs (EMR) W3C extended log file format Streaming log vs Download log Wednesday, 7 August 13
  195. 195. Logging Enable logging, store access log file to S3 One log file per distribution Combine log files and analyze logs (EMR) W3C extended log file format Streaming log vs Download log Content Analytics: Popularity, Error etc Wednesday, 7 August 13
  196. 196. Performance Testing Wednesday, 7 August 13
  197. 197. Performance Testing Tradition Load Testing not useful Wednesday, 7 August 13
  198. 198. Performance Testing Tradition Load Testing not useful Same DNS request, same set of IPs Wednesday, 7 August 13
  199. 199. Performance Testing Tradition Load Testing not useful Same DNS request, same set of IPs Backbone Testing (Ideal Word) Wednesday, 7 August 13
  200. 200. Performance Testing Tradition Load Testing not useful Same DNS request, same set of IPs Backbone Testing (Ideal Word) CDN Server → Backbone Wednesday, 7 August 13
  201. 201. Performance Testing Tradition Load Testing not useful Same DNS request, same set of IPs Backbone Testing (Ideal Word) CDN Server → Backbone Last Mile (Real World, User Experience) Wednesday, 7 August 13
  202. 202. Performance Testing Tradition Load Testing not useful Same DNS request, same set of IPs Backbone Testing (Ideal Word) CDN Server → Backbone Last Mile (Real World, User Experience) CDN Server → Backbone → Device Wednesday, 7 August 13
  203. 203. Performance Testing Tradition Load Testing not useful Same DNS request, same set of IPs Backbone Testing (Ideal Word) CDN Server → Backbone Last Mile (Real World, User Experience) CDN Server → Backbone → Device 3rd party service (Gomez), application monitor Wednesday, 7 August 13
  204. 204. Performance Testing Tradition Load Testing not useful Same DNS request, same set of IPs Backbone Testing (Ideal Word) CDN Server → Backbone Last Mile (Real World, User Experience) CDN Server → Backbone → Device 3rd party service (Gomez), application monitor Load Testing (Edge Location, Elastic IP Aware) Wednesday, 7 August 13
  205. 205. Performance Testing Tradition Load Testing not useful Same DNS request, same set of IPs Backbone Testing (Ideal Word) CDN Server → Backbone Last Mile (Real World, User Experience) CDN Server → Backbone → Device 3rd party service (Gomez), application monitor Load Testing (Edge Location, Elastic IP Aware) Clients request from different geolocations Wednesday, 7 August 13
  206. 206. Performance Testing Tradition Load Testing not useful Same DNS request, same set of IPs Backbone Testing (Ideal Word) CDN Server → Backbone Last Mile (Real World, User Experience) CDN Server → Backbone → Device 3rd party service (Gomez), application monitor Load Testing (Edge Location, Elastic IP Aware) Clients request from different geolocations Independent DNS request, different set of IPs Wednesday, 7 August 13
  207. 207. Performance Testing Tradition Load Testing not useful Same DNS request, same set of IPs Backbone Testing (Ideal Word) CDN Server → Backbone Last Mile (Real World, User Experience) CDN Server → Backbone → Device 3rd party service (Gomez), application monitor Load Testing (Edge Location, Elastic IP Aware) Clients request from different geolocations Independent DNS request, different set of IPs Distribute load across set of IPs Wednesday, 7 August 13
  208. 208. Thank You Q & A Wednesday, 7 August 13

×