2012-05-16 31 views
57

Một vài tuần trước Amazon thông báo rằng họ đã hạ thấp kỳ nội dung hết hạn:TTL 0 trong CloudFront hữu ích cho mục đích gì?

Amazon CloudFront Lowers Minimum Content Expiration Period

Vì vậy, nhiều đến nỗi bạn thực sự có thể thiết lập tại TTL trong CloudFront đến 0. Vì vậy, câu hỏi của tôi là, tại sao có thể nó có ích cho có phân phối CloudFront với TTL được đặt thành 0. Với tôi điều này có nghĩa là không có bộ nhớ đệm nào cả nên mọi yêu cầu đến CloudFront sẽ kết thúc bằng cách nhấn vào nguồn gốc.

Tôi đang thiếu gì?

Trả lời

117

Tính năng mới này của Amazon CloudFront thực sự cực kỳ hữu ích cho nhiều trường hợp sử dụng, vì nhấn gốc hoạt động hơi khác so với giao diện đầu tiên và không nhất thiết phải là vấn đề; trong khi tính năng này đã được phát hành trước đó, tất cả đều đi kèm với bản phát hành gần đây là Amazon CloudFront - Support for Dynamic Content, ví dụ: cho câu hỏi ở bàn tay:

Variable Time-To-Live (TTL) - Trong nhiều trường hợp, nội dung động là một trong hai không thể cache hay cache trong một thời gian rất ngắn thời gian, có lẽ chỉ là một vài giây. Trước đây, TTL tối thiểu của CloudFront là 60 phút vì tất cả nội dung được coi là tĩnh. Giá trị TTL tối thiểu mới là 0 giây. Nếu bạn đặt TTL cho một nguồn gốc cụ thể thành 0, CloudFront sẽ vẫn lưu lại nội dung từ nguồn gốc đó. Nó sẽ sau đó hiện một yêu cầu GET với cấu trúc If-Modified-Since, do đó cho nguồn gốc một cơ hội để dấu hiệu cho thấy CloudFront có thể tiếp tục sử dụng nội dung cache nếu nó đã không thay đổi tại gốc. [tôi nhấn mạnh]

Nói cách khác, sử dụng một TTL là 0 có nghĩa là chủ yếu, mà các đại biểu CloudFront thẩm quyền để kiểm soát bộ nhớ cache để nguồn gốc, tức là máy chủ gốc quyết định có hay không, và nếu trong bao lâu CloudFront lưu trữ các đối tượng; xin lưu ý cụ thể, yêu cầu GET GET với tiêu đề If-Modified-Since không nhất thiết có nghĩa là đối tượng được truy xuất từ ​​nguồn gốc, chứ không phải gốc có thể (và nên) trả về HTTP status code 304 - Not Modified nếu có:

Cho biết tài nguyên chưa được sửa đổi kể từ lần được yêu cầu gần đây nhất. [...] Sử dụng tính năng này sẽ tiết kiệm băng thông và xử lý lại trên cả máy chủ và máy khách vì chỉ dữ liệu tiêu đề phải được gửi và nhận trong so với toàn bộ trang được xử lý lại bởi máy chủ , sau đó gửi lại bằng băng thông của máy chủ và máy khách. [tôi nhấn mạnh]

Xem Đánh Nottingham tuyệt vời Caching Tutorial biết chi tiết về các cơ chế và lợi ích của việc kiểm soát HTTP cache, một phần thực sự quan trọng và hiệu quả của kiến ​​trúc HTTP.

Hiểu được cách tất cả các bộ phận làm việc cùng nhau có thể là một chút khó khăn thực sự, theo bảng trong phần Xác định thời gian tối thiểu mà CloudFront Caches Objects cho Tải Distributions trong Specifying How Long Objects Stay in a CloudFront Edge Cache (Object Expiration) nỗ lực để tóm tắt những ảnh hưởng khi áp dụng trong bối cảnh CloudFront có hoặc không có TTL = 0 cụ thể.

+2

Đây là một phản ứng tuyệt vời. Hiểu rồi! – jatorre

+2

Cảm ơn Steffen! Một câu trả lời hoàn toàn toàn diện và được viết tốt. AWS nên đặt điều này trong DOCS của họ !!! ha! – asherrard

+1

Rất tốt giải thích. Nghiêm túc. +10 cho sự đơn giản và thuật ngữ được sử dụng. –

3

Lưu ý rằng Amazon không nói "TTL là 0", có nghĩa là "TTL tối thiểu là 0". và điều đó rất khác. Mô tả ở trên là rất mong muốn nhưng không có gì đảm bảo rằng Cloudfront thực sự làm điều đó.

Trong kinh nghiệm của tôi ngay bây giờ, tôi có thể thấy một hình ảnh được lưu trong bộ nhớ cache ở lại một vài phút ở cạnh trong khi nguồn gốc của tôi đã thay đổi. Vì vậy, tôi nghĩ rằng "TTL tối thiểu là 0" có lẽ giống như "Amazon không có ý định nghiêm ngặt để giữ điều này trong bộ nhớ cache", và có thể "và nó sẽ nạp lại thường xuyên".

Đối với các ứng dụng như CMS, nơi người dùng web đăng nội dung mới, tôi nghĩ rằng TTL-0 vẫn chưa đủ. Bạn vẫn phải yêu cầu hủy bỏ hiệu lực từ CMS hoặc sử dụng các đường dẫn khác nhau cho các số phiên bản khác nhau.

Các vấn đề liên quan