Tăng hiệu năng bộ nhớ đệm Redis trong môi trường quy mô lớn
(meetup.toast.com)Redis là cơ sở dữ liệu in-memory được sử dụng rộng rãi để caching cho các dịch vụ trực tuyến. Tuy nhiên, nếu dùng không đúng cách, nó có thể gây ra những vấn đề ngoài dự kiến hoặc thậm chí dẫn đến sự cố lớn. Gần đây tôi tình cờ gặp một kỹ sư đang làm việc trong đội SRE của một công ty khi đi hiệu sách, và trong lúc trò chuyện, người đó còn nói rằng: “Redis thực ra là một cái ác cần thiết. Phải dùng nó với tâm thế rằng sớm muộn gì cũng sẽ có một sự cố liên quan xảy ra ít nhất một lần.”
Tham khảo - Kakao "Dùng Redis sai là toang":
https://zdnet.co.kr/view/?no=20131119174125
Tham khảo - Nguyên nhân lỗi của Coupang là do mã nguồn mở 'Redis DB':
http://www.digitaltoday.co.kr/news/articleView.html?idxno=212904
Redis là một công cụ cần phải hiểu rõ và sử dụng thật cẩn trọng như vậy đấy.
Phần mở đầu hơi dài. Dựa trên nội dung bài trình bày tại RedisConf 2020, NHN đã chỉ ra 3 điểm có thể phát sinh vấn đề hiệu năng khi dùng Redis làm cache trong môi trường lưu lượng lớn, đồng thời giới thiệu một tài liệu giải thích cách khắc phục chúng. (Tiếng Hàn)
-
Cache Stampede: Vì không gian cache có hạn nên thông thường người ta sẽ đặt thời gian hết hạn (TTL) cho dữ liệu được lưu. Nhưng nếu các yêu cầu đọc vẫn liên tục đổ vào dữ liệu đó, ngay khi thời hạn cache hết, các yêu cầu đọc sẽ dồn ập về DB trong chốc lát, và sau đó lại kéo theo các yêu cầu ghi trùng lặp đổ vào Redis. Hiện tượng này được gọi là Cache Stampede; cách giải quyết có thể là làm mới trước giá trị TTL bằng thuật toán dựa trên phân phối xác suất, hoặc áp dụng khái niệm debounce (chỉ thực thi sự kiện cuối cùng trong nhiều sự kiện lặp lại).
-
Hot Keys: Khi lượt đọc tập trung vào một khóa duy nhất, hiệu năng cũng có thể suy giảm. Bài viết giới thiệu một biện pháp là thêm prefix vào trước tên khóa để tạo nhiều bản sao, rồi phân tán ngẫu nhiên các lượt đọc tới các bản sao có gắn prefix đó.
-
Compression: Khi lưu dữ liệu có kích thước lớn trong Redis, hiệu năng cũng có thể bị giảm. Trong trường hợp này, chỉ cần áp dụng nén phù hợp cũng có thể mang lại lợi ích lớn về tốc độ và mức sử dụng bộ nhớ. Vì phương pháp nén và tỷ lệ nén phù hợp có thể khác nhau tùy theo tình huống và môi trường, nên khi áp dụng bắt buộc phải có benchmark test tái hiện lại môi trường sử dụng thực tế.
1 bình luận
Tham khảo - bài viết có mã ví dụ cho thuật toán dựa trên phân phối xác suất được nhắc ở trên (Probablistic Early Recomputation):
https://engineering.linecorp.com/ko/blog/…