Tôi đã bắt đầu xem xét các cách tiếp cận để đồng bộ hóa dữ liệu giữa một nhóm các đồng nghiệp. Các đồng nghiệp phải có khả năng làm việc theo cách bị ngắt kết nối và sau đó đồng bộ hóa với nhau để hợp nhất các thay đổi cục bộ của họ.
Các đồng nghiệp có thể hợp nhất các cập nhật cục bộ với "hợp nhất ba chiều" . Vì vậy, tại các đồng nghiệp đồng nghiệp nên biết những sự kiện nào gần đây hơn, nhưng nếu không có thứ tự nghiêm ngặt, họ sẽ có thể hợp nhất các sự kiện dựa trên gốc chung.
Khi các đồng nghiệp độc lập thực hiện thay đổi, họ có thể "đóng dấu thời gian" cho họ bằng "đồng hồ". Tôi sử dụng thuật ngữ "đồng hồ" và "dấu thời gian" nhưng tôi không có nghĩa là đồng hồ treo tường. Tôi có nghĩa là một số loại trật tự một phần của các sự kiện mà làm cho quan hệ nhân quả rõ ràng. Đó là mối quan hệ "đã xảy ra trước đây" giữa các sự kiện hình thành một biểu đồ chu kỳ có hướng (DAG).
Có vẻ như cách "thông thường" để xây dựng thứ tự từng phần này là sử dụng đồng hồ vector . Chúng có thể trở nên rất lớn, tuy nhiên. Nhiều phát triển gần đây như đồng hồ cây khoảng cung cấp lưu trữ tem thời gian nhỏ gọn hơn.
Điều tôi không rõ ràng là tại sao các giao thức đồng bộ hóa dường như không "đơn giản" lưu trữ DAG một cách rõ ràng. (Hay là họ?)
Các đồng nghiệp có thể độc lập tạo dấu thời gian bằng cách tạo ngẫu nhiên UUID (hoặc bằng các phương tiện khác, chẳng hạn như <peer-name> + <local-monotonically-increasing-counter>
). Thứ tự của dấu thời gian này là hoàn toàn rõ ràng với đồng nghiệp đó.
Khi 2 đồng nghiệp đồng bộ với nhau, họ có thể đồng ý về dấu thời gian mới. Một lần nữa, thứ tự của dấu thời gian này là rõ ràng cho cả các đồng nghiệp.
Hiện tại có một yêu cầu để vượt qua xảy ra trước DAG giữa các đồng nghiệp, nhưng yêu cầu lưu trữ và băng thông của điều này là nhỏ. Điểm thời gian là đỉnh đồ thị. Như vậy, chúng có 1 hoặc 2 cạnh đến (1 cho một sự kiện trên máy khách và 2 cho đồng bộ giữa các máy khách). Điều này được giới hạn và độc lập với số lượng đồng nghiệp trong mạng.
Để sử dụng một điểm thời gian riêng lẻ, bạn cần có biểu đồ về các điểm thời gian dẫn đến điều này. Tuy nhiên, theo như tôi có thể thấy, bất kỳ đồng nghiệp nào có thể biết về một điểm thời gian (nó đã tự tạo hoặc tạo nó với một đồng đẳng khác hoặc đã được một đồng nghiệp khác nói với nó khi đồng bộ hóa với nó) cũng đã có một cơ hội để biết về lịch sử dẫn đến thời điểm đó. Tôi nghĩ có lẽ có một bằng chứng quy nạp cho việc này.
Cho rằng việc lưu trữ và đồng bộ DAG rõ ràng có vẻ đơn giản: điều này có được sử dụng trong thực tế không? Nếu không, tại sao đồng hồ vector được ưa thích?
Ghi chú
Ngang ngang
Tôi muốn một giải pháp ngang hàng hơn một giải pháp máy chủ.
Cấu trúc liên kết cuối có khả năng sẽ có nhiều máy khách kết nối với một nhóm máy chủ nhỏ hơn nhiều bản sao chúng. Tuy nhiên, thật tuyệt khi có một giải pháp chung hỗ trợ cấu trúc liên kết cụ thể này hơn là một giải pháp yêu cầu cấu trúc liên kết cụ thể này.