2012-10-08 29 views

Trả lời

17

S3 không gửi bất kỳ thông tin không hợp lệ nào cho CloudFront. Theo mặc định, CloudFront sẽ giữ thông tin đến thời gian tối đa được chỉ định bởi tiêu đề Kiểm soát bộ nhớ cache được thiết lập khi nó lấy dữ liệu từ gốc (nó có thể xóa các mục khỏi bộ nhớ cache trước đó nếu nó cảm thấy như nó).

Bạn có thể làm mất hiệu lực mục nhập bộ nhớ cache bằng cách tạo lô không hợp lệ. Điều này sẽ khiến bạn mất tiền: 1000 yêu cầu mỗi tháng miễn phí nhưng vượt quá $ 0,005 cho mỗi yêu cầu - nếu bạn đã làm mất hiệu lực 1000 tệp mỗi ngày, bạn sẽ mất $ 150 một tháng (trừ khi bạn có thể sử dụng tính năng ký tự đại diện). Tất nhiên bạn có thể kích hoạt điều này để đáp ứng với một sự kiện s3 bằng cách sử dụng một hàm Amazon Lambda.

Cách tiếp cận khác là sử dụng một đường dẫn khác khi đối tượng thay đổi (có hiệu lực là khóa bộ nhớ đệm thế hệ). Tương tự, bạn có thể nối tham số truy vấn vào url và thay đổi tham số truy vấn đó khi bạn muốn cloudfront tìm nạp bản sao mới (để thực hiện điều này, bạn sẽ cần báo cho CloudFront sử dụng tham số chuỗi truy vấn - theo mặc định nó bỏ qua chúng).

Một cách khác nếu bạn chỉ thực hiện các thay đổi không thường xuyên (nhưng lớn) là chỉ cần tạo bản phân phối trên đám mây mới.

+0

Tôi đã có một cảm giác khủng khiếp trong trường hợp này. Có vẻ như họ đã bỏ lỡ một tính năng. Bạn có thể cung cấp một tham chiếu cho điều đó hay nó chỉ không được chỉ định? Cảm ơn. – Joe

+0

Nó sẽ là một giả định bị lỗi khi tải lên phiên bản mới lên S3 có nghĩa là bạn muốn xóa bộ nhớ cache trong CloudFront. Có, đây có thể là hành vi mà bạn đang tìm kiếm, nhưng nó sẽ là giả định của AWS để _assume_ rằng đây là những gì bạn muốn. Trong nhiều trường hợp, tôi sẽ lưu trữ nội dung trong CloudFront khi biết rằng nó sẽ hết hạn theo cài đặt của tôi và sẽ hiển thị nội dung cập nhật trong S3 trước thời hạn. Trong trường hợp của tôi, và vô hiệu hóa tự động là trái ngược với những gì tôi muốn. –

+0

Không giả định, nhưng nó có vẻ giống như một tham số hữu ích đã có. – Joe

3

Theo như tôi biết, tất cả các CDN hoạt động như thế này.

Đó là lý do tại sao bạn thường sử dụng một cái gì đó như foo-x.y.z.ext cho nội dung phiên bản trên CDN. Tôi sẽ không sử dụng foo.ext?x.y.z vì có điều gì đó về một số trình duyệt và proxy nhất định không bao giờ lưu vào bộ nhớ đệm bằng một số ?QUERY_STRING.

Nói chung bạn có thể muốn kiểm tra này: https://developers.google.com/speed/docs/best-practices/caching

Nó chứa rất nhiều thực hành tốt nhất và đi sâu vào chi tiết phải làm gì và làm thế nào nó hoạt động.

Đối với S3 và Cloudfront, tôi không phải là siêu quen thuộc với việc không hợp lệ bộ nhớ cache, nhưng những gì Frederick Cheung đã đề cập là chính xác.

Một số nhà cung cấp cũng cho phép bạn xóa bộ nhớ cache trực tiếp nhưng vì bản chất của CDN, những thay đổi này gần như không bao giờ tức thời. Phương pháp khác là đặt TTL nhỏ hơn (tiêu đề hết hạn) để nội dung sẽ được làm mới thường xuyên hơn. Nhưng tôi nghĩ rằng đánh bại mục đích của một CDN là tốt.

Trong trường hợp của chúng tôi (Edgecast), việc vô hiệu hóa bộ nhớ cache là có thể (một quy trình thủ công) và miễn phí, nhưng chúng tôi hiếm khi làm điều này bởi vì chúng tôi phiên bản tài sản của mình cho phù hợp.

+0

Cảm ơn bạn đã trả lời. Tôi quen thuộc với cả S3 và CloudFront (và những người khác), tôi đã hỏi về sự tích hợp cụ thể giữa hai sản phẩm Amazon này. – Joe

+0

OK, tôi không hiểu cụ thể. Vì vậy, vâng - đề nghị của tôi sẽ vẫn là tài sản phiên bản và đặt tiêu đề 'Cache-Control' trên đối tượng. – Till

+0

Cảm ơn có vẻ như tôi sẽ phải làm việc xung quanh nó. Tôi vẫn nghĩ rằng đó là một tính năng cần thiết và dễ thực hiện mà họ đã bỏ lỡ. – Joe

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