CRDTs sử dụng Math để thi hành thống nhất trên một cụm phân tán, mà không cần phải lo lắng về việc đồng thuận và một độ trễ/không có sẵn liên tục. Tập hợp các giá trị mà CRDT có thể thực hiện bất cứ lúc nào thuộc danh mục của mạng bán (cụ thể là mạng bán kết nối), là một POSET (bộ được đặt một phần) với chức năng giới hạn trên thấp nhất (LUB).
Nói một cách đơn giản, POSET là tập hợp các mục mà không phải tất cả đều có thể so sánh được. Ví dụ. trong một mảng các cặp: {(2,4), (4, 5), (2, 1), (6, 3)}
, (2,4)
là < (4,5)
, nhưng không thể so sánh với (6,3)
(vì một phần tử lớn hơn và phần tử còn lại nhỏ hơn). Bây giờ, một mạng bán là một POSET trong đó cho 2 cặp, ngay cả khi bạn không thể so sánh hai cặp, bạn có thể tìm thấy một phần tử lớn hơn cả hai.
Điều kiện khác là cập nhật đối với loại dữ liệu này cần phải tăng lên, CRDT có trạng thái tăng đơn điệu, nơi khách hàng không bao giờ quan sát trạng thái cuộn ngược.
Điều này excellent article sử dụng mảng tôi đã sử dụng ở trên làm ví dụ. Đối với CRDT duy trì các giá trị đó, nếu 2 bản sao đang cố gắng đạt được sự đồng thuận giữa (4,5)
và (6,3)
, họ có thể chọn LUB = (6,5)
làm sự đồng thuận và chỉ định cả hai bản sao cho nó. Vì các giá trị đang tăng lên, đây là một giá trị tốt để giải quyết. Có 2 cách để CRDT giữ đồng bộ với nhau qua các bản sao, chúng có thể chuyển trạng thái theo định kỳ (kiểu dữ liệu được nhân bản hội tụ), hoặc chúng có thể truyền cập nhật (deltas) khi chúng nhận được chúng (kiểu dữ liệu nhân bản giao hoán).). Trước đây có thêm băng thông.
SoundCloud's Roshi là một ví dụ điển hình (mặc dù không còn phát triển), chúng lưu trữ dữ liệu được liên kết với dấu thời gian, nơi dấu thời gian rõ ràng là tăng dần. Bất kỳ cập nhật nào đến với dấu thời gian nhỏ hơn hoặc bằng giá trị được lưu trữ sẽ bị hủy bỏ, đảm bảo tính không hoạt động (lặp lại ghi là OK) và tính tương đối (không cần viết là ok). giống như update2 theo sau là update1)
Ghi được gửi tới tất cả các cụm và nếu một số nút nhất định không phản hồi do sự cố như chậm hoặc phân vùng, chúng sẽ được cập nhật sau qua read-repair
. các giá trị hội tụ. Hội tụ có thể đạt được thông qua 2 giao thức như tôi đã đề cập ở trên, tuyên truyền trạng thái hoặc cập nhật cho các bản sao khác. Tôi tin Roshi là người trước đây. Là một phần của read-repair
, trạng thái trao đổi bản sao và vì dữ liệu tuân theo thuộc tính bán mạng, chúng hội tụ.
PS. Các hệ thống sử dụng CRDTs cuối cùng là phù hợp, tức là chúng áp dụng AP (khả năng chịu cao và phân vùng) trong CAP theorem.
Another excellent read on the subject.
Đánh dấu câu trả lời được chấp nhận nếu câu trả lời cho câu hỏi của bạn. –