How We Built a Cross-Region Caching Library
Bài tóm tắt Wix 2022 3. Quy mô lớn Độ khó: Trung bình
Wix · 2022 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Bối cảnh
- Wix (2022): hơn 500 tỷ HTTP request và 30 tỷ event Kafka mỗi ngày, hơn 2.500 microservice ở nhiều data center.
- Nhiều team tự viết thư viện cache nửa vời, mỗi nhóm một kiểu; team Data Streams nhận làm một giải pháp chung.
- Yêu cầu: p99 khoảng 10 ms cho put/get hai tầng; nhất quán (cuối cùng) giữa các region; dung lượng không thành nút thắt; chịu được 10–100 lần traffic.
- Không dùng Redis/Memcached vì bảng có thể tới hàng TB và dữ liệu cần sống lâu không TTL (ví dụ object quyền của một app), không hợp với kho trong RAM.
Lần 1: Kafka compact topic (thất bại)
Mỗi pod khi khởi động đọc compact topic từ đầu để dựng KV trong RAM. Ổn với topic nhỏ; với topic lớn, đọc lại hàng trăm nghìn event làm khởi động pod chậm vài phút, phá autoscaling. Không đạt yêu cầu "dataset tăng dần".
Lần 2: thư viện WixCache
- DB xuyên region: DynamoDB Global Table (replication giữa region do AWS lo, theo dõi được độ trễ replication).
- Thư viện cache trong pod: LRU, write-through, warm-up cấu hình được. API:
Get(RAM trước, miss thì đọc DynamoDB rồi lưu),Put(ghi RAM và DB),Delete(xoá cả hai, replication xoá ở region khác),localPut(chỉ cập nhật RAM, dùng cho consumer). - Cập nhật RAM ở mọi pod mọi region: chỉ replication DB thì pod ở region B vẫn trả giá trị cũ. Một sync service đọc CDC của DynamoDB qua Kinesis Data Streams và đẩy thành message Kafka nội bộ (một topic mỗi bảng); một dispatcher có bảng định tuyến bảng → topic. Pod trong region consume topic (mỗi pod một subscriber group ngẫu nhiên, nên pod nào cũng nhận) và cập nhật RAM.
Bài học cho SWE
- Dựng cache bằng cách replay log từ đầu không scale: thời gian khởi động tăng theo dữ liệu (Cache và invalidation).
- Invalidation xuyên region = replication DB + phát CDC tới mọi bản cache; thiếu vế sau thì region khác đọc dữ liệu cũ (Độ tin cậy và multi-region).
- Theo Wix: đừng tối ưu bằng cache khi chưa thật cần; chỉ khi latency hoặc chi phí ở mức nguy cấp.
Liên quan
Được nhắc tới trong
Công ty (1)