DynamoDB: Why migrate to DynamoDB from Cassandra?

Bài tóm tắt Expedia 2018 3. Quy mô lớn Độ khó: Dễ

Expedia · 2018 · 3. Quy mô lớn · Độ khó: Dễ — bài gốc

Bài thứ 2 trong series về DynamoDB của Expedia Group Tech. Đây là bài so sánh và đánh giá, không kể một cuộc migration cụ thể. Các giới hạn DynamoDB nêu dưới đây là của năm 2018.

Bối cảnh

Cassandra cho người dùng tự quyết gần như mọi thứ: số replica, chỗ đặt replica, mức consistency, số node. Theo tác giả, chính điều đó đặt độ bền và hiệu năng vào tay người cấu hình.

So sánh chính (theo Expedia, 2018)

Khía cạnh Cassandra DynamoDB
Replica Tự cấu hình số lượng và vị trí Cố định 3 replica, mỗi AZ một bản
Consistency ANY, ONE, QUORUM, ALL cho cả đọc và ghi Đọc: eventual hoặc strong; ghi luôn đồng bộ tới 2 AZ, bất đồng bộ tới AZ thứ 3
Dữ liệu tăng Tự lo dung lượng node, thêm node Tự tách partition (khi đó mỗi partition tối đa 10 GB)
Batch Nguyên tử Không nguyên tử, trả về item lỗi để retry
Vận hành Tự chọn instance, EBS hay ephemeral, compaction, tombstone, VPN đa region Managed
Capacity planning Phải dựng ring rồi test Tính được: mỗi partition 3.000 RCU / 1.000 WCU; 12.000 đọc/s × 4 KB là 4 partition

Khi nào không nên dùng DynamoDB (theo Expedia)

  • Cassandra mô hình hoá và tinh chỉnh tốt có thể đạt dưới 1 ms; DynamoDB thường 5–10 ms (trừ khi dùng DAX).
  • Item tối đa 400 KB; TTL chỉ ở mức item.
  • Đọc làm tròn lên 4 KB, ghi lên 1 KB, nên payload vài byte vẫn trả tiền cả khối; lưu trữ cũng tính tiền.
  • Nội bộ bị che: khi có hot spot thì muốn xem access log phải mở ticket với AWS.
  • Khi dữ liệu tăng, các partition chia nhau đúng lượng RCU/WCU đã cấp, nên phải tăng thêm nếu tải cũng tăng.

Bài học cho SWE

  • Đổi từ DB tự vận hành sang managed là đổi quyền kiểm soát lấy gánh nặng vận hành ít hơn: mất khả năng tinh chỉnh latency và quan sát nội bộ, được capacity planning đơn giản.
  • Mô hình tính tiền theo đơn vị đọc/ghi làm kích thước payload và mẫu truy cập trở thành biến chi phí (Chi phí hạ tầng và build vs buy).
  • Cùng hướng Cassandra → DynamoDB: Wix Inbox (Wix 2021). Hướng ngược lại (tự vận hành để có latency thấp): Discord với Cassandra rồi ScyllaDB (Chọn database theo workload).

Liên quan