Cơ Chế Revalidation

Revalidation là gì?

Revalidation là một cơ chế trong cache giúp kiểm tra tính hợp lệ (freshness) của dữ liệu đã được lưu trong cache trước khi phục vụ nội dung đó cho client.

Khi Revalidation xảy ra:

  • Nếu dữ liệu trong cache không còn hợp lệ (stale) do TTL hết hạn, Cloudflare sẽ gửi yêu cầu tới server gốc để kiểm tra hoặc lấy lại nội dung mới.

  • Quá trình này đảm bảo rằng nội dung được phục vụ là chính xác và không lỗi thời.


Kịch bản 1: Tài nguyên trong cache đã hết hạn

Tình huống:

  • 1.000 yêu cầu đồng thời đến một tài nguyên trong cache tại Cloudflare.

  • Tài nguyên đã hết TTL và cần revalidate với server gốc.

Hành vi của Cloudflare:

  • 1 yêu cầu được gửi tới server gốc để kiểm tra tính hợp lệ (hoặc lấy lại nội dung mới).

  • 999 yêu cầu còn lại:

    • Được phục vụ từ nội dung cache stale (hết hạn).

    • Kèm trạng thái UPDATING.

Cơ chế liên quan:

  • stale-while-revalidate:

    • Chỉ thị này cho phép Cloudflare phục vụ nội dung stale trong khi gửi yêu cầu revalidation tới server gốc.

Ví dụ header:

  • Tài nguyên hợp lệ trong 300 giây.

  • Sau đó, Cloudflare sẽ phục vụ nội dung stale trong 60 giây trong khi cập nhật nội dung từ server gốc.

Nếu không muốn phục vụ nội dung stale:

  • Cấu hình stale-while-revalidate=0:


Kịch bản 2: Tài nguyên không có trong cache (Cache Miss)

Tình huống:

  • 1.000 yêu cầu đồng thời tới một tài nguyên chưa được lưu trong cache (cache miss).

  • Tài nguyên cần được tải từ server gốc.

Hành vi của Cloudflare:

  • 1 yêu cầu được gửi tới server gốc để tải tài nguyên.

  • 999 yêu cầu còn lại:

    • Chờ kết quả từ yêu cầu đầu tiên.

    • Khi nội dung từ server gốc được tải xong, Cloudflare stream nội dung tới tất cả các yêu cầu chờ.

Cơ chế liên quan:

  • Cache Locking:

    • Cloudflare sử dụng cơ chế này để ngăn nhiều yêu cầu đồng thời gây quá tải server gốc.

    • Chỉ một yêu cầu được gửi tới server gốc cho mỗi tài nguyên chưa có trong cache tại một địa điểm cụ thể.

Tóm tắt các chỉ thị liên quan

Chỉ thị Cache-Control
Ý nghĩa

max-age=<seconds>

Thời gian tài nguyên được coi là hợp lệ trong cache.

stale-while-revalidate=<seconds>

Cho phép phục vụ nội dung stale trong khi cập nhật nội dung mới từ server gốc.

stale-if-error=<seconds>

Cho phép phục vụ nội dung stale nếu server gốc không phản hồi hoặc gặp lỗi.

no-cache

Buộc phải revalidate tài nguyên trước khi phục vụ từ cache.

no-store

Không lưu trữ tài nguyên trong cache.


Cấu hình trong Cloudflare Worker:

thêm middleware khi fetch API xong add thêm header vào respone

Last updated