Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CloudFront BEST PRACTICES & ANTI-PATTERNS

CloudFront BEST PRACTICES & ANTI-PATTERNS

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.

Abhishek Tiwari

August 07, 2013
Tweet

More Decks by Abhishek Tiwari

Other Decks in Technology

Transcript

  1. CloudFront
    BEST PRACTICES & ANTI-PATTERNS
    Abhishek Tiwari
    @abhishektiwari
    http:/
    /abhishek-tiwari.com
    Wednesday, 7 August 13

    View full-size slide

  2. About me
    Wednesday, 7 August 13

    View full-size slide

  3. About me
    Solutions Architect
    Wednesday, 7 August 13

    View full-size slide

  4. About me
    Solutions Architect
    Early AWS adopter (2007)
    Wednesday, 7 August 13

    View full-size slide

  5. About me
    Solutions Architect
    Early AWS adopter (2007)
    Built Cotton On Group’s AWS
    Infrastructure (2012)
    Wednesday, 7 August 13

    View full-size slide

  6. Agenda
    CloudFront in a nutshell
    CloudFront Best Practices/Anti-Patterns
    Wednesday, 7 August 13

    View full-size slide

  7. CloudFront (CF)
    Wednesday, 7 August 13

    View full-size slide

  8. CloudFront (CF)
    Content Delivery Network
    Wednesday, 7 August 13

    View full-size slide

  9. CloudFront (CF)
    Content Delivery Network
    Serves Static and Dynamic Content
    Wednesday, 7 August 13

    View full-size slide

  10. CloudFront (CF)
    Content Delivery Network
    Serves Static and Dynamic Content
    Global, Redundant, Scalable
    Wednesday, 7 August 13

    View full-size slide

  11. CloudFront (CF)
    Content Delivery Network
    Serves Static and Dynamic Content
    Global, Redundant, Scalable
    Low Latency, High Bandwidth
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  14. CF Concepts
    Wednesday, 7 August 13

    View full-size slide

  15. CF Concepts
    Distribution
    Wednesday, 7 August 13

    View full-size slide

  16. CF Concepts
    Distribution
    Delivery Method (Download or Streaming)
    Wednesday, 7 August 13

    View full-size slide

  17. CF Concepts
    Distribution
    Delivery Method (Download or Streaming)
    CNAME Aliases (1-10)
    Wednesday, 7 August 13

    View full-size slide

  18. CF Concepts
    Distribution
    Delivery Method (Download or Streaming)
    CNAME Aliases (1-10)
    Origin Server/s (M:M)
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  29. Distribution
    Wednesday, 7 August 13

    View full-size slide

  30. Distribution
    Download Distribution
    Wednesday, 7 August 13

    View full-size slide

  31. Distribution
    Download Distribution
    Viewer Protocol HTTP/HTTPS
    Wednesday, 7 August 13

    View full-size slide

  32. Distribution
    Download Distribution
    Viewer Protocol HTTP/HTTPS
    Origin: S3 or Custom
    Wednesday, 7 August 13

    View full-size slide

  33. Distribution
    Download Distribution
    Viewer Protocol HTTP/HTTPS
    Origin: S3 or Custom
    Cookies/Query String Forwarding
    Wednesday, 7 August 13

    View full-size slide

  34. Distribution
    Download Distribution
    Viewer Protocol HTTP/HTTPS
    Origin: S3 or Custom
    Cookies/Query String Forwarding
    Streaming Distribution
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  38. Query String Forwarding
    Wednesday, 7 August 13

    View full-size slide

  39. Query String Forwarding
    Forward query string to origin
    Wednesday, 7 August 13

    View full-size slide

  40. Query String Forwarding
    Forward query string to origin
    Multiple parameters, order/case sensitive
    Wednesday, 7 August 13

    View full-size slide

  41. Query String Forwarding
    Forward query string to origin
    Multiple parameters, order/case sensitive
    Order sensitive: Two objects in CF
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  47. Cookies Forwarding
    Wednesday, 7 August 13

    View full-size slide

  48. Cookies Forwarding
    Forwarded cookies (FC): NV pairs, not attributes
    Wednesday, 7 August 13

    View full-size slide

  49. Cookies Forwarding
    Forwarded cookies (FC): NV pairs, not attributes
    If choose to forward cookies to origin,
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  54. Origin
    Wednesday, 7 August 13

    View full-size slide

  55. Origin
    S3 Origin: Best for Static media content
    (Image, Video, Audio)
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  58. Make a note
    Wednesday, 7 August 13

    View full-size slide

  59. Make a note
    Eventual Consistency
    Wednesday, 7 August 13

    View full-size slide

  60. Make a note
    Eventual Consistency
    10 Origin Servers per CF Distribution
    Wednesday, 7 August 13

    View full-size slide

  61. Make a note
    Eventual Consistency
    10 Origin Servers per CF Distribution
    10 Cache Behavior per CF Distribution
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  64. Best Practices
    Wednesday, 7 August 13

    View full-size slide

  65. Best Practices
    Versioning
    Wednesday, 7 August 13

    View full-size slide

  66. Best Practices
    Versioning
    Compression
    Wednesday, 7 August 13

    View full-size slide

  67. Best Practices
    Versioning
    Compression
    Domain Sharding
    Wednesday, 7 August 13

    View full-size slide

  68. Best Practices
    Versioning
    Compression
    Domain Sharding
    Expiration
    Wednesday, 7 August 13

    View full-size slide

  69. Best Practices
    Versioning
    Compression
    Domain Sharding
    Expiration
    Bucket Organization
    Wednesday, 7 August 13

    View full-size slide

  70. Best Practices
    Versioning
    Compression
    Domain Sharding
    Expiration
    Bucket Organization
    Logging
    Wednesday, 7 August 13

    View full-size slide

  71. Best Practices
    Versioning
    Compression
    Domain Sharding
    Expiration
    Bucket Organization
    Logging
    Performance Testing
    Wednesday, 7 August 13

    View full-size slide

  72. Anti-Patterns
    Cache Invalidation
    Wednesday, 7 August 13

    View full-size slide

  73. Cache Invalidation
    Wednesday, 7 August 13

    View full-size slide

  74. Cache Invalidation
    Programmatic Cache Invalidation
    Wednesday, 7 August 13

    View full-size slide

  75. Cache Invalidation
    Programmatic Cache Invalidation
    Cache Invalidation is expensive
    Wednesday, 7 August 13

    View full-size slide

  76. Cache Invalidation
    Programmatic Cache Invalidation
    Cache Invalidation is expensive
    Unmanageable if you have object dependencies
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  79. Cache Invalidation
    Wednesday, 7 August 13

    View full-size slide

  80. Cache Invalidation
    Invalidation takes time to propagate
    across all edge locations (5-15 minutes)
    Wednesday, 7 August 13

    View full-size slide

  81. Cache Invalidation
    Invalidation takes time to propagate
    across all edge locations (5-15 minutes)
    Deal breaker: browser cache
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  83. Versioning
    Wednesday, 7 August 13

    View full-size slide

  84. Versioning
    CF relies on Origin Servers for versioning
    Wednesday, 7 August 13

    View full-size slide

  85. Versioning
    CF relies on Origin Servers for versioning
    S3 supports versioning
    Wednesday, 7 August 13

    View full-size slide

  86. Versioning
    CF relies on Origin Servers for versioning
    S3 supports versioning
    Version enabled Custom Origin
    Wednesday, 7 August 13

    View full-size slide

  87. Versioning
    Wednesday, 7 August 13

    View full-size slide

  88. Versioning
    Versioning using query strings
    Wednesday, 7 August 13

    View full-size slide

  89. Versioning
    Versioning using query strings
    File name plus query string with version /static/profile.png?versionID=123
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  96. Versioning using query strings
    Wednesday, 7 August 13

    View full-size slide

  97. Versioning using query strings
    CF supports versioning using query strings
    forwarding
    Wednesday, 7 August 13

    View full-size slide

  98. Versioning using query strings
    CF supports versioning using query strings
    forwarding
    Versioning enabled Origin (Custom/S3)
    Wednesday, 7 August 13

    View full-size slide

  99. Versioning using query strings
    CF supports versioning using query strings
    forwarding
    Versioning enabled Origin (Custom/S3)
    For S3 Content
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  106. Versioning using query strings
    Wednesday, 7 August 13

    View full-size slide

  107. Versioning using query strings
    Versionify Application content
    Wednesday, 7 August 13

    View full-size slide

  108. Versioning using query strings
    Versionify Application content
    Use Build Number or Hash of GIT/HG Head
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  114. Versioning using query strings
    Wednesday, 7 August 13

    View full-size slide

  115. Versioning using content based
    hash key
    Wednesday, 7 August 13

    View full-size slide

  116. Versioning using content based
    hash key
    File name is an unique hash key
    generated from file content (MD5)
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  126. Versioning using content based
    hash key
    Wednesday, 7 August 13

    View full-size slide

  127. Versioning using content based
    hash key
    For application content use a pipeline
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  134. Versioning using content based
    hash key
    Wednesday, 7 August 13

    View full-size slide

  135. Compression
    Wednesday, 7 August 13

    View full-size slide

  136. Compression
    Compressed content is served faster
    and uses less bandwidth
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  142. Compression
    Wednesday, 7 August 13

    View full-size slide

  143. Compression
    S3 can store both gzip and non-gzip
    versions of the file in the same bucket
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  148. Expiration
    Wednesday, 7 August 13

    View full-size slide

  149. Expiration
    Use one/both of these
    Wednesday, 7 August 13

    View full-size slide

  150. Expiration
    Use one/both of these
    On Origin server set Cache-Control
    max-age header
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  154. Expiration
    Wednesday, 7 August 13

    View full-size slide

  155. Expiration
    Browser cachability issues (known bug)
    Wednesday, 7 August 13

    View full-size slide

  156. Expiration
    Browser cachability issues (known bug)
    Set Cache-Control max-age or Minimum
    TTL very far future
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  160. Domain Sharding
    Wednesday, 7 August 13

    View full-size slide

  161. Domain Sharding
    To increase client side performance
    Wednesday, 7 August 13

    View full-size slide

  162. Domain Sharding
    To increase client side performance
    On average 100+ resources on an
    ecommerce page
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  165. Domain Sharding
    Wednesday, 7 August 13

    View full-size slide

  166. Domain Sharding
    Use two or more CNAME aliases to serve
    the content from a CF distribution
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  170. Domain Sharding
    Wednesday, 7 August 13

    View full-size slide

  171. Domain Sharding
    Use CF CNAME alias feature
    Wednesday, 7 August 13

    View full-size slide

  172. Domain Sharding
    Use CF CNAME alias feature
    Use Route 53 for CNAME Aliasing
    Wednesday, 7 August 13

    View full-size slide

  173. Domain Sharding
    Use CF CNAME alias feature
    Use Route 53 for CNAME Aliasing
    Custom Wild Card SSL Certificate
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  175. Domain Sharding

















    a>



















    CDN with domain sharding
    CDN without domain sharding
    HTML Template
    Without CDN
    Compiled OR
    DOM Manipulation
    Compiled OR
    DOM Manipulation
    Wednesday, 7 August 13

    View full-size slide

  176. Domain Sharding
    Wednesday, 7 August 13

    View full-size slide

  177. Domain Sharding
    Wednesday, 7 August 13

    View full-size slide

  178. Domain Sharding
    Apply domain sharding only where it’s
    needed most
    Wednesday, 7 August 13

    View full-size slide

  179. Domain Sharding
    Apply domain sharding only where it’s
    needed most
    Evenly distribute the resources amongst
    the shards
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  182. Bucket Organisation
    Wednesday, 7 August 13

    View full-size slide

  183. Bucket Organisation
    Limited Cache Behavior per CF Distribution
    Wednesday, 7 August 13

    View full-size slide

  184. Bucket Organisation
    Limited Cache Behavior per CF Distribution
    Plan your bucket organisation (object keys)
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  189. Logging
    Wednesday, 7 August 13

    View full-size slide

  190. Logging
    Enable logging, store access log file to S3
    Wednesday, 7 August 13

    View full-size slide

  191. Logging
    Enable logging, store access log file to S3
    One log file per distribution
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  196. Performance Testing
    Wednesday, 7 August 13

    View full-size slide

  197. Performance Testing
    Tradition Load Testing not useful
    Wednesday, 7 August 13

    View full-size slide

  198. Performance Testing
    Tradition Load Testing not useful
    Same DNS request, same set of IPs
    Wednesday, 7 August 13

    View full-size slide

  199. Performance Testing
    Tradition Load Testing not useful
    Same DNS request, same set of IPs
    Backbone Testing (Ideal Word)
    Wednesday, 7 August 13

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  208. Thank You
    Q & A
    Wednesday, 7 August 13

    View full-size slide