Evolution of Application Data Caching: From RAM to SSD
Bài tóm tắt Netflix 2018 3. Quy mô lớn Độ khó: Trung bình
Netflix · 2018 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Bối cảnh
- EVCache (từ 2013): cache phân tán dựa trên memcached, tích hợp với AWS, được gọi là "microservice ẩn". Đến 2018 là dịch vụ tier-0: hàng PB dữ liệu, hàng trăm tỷ item, hàng nghìn tỷ thao tác/ngày, hàng nghìn server ở 3 region AWS.
- Chuyển sang kiến trúc global cloud (phục vụ một user từ bất kỳ region nào) làm lượng dữ liệu phải replicate và cache ở mỗi region tăng 3 lần, kéo theo chi phí và độ phức tạp.
Thay đổi chính
- Dùng SSD thay một phần RAM: đọc ngẫu nhiên trên RAM thường dưới 1μs, trên SSD 100–500μs, trong khi SLA của EVCache ~1ms (timeout 20ms) ở ~100K RPS. Thử nghiệm trên I3.2xlarge (NVMe) đạt hơn 200K IOPS với item 1 KB, latency hiếm khi vượt 1ms. Nghĩa là đạt SLA với chi phí thấp hơn nhiều.
- Bước 1, EVCache Moneta: toàn bộ dữ liệu trên SSD (RocksDB), dữ liệu nóng trên RAM (memcached). Cụm nhỏ đi hơn 60% so với cụm chỉ dùng RAM, hợp với dữ liệu gợi ý được tính định kỳ. Nhưng không chuyển được các cụm online lớn: ghi đè gây compaction trên RocksDB, ảnh hưởng throughput và đôi khi vượt SLA. Compaction kiểu FIFO cũng làm chỉ dùng được tối đa ~50% dung lượng đĩa.
- Bước 2, memcached extstore: metadata (key) giữ trong RAM, dữ liệu trên flash. Dùng hết dung lượng đĩa (không cần giữ hai bản cũ/mới). Lệnh
lru_crawlerđể duyệt key, dùng làm ấm cụm mới khi deploy hoặc scale, và chụp snapshot định kỳ để có độ bền khi gặp thảm hoạ. - Đọc phần lớn ≤ ~100μs, ổn định hơn Moneta. Mọi cụm Moneta đã chuyển sang extstore; một số cụm RAM lớn được thay bằng cụm extstore nhỏ hơn nhiều.
Kết quả
Theo Netflix: phần lớn cụm EVCache giờ được scale theo nhu cầu mạng, không theo dung lượng lưu trữ. Bài không có con số tiết kiệm bằng tiền.
Vì sao
Theo Netflix: đa region nhân ba dữ liệu cache, và giữ hết trên RAM thì quá đắt.
Bài học cho SWE
- Đa region có giá: không chỉ replication DB mà cả cache cũng phải nhân bản. Xem Độ tin cậy và multi-region.
- Đặt SLA trước rồi chọn tầng lưu trữ rẻ nhất đạt SLA. SSD chậm hơn RAM hàng trăm lần nhưng vẫn đủ nếu SLA là mili giây.
- Thử một kiến trúc (Moneta), thấy giới hạn ở workload ghi đè, rồi đổi sang cách khác (extstore). Không có lời giải đúng cho mọi workload.
Liên quan
Được nhắc tới trong
Công ty (1)