Call me maybe: Cassandra
Bài tóm tắt Jepsen 2013 3. Quy mô lớn Độ khó: Khó
Jepsen · 2013 · 3. Quy mô lớn · Độ khó: Khó — bài gốc
Bài thời kỳ đầu của Jepsen (blog cá nhân); ghi "theo Kingsbury" với các nhận định.
Bối cảnh
- Cassandra theo mô hình Dynamo (hash ring, N bản, quorum điều chỉnh được, hinted handoff, anti-entropy) nhưng bỏ vector clock để dùng last-write-wins thuần: một round-trip mỗi ghi thay vì hai.
Thay đổi chính (kết quả)
- Sửa một cell không an toàn: dù đồng bộ đồng hồ hoàn hảo, QUORUM và khoá ngoài như tài liệu gợi ý, 285/1.009 ghi được ack bị mất (28%).
- Ghi dữ liệu bất biến thì an toàn: thêm phần tử vào CQL set giữ đủ 2.000/2.000 (hành xử như CRDT). Nên cẩn thận với thao tác list theo index, cập nhật map, và mọi kiểu xoá (tombstone có thể xoá cả ghi "từ tương lai").
- Counter không phải PN-counter: partition nửa thời gian test làm lệch tới 50%.
- Row isolation chỉ là xác suất: hai ghi trùng timestamp thì Cassandra chọn giá trị lớn hơn theo thứ tự từ điển cho từng cell, nên một dòng có thể ghép cell từ hai ghi khác nhau; đâu đó trong stack timestamp chỉ có độ phân giải mili giây (nhân thêm ba số 0), nên khoảng 1/200 dòng hỏng.
- Lightweight transaction (Paxos) trong 2.0.0: deadlock sau khoảng 10 transaction, rồi sau bản vá vẫn mất 1–5% ghi đã ack ngay không cần partition; báo các bug CASSANDRA-6012, 6013, 6029, 5985. DataStax sửa nhanh và đưa một phần test Jepsen vào quy trình nội bộ.
Vì sao
- Không theo dõi nhân quả thì không có cách an toàn để sửa giá trị; mô hình AP buộc dữ liệu phải hợp nhất được không phụ thuộc thứ tự.
Bài học cho SWE
- Với kho LWW, thiết kế dữ liệu là log ghi thêm/CRDT thay vì cập nhật tại chỗ.
- Theo Kingsbury, phần mềm luôn được test, bởi người làm ra nó hoặc bởi người dùng trên production; vài trăm transaction đơn giản đủ bắt các bug này.
Liên quan
Kiểm thử độ tin cậy (chaos, fault injection, mô phỏng tất định)Chọn database theo workloadGiao dịch phân tán và nhất quán xuyên service
#Jepsen#Cassandra 2.0.0#Dynamo#last-write-wins#vector clock#CRDT#CQL collection#tombstone#counter#row isolation#timestamp millisecond#lightweight transaction#Paxos
Được nhắc tới trong
Chủ đề (3)
Công ty (1)