Kiến trúc hệ thốngĐịnh lý CAP (CAP Theorem)

Định lý CAP (CAP Theorem)

Nội dung bài

Định lý CAP (CAP Theorem)

Đánh đổi10 phút đọcThe System Design Primer - mục "Availability vs consistency / CAP theorem"

Mục lục
  1. Nội dung gốc
  2. Ghi chú của người dịch

Định lý CAP (CAP Theorem)

Nội dung gốc

Sơ đồ định lý CAP
Nguồn: CAP theorem revisited

Trong một hệ thống máy tính phân tán, bạn chỉ có thể đáp ứng hai trong ba đảm bảo sau:

Mạng vốn không đáng tin cậy, nên bạn buộc phải hỗ trợ khả năng chịu phân mảnh. Việc bạn phải làm là đánh đổi giữa tính nhất quán và tính sẵn sàng ở tầng phần mềm.

Khi mạng bị phân mảnh, hệ thống phải chọn CP hoặc AP Node A Node B mạng bị phân mảnh (partition) CP từ chối / chờ, giữ dữ liệu đúng AP vẫn trả lời, dữ liệu có thể cũ
Lúc mạng bình thường không có đánh đổi nào; chỉ khi phân mảnh xảy ra, hệ thống mới buộc phải chọn CP (từ chối/chờ) hoặc AP (vẫn trả lời, có thể cũ).

CP - nhất quán và chịu phân mảnh

Việc chờ phản hồi từ node bị chia cắt có thể dẫn tới lỗi hết thời gian chờ (timeout). CP là lựa chọn tốt nếu nghiệp vụ của bạn đòi hỏi đọc và ghi mang tính nguyên tử (atomic).

AP - sẵn sàng và chịu phân mảnh

Phản hồi trả về phiên bản dữ liệu sẵn có nhất trên bất kỳ node nào, và phiên bản đó có thể không phải mới nhất. Các thao tác ghi có thể mất một khoảng thời gian để lan truyền khi tình trạng phân mảnh được khắc phục.

AP là lựa chọn tốt nếu nghiệp vụ cho phép nhất quán cuối cùng (eventual consistency), hoặc khi hệ thống cần tiếp tục chạy bất chấp lỗi từ bên ngoài.

Ví dụ chọn CP hay AP theo từng chức năng Chọn CP khi... Chuyển khoản, trừ tiền Đặt vé số lượng có hạn Chọn AP khi... Lượt thích, lượt xem Giỏ hàng, bảng tin Quyết định theo từng chức năng, không phải toàn hệ thống
Chuyển khoản, đặt vé giới hạn nên chọn CP; lượt thích, giỏ hàng, feed mạng xã hội chọn AP được — quyết định theo từng chức năng, không phải toàn hệ thống.

Nguồn và đọc thêm


Nguồn: The System Design Primer - mục "Availability vs consistency / CAP theorem" — Donne Martin và cộng đồng đóng góp

Giấy phép: CC BY 4.0 (nguyên bản: Donne Martin, The System Design Primer)

Xem bản gốc

Bài tiếp theoCác mẫu nhất quán (Consistency Patterns)