Tôi đang triển khai mã đồng bộ đầu tiên của mình. Trong trường hợp của tôi, tôi sẽ có 2 loại máy khách iOS cho mỗi người dùng sẽ đồng bộ bản ghi với máy chủ bằng cách sử dụng lastSyncTimestamp
, số nguyên 64 bit thể hiện kỷ nguyên Unix trong mili giây của lần đồng bộ hóa cuối cùng. Các bản ghi có thể được tạo trên máy chủ hoặc máy khách bất kỳ lúc nào và các bản ghi được trao đổi dưới dạng JSON qua HTTP.Những cạm bẫy phổ biến của đồng bộ hóa dựa trên dấu thời gian là gì?
Tôi không lo lắng về xung đột vì có vài cập nhật và luôn luôn từ cùng một người dùng. Tuy nhiên, tôi tự hỏi nếu có những điều phổ biến mà tôi cần phải nhận thức được rằng có thể đi sai với một phương pháp dựa trên dấu thời gian như đồng bộ hóa trong thời gian tiết kiệm ánh sáng ban ngày, đồng bộ xung đột với nhau hoặc gotchas khác.
Tôi biết rằng git và một số hệ thống điều khiển phiên bản khác sẽ đồng bộ hóa với dấu thời gian cho một phương pháp tiếp cận đồng bộ hóa thương lượng dựa trên nội dung. Tôi cũng có thể tưởng tượng một cách tiếp cận cho các ứng dụng của mình, khi sử dụng các đối tượng uuid
hoặc hash
của các đối tượng, cả hai đều thông báo đối tượng nào họ sở hữu và sau đó trao đổi chúng cho đến khi cả hai cùng có cùng tập hợp.
Nếu ai biết bất kỳ ưu điểm hay nhược điểm nào của đồng bộ hóa dựa trên nội dung so với đồng bộ dựa trên dấu thời gian nói chung cũng sẽ hữu ích.
Chỉnh sửa - Dưới đây là một số ưu điểm/nhược điểm mà tôi đã đưa ra để xác định thời gian và đồng bộ hóa nội dung. Hãy thử thách/chính xác.
Lưu ý - Tôi đang xác định đồng bộ dựa trên nội dung như cách đàm phán đơn giản 2 bộ đối tượng chẳng hạn như cách 2 đứa trẻ trao đổi thẻ nếu bạn cho mỗi phần của một đống lộn xộn nói với họ rằng khi họ nhìn qua họ để công bố và bàn giao bất kỳ bản sao họ tìm thấy cho người khác cho đến khi cả hai đều có bộ giống hệt nhau.
- Johnny - "Tôi nhận được thẻ này".
- Davey - "Tôi đã nhận được một loạt thẻ. Hãy cho tôi thẻ đó."
- Johnny - "Đây là thẻ của bạn. Ghim loạt thẻ đó đi."
- Davey - "Đây là nhóm thẻ của bạn".
- ....
- Cả hai - "Chúng tôi đang thực hiện"
Ưu điểm của dấu thời gian dựa trên đồng bộ
- dễ dàng để thực hiện
- tài sản đơn sử dụng cho đồng bộ.
Nhược điểm của dấu thời gian dựa trên đồng bộ
- Thời gian là một khái niệm tương đối với người quan sát và đồng hồ máy khác nhau có thể không được đồng bộ. Có một vài cách để giải quyết vấn đề này. Tạo dấu thời gian trên một máy tính duy nhất, không quy mô tốt và đại diện cho một điểm lỗi. Hoặc sử dụng các đồng hồ logic như đồng hồ vectơ. Đối với các nhà phát triển trung bình xây dựng hệ thống riêng của họ, đồng hồ vector có thể quá phức tạp để thực hiện.
- Đồng bộ hóa dựa trên dấu thời gian hoạt động để máy khách đồng bộ hóa chính nhưng không hoạt động tốt cho đồng bộ ngang hàng hoặc đồng bộ hóa có thể xảy ra với 2 chủ.
- Lỗi đơn lẻ, bất kỳ điều gì tạo dấu thời gian.
- Thời gian không thực sự liên quan đến nội dung của những gì đang được đồng bộ hóa.
Ưu điểm của nội dung dựa trên đồng bộ
- Không per peer timestamp cần phải được duy trì. 2 đồng nghiệp có thể bắt đầu phiên đồng bộ hóa và bắt đầu đồng bộ hóa dựa trên nội dung.
- Điểm cuối được xác định rõ ràng để đồng bộ hóa - khi cả hai bên có bộ giống hệt nhau.
- Cho phép kiến trúc ngang hàng, nơi bất kỳ người ngang hàng nào có thể hoạt động như máy khách hoặc máy chủ, với điều kiện họ có thể lưu trữ máy chủ HTTP.
- Đồng bộ hóa hoạt động với nội dung của bộ, chứ không phải với thời gian khái niệm trừu tượng.
- Vì đồng bộ được xây dựng xung quanh nội dung, đồng bộ hóa có thể được sử dụng để xác minh nội dung nếu muốn. Ví dụ. một hàm băm SHA-1 có thể được tính toán trên nội dung và được sử dụng như uuid. Nó có thể được so sánh với những gì được gửi trong quá trình đồng bộ hóa.
- Hơn nữa, hàm băm SHA-1 có thể dựa trên các băm trước để duy trì lịch sử nội dung nhất quán.
Nhược điểm của nội dung dựa trên đồng bộ
- tính thêm vào đối tượng của bạn có thể cần thiết để thực hiện.
- Nhiều logic hơn trên cả hai mặt so với đồng bộ hóa dựa trên dấu thời gian.
- Giao thức trò chuyện nhiều hơn một chút (điều này có thể được điều chỉnh bằng cách đồng bộ hóa nội dung trong các cụm).
Điểm tốt. Gotcha # 1, luôn sử dụng một máy tính để tính thời gian. Tôi đã không xem xét điều này nhưng tôi có lẽ nên luôn luôn sản xuất lastSyncTimestamp trên máy chủ. –