Cache invalidation là trạng thái mà chúng ta đẩy dữ liệu ra khỏi bộ nhớ đệm. Khi dữ liệu có trong bộ nhớ đệm đã lỗi thời. Chúng ta thực hiện thao tác đẩy lùi hoặc xóa dữ liệu khỏi bộ nhớ đệm. Nếu không, dữ liệu sẽ không nhất quán.
Khi dữ liệu được lưu trong bộ nhớ đệm trở nên cũ hoặc không chính xác, việc vô hiệu hóa bộ nhớ đệm là quá trình xóa hoặc cập nhật dữ liệu đó. Khi dữ liệu gốc thay đổi, quá trình vô hiệu hóa bộ nhớ đệm liên quan đến việc xóa hoặc cập nhật dữ liệu được lưu trong bộ nhớ đệm. Điều này rất quan trọng vì các chương trình dựa vào dữ liệu được lưu trong bộ nhớ đệm có thể gặp sự cố nếu dữ liệu đó trở nên lỗi thời hoặc sai theo thời gian.
Nhắc ở phần trước chúng ta có nhắc đến Cache Replacement để không bị khó hiểu giữa các khái niệm, tôi sẽ note lại điểm khác nhau quan trọng giữa 2 khái niệm này:
Cache Replacement Policies (Chính sách thay thế bộ đệm):
- Khi bạn có một bộ đệm dung lượng nhỏ chứa dữ liệu để truy xuất nhanh hơn, nhưng nếu thêm nhiều dữ liệu, bộ đệm sẽ đầy. Lúc này, cache replacement policy quyết định mục nào sẽ bị xóa để nhường chỗ cho dữ liệu mới.
- Ví dụ: Với chính sách Least Recently Used (LRU), nếu bạn thêm dữ liệu mới khi bộ đệm đầy, dữ liệu lâu không được truy cập sẽ bị loại bỏ đầu tiên.
Cache Invalidation (Xóa hiệu lực bộ đệm):
- Cache invalidation đảm bảo rằng dữ liệu trong bộ đệm là dữ liệu mới nhất và chính xác. Khi dữ liệu nguồn thay đổi, bản sao trong bộ đệm phải bị vô hiệu (invalidated) để tránh dùng dữ liệu cũ.
- Ví dụ: Trong một ứng dụng mua sắm, khi bạn thay đổi giá sản phẩm trong cơ sở dữ liệu, giá sản phẩm được lưu trong bộ đệm cũng cần cập nhật để phản ánh đúng giá mới.
Tóm lại:
- Cache Replacement: Dùng để thay thế dữ liệu khi bộ đệm đầy.
- Cache Invalidation: Dùng để đảm bảo dữ liệu trong bộ đệm luôn cập nhật và đúng.
Write-through cache
Theo cơ chế này, dữ liệu được ghi vào bộ đệm và cơ sở dữ liệu đồng thời. Dữ liệu trong bộ đệm cho phép truy xuất nhanh chóng và vì dữ liệu giống nhau được ghi vào cơ sở dữ liệu, nên sẽ có sự nhất quán hoàn toàn giữa bộ đệm(cache) và database. Cơ chế này cũng đảm bảo tránh mất mát dữ liệu trong trường hợp hệ thống gặp sự cố, mất điện hoặc gián đoạn khác. Mặc dù write-through giúp giảm thiểu rủi ro mất dữ liệu, nhưng vì mỗi thao tác ghi phải thực hiện hai lần trước khi trả về kết quả thành công cho khách hàng, nên cơ chế này có nhược điểm là các thao tác ghi có độ trễ cao hơn.
Write-around cache
Kỹ thuật này vẫn sử dụng cache, nhưng chỉ cho việc đọc dữ liệu.
Mục tiêu của kỹ thuật này:
- Giảm áp lực lên bộ đệm khi ghi dữ liệu, nhưng vẫn giữ cache để tăng tốc các lần đọc dữ liệu sau.
Cách hoạt động:
- Khi có một thao tác ghi, dữ liệu được ghi trực tiếp vào bộ lưu trữ chính (ví dụ, cơ sở dữ liệu), không qua cache.
- Khi có một thao tác đọc, hệ thống sẽ kiểm tra cache trước:
- Nếu dữ liệu có sẵn trong cache (cache hit), sẽ trả về dữ liệu ngay, rất nhanh.
- Nếu không có (cache miss), hệ thống phải đọc từ bộ lưu trữ chính (chậm hơn) và sau đó lưu vào cache để lần sau đọc nhanh hơn.
Lợi ích và nhược điểm:
- Lợi ích: Giảm tình trạng bộ đệm bị quá tải bởi các thao tác ghi, đặc biệt là những dữ liệu có thể không cần đọc lại ngay sau đó.
- Nhược điểm: Khi bạn vừa ghi dữ liệu và sau đó muốn đọc ngay, cache sẽ không có sẵn dữ liệu đó (do không ghi vào cache trước), dẫn đến cache miss và truy xuất từ bộ lưu trữ chậm hơn.
Write-back cache
Cách hoạt động:
- Khi có dữ liệu mới, dữ liệu đó chỉ được ghi vào bộ đệm (cache) mà không ghi vào bộ lưu trữ chính ngay lập tức.
- Sau khi ghi dữ liệu vào cache, hệ thống ngay lập tức thông báo cho khách hàng rằng thao tác đã hoàn tất.
Điều kiện ghi vào bộ lưu trữ chính:
- Dữ liệu sẽ được ghi vào bộ lưu trữ vĩnh viễn (như cơ sở dữ liệu) sau đó, nhưng chỉ khi đáp ứng một số điều kiện, chẳng hạn như khi hệ thống cần thêm không gian trống trong cache.
Lợi ích:
- Cơ chế này giúp tăng tốc độ ghi dữ liệu, vì khách hàng nhận được phản hồi ngay lập tức và không phải chờ đợi quá trình ghi vào bộ lưu trữ chính.
Nhược điểm:
- Tốc độ này đi kèm với rủi ro mất dữ liệu. Nếu hệ thống gặp sự cố (chẳng hạn như bị sập hoặc mất điện), dữ liệu chỉ có trong cache sẽ bị mất, vì không có bản sao nào trong bộ lưu trữ vĩnh viễn.
Tóm lại: Hệ thống này giúp ghi dữ liệu nhanh chóng nhưng có nguy cơ mất dữ liệu nếu có sự cố xảy ra.
Write-behind cache
Cơ chế này khá giống với write-back cache. Theo cơ chế này, dữ liệu được ghi vào bộ đệm và ngay lập tức xác nhận cho ứng dụng, nhưng không được ghi ngay vào bộ lưu trữ vĩnh viễn. Thay vào đó, thao tác ghi được trì hoãn và dữ liệu sẽ được ghi vào bộ lưu trữ vĩnh viễn sau đó. Sự khác biệt chính giữa write-back cache và write-behind cache là thời điểm dữ liệu được ghi vào bộ lưu trữ vĩnh viễn. Trong write-back caching, dữ liệu chỉ được ghi vào bộ lưu trữ khi bộ đệm cần giải phóng không gian, trong khi với write-behind caching, dữ liệu được ghi vào bộ lưu trữ vĩnh viễn theo các khoảng thời gian định trước.
Điểm giống nhau:
- Cả hai cơ chế đều ghi dữ liệu vào bộ đệm (cache) trước và xác nhận ngay lập tức với ứng dụng, giúp thao tác ghi diễn ra nhanh hơn.
- Dữ liệu không được ghi ngay vào bộ lưu trữ vĩnh viễn (như cơ sở dữ liệu hay ổ đĩa) mà sẽ được ghi sau đó.
Sự khác nhau giữa write-back cache và write-behind cache:
- Write-back cache: Dữ liệu chỉ được ghi vào bộ lưu trữ vĩnh viễn khi bộ đệm cần thêm không gian. Vì vậy, dữ liệu có thể lưu trong cache một khoảng thời gian dài cho đến khi cache đầy.
- Write-behind cache: Dữ liệu sẽ được ghi vào bộ lưu trữ vĩnh viễn theo các khoảng thời gian định trước (ví dụ: mỗi 5 phút). Điều này giúp dữ liệu cập nhật thường xuyên hơn trong bộ lưu trữ chính mà không chờ đến khi cache đầy.
Ưu và nhược điểm:
- Write-back cache thường nhanh hơn nhưng dữ liệu có thể không đồng bộ lâu hơn.
- Write-behind cache giúp đồng bộ dữ liệu với bộ lưu trữ vĩnh viễn theo thời gian nhất định, giảm nguy cơ mất dữ liệu nếu có sự cố.
Tóm lại:
- Write-back chỉ ghi dữ liệu khi cần thêm không gian.
- Write-behind ghi theo khoảng thời gian định kỳ.
Các Method Cache Invalidations
Dưới đây là các phương pháp vô hiệu hóa bộ đệm nổi tiếng:
1.Purge
- Khi một nội dung (như một trang hoặc hình ảnh) được cập nhật, phương thức này sẽ xóa bản cũ trong cache ngay lập tức.
- Lần yêu cầu tiếp theo sẽ phải lấy dữ liệu trực tiếp từ máy chủ gốc, đảm bảo rằng người dùng nhận được nội dung mới nhất.
2.Refresh (Làm mới)
- Refresh sẽ lấy bản mới từ máy chủ gốc và cập nhật bản trong cache.
- Khác với Purge, phương thức này không xóa dữ liệu cũ mà chỉ cập nhật bản mới lên cache, đảm bảo nội dung luôn được làm mới mà vẫn có bản dự phòng.
3.Ban (Cấm cache theo tiêu chí)
- Ban vô hiệu hóa cache cho những nội dung khớp với các tiêu chí nhất định (như một mẫu URL hoặc thông tin tiêu đề).
- Ví dụ: nếu cấm một URL cụ thể, mọi yêu cầu tiếp theo cho URL đó sẽ được phục vụ từ máy chủ gốc, bỏ qua cache.
4.Time-to-live (TTL) expiration (Hết hạn cache theo thời gian)
- Cache sẽ cài đặt một thời gian tồn tại cho từng nội dung.
- Khi hết thời gian này, cache sẽ coi nội dung là lỗi thời, lấy bản mới từ máy chủ gốc, và cập nhật vào cache.
5.Stale-while-revalidate
- Khi người dùng yêu cầu một nội dung, phiên bản cache cũ được phục vụ ngay lập tức để tăng tốc độ.
- Trong khi đó, cache sẽ âm thầm cập nhật nội dung mới từ máy chủ gốc ở chế độ nền. Khi cập nhật xong, phiên bản mới sẽ được lưu lại trong cache.
Để lại một bình luận