What is cache penetration, cache breakdown and cache avalanche?

  sonic0002        2020-04-10 08:43:00       20,511        0          English  简体中文  繁体中文  ภาษาไทย  Tiếng Việt 

Khi thiết kế và phát triển hệ thống có tính sẵn sàng cao, bộ nhớ đệm là một yếu tố rất quan trọng cần cân nhắc. Việc lưu vào bộ nhớ đệm một số dữ liệu thường xuyên được truy cập rất hữu ích để có thể truy cập nhanh chóng, đồng thời bộ nhớ đệm có thể bảo vệ hệ thống hạ nguồn như DB khỏi việc bị truy cập quá thường xuyên. 

Để cung cấp thiết kế bộ nhớ đệm tốt hơn trong các hệ thống lớn, một số vấn đề có thể cần được xem xét trước. Trong bài đăng này, chúng ta sẽ nói về một số vấn đề bộ nhớ đệm thường được thảo luận và các kế hoạch giảm thiểu.

Xâm nhập bộ nhớ đệm

Xâm nhập bộ nhớ đệm là một tình huống mà dữ liệu cần tìm kiếm không tồn tại ở DB và tập kết quả trống trả về cũng không được lưu vào bộ nhớ đệm, do đó mọi tìm kiếm khóa sẽ cuối cùng đều truy cập vào DB. Nếu một hacker cố gắng khởi xướng một cuộc tấn công bằng cách tung ra rất nhiều tìm kiếm với khóa như vậy, lớp DB bên dưới sẽ bị truy cập quá thường xuyên và cuối cùng có thể bị sập.

Trong những trường hợp như vậy, có một vài kế hoạch giảm thiểu.

  1. Nếu không có dữ liệu cho khóa trong DB, chỉ cần trả về một kết quả trống và lưu vào bộ nhớ đệm trong một khoảng thời gian ngắn (Không đặt thời gian hết hạn dài)
  2. Sử dụng Bloom filter. Bloom filter tương tự như hbase set có thể được sử dụng để kiểm tra xem một khóa có tồn tại trong tập dữ liệu hay không. Nếu khóa tồn tại, hãy đi đến lớp bộ nhớ đệm hoặc lớp DB, nếu nó không tồn tại trong tập dữ liệu, thì chỉ cần trả về.

Nếu khóa tìm kiếm có tỷ lệ lặp lại cao, thì có thể áp dụng giải pháp đầu tiên. Nếu không, nếu khóa tìm kiếm có tỷ lệ lặp lại thấp và có quá nhiều khóa tìm kiếm, có thể áp dụng giải pháp thứ hai để lọc hầu hết chúng trước.

Sự cố bộ nhớ đệm

Sự cố bộ nhớ đệm là một tình huống mà dữ liệu được lưu trong bộ nhớ đệm hết hạn và đồng thời có rất nhiều tìm kiếm trên dữ liệu đã hết hạn, điều này đột ngột khiến các tìm kiếm truy cập trực tiếp vào DB và làm tăng đáng kể tải cho lớp DB.

Điều này sẽ xảy ra trong môi trường có tính đồng thời cao. Thông thường trong trường hợp này, cần phải có một khóa trên khóa tìm kiếm để các luồng khác cần phải đợi khi một số luồng đang cố gắng tìm kiếm khóa và cập nhật bộ nhớ đệm. Sau khi bộ nhớ đệm được cập nhật và khóa được giải phóng, các luồng khác sẽ có thể đọc dữ liệu mới được lưu trong bộ nhớ đệm.

Một phương pháp khả thi khác là cập nhật không đồng bộ dữ liệu được lưu trong bộ nhớ đệm thông qua một luồng worker để dữ liệu nóng sẽ không bao giờ hết hạn.

Lũ bộ nhớ đệm

Lũ bộ nhớ đệm là một tình huống mà rất nhiều dữ liệu được lưu trong bộ nhớ đệm hết hạn cùng một lúc hoặc dịch vụ bộ nhớ đệm bị ngừng hoạt động và tất cả các tìm kiếm dữ liệu này đột ngột sẽ truy cập vào DB và gây ra tải cao cho lớp DB và ảnh hưởng đến hiệu suất.

Để giảm thiểu vấn đề, có thể áp dụng một số phương pháp.

  1. Sử dụng các cụm để đảm bảo rằng một số phiên bản máy chủ bộ nhớ đệm đang hoạt động tại bất kỳ thời điểm nào. Nếu Redis được sử dụng, có thể có các cụm redis.
  2. Một số phương pháp khác như bộ ngắt mạch hystrix và giới hạn tốc độ có thể được định cấu hình để hệ thống bên dưới vẫn có thể phục vụ lưu lượng truy cập và tránh tải cao
  3. Có thể điều chỉnh thời gian hết hạn cho các khóa khác nhau để chúng không hết hạn cùng một lúc.

Tất cả các phương pháp giảm thiểu cần được triển khai dựa trên các trường hợp sử dụng thực tế và các yêu cầu thiết kế hệ thống.

SYSTEM DESIGN  CACHE PENETRATION  CACHE BREAKDOWN  CACHE AVALANCHE 

           

  RELATED


  0 COMMENT


No comment for this article.



  RANDOM FUN

Frontend vs backend