Bir dizi akran arasında veri senkronizasyonu yaklaşımlarına bakmaya başladım. Eşlerin bağlantısı kesilmiş bir şekilde çalışabilmeli ve daha sonra yerel değişikliklerini birleştirmek için birlikte senkronize edebilmelidir.
Eşler yerel güncellemeleri "üç yönlü birleştirme" ile birleştirebilmelidir . Bu nedenle, senkronizasyonda akranlar hangi olguların daha yeni olduğunu bilmelidir, ancak katı bir siparişin olmadığı yerlerde, ortak kökene dayanan gerçekleri birleştirebilmelidirler.
Bağımsız akranlar değişiklik yaptığında, onları bir "saat" ile "zaman damgası" yapabilirler. "Saat" ve "zaman damgası" terimlerini kullanıyorum ama duvar saati anlamına gelmiyorum. Nedeni açıklığa kavuşturan olayların bir tür kısmi sıralaması demek istiyorum. Bu var "daha önce oldu" yönlendirilmiş Mercury grafik (DAG) oluşturan olaylar arasında ilişki.
Bu kısmi sıralamayı yapmanın "olağan" yolu bir vektör saati kullanmak gibi görünüyor . Ancak bunlar çok büyük olabilir. Aralıklı ağaç saatleri gibi daha yeni gelişmeler , zaman damgalarının daha kompakt bir şekilde saklanmasını sağlar.
Ne hakkında net değilim senkronizasyon protokolleri görünüşte DAG açıkça "basit" saklamıyor neden. (Ya da öyle mi?)
Eşler, rastgele bir UUID (veya başka yollarla <peer-name> + <local-monotonically-increasing-counter>
) oluşturarak bağımsız olarak bir zaman damgası oluşturabilir . Bu zaman damgasının sıralaması bu akran için tamamen açıktır.
2 eş birbiriyle senkronize olduğunda, yeni bir zaman damgası üzerinde anlaşabilirler. Yine, bu zaman damgasının sırası her iki akran için de açıktır.
Şimdi olanları eşler arasında DAG'dan önce geçirme şartı var, ancak bunun depolama ve bant genişliği gereksinimleri küçük. Zaman noktaları grafik tepe noktalarıdır. Bu nedenle, 1 veya 2 gelen kenarı vardır (istemcideki bir olay için 1 ve istemciler arasında bir senkronizasyon için 2). Bu sınırlıdır ve ağdaki eş sayısından bağımsızdır.
Tek bir zaman noktasını kullanmak için, buna yol açan zaman noktalarının grafiğine ihtiyacınız vardır. Ancak, bildiğim kadarıyla gördüğünüz gibi, mümkün olan herhangi bir akran biliyorum bir zaman noktasının (o bunu kendisi oluşturulan veya başka eş ile oluşturulan, ya da onunla senkronize ederken başka eş tarafından da söylendiğini olan) olan da vardı o zaman noktasına kadar giden tarihi bilmek için bir fırsat. Bence bunun için endüktif bir kanıt var.
DAG'yi açık bir şekilde saklamanın ve senkronize etmenin basit göründüğü göz önüne alındığında: bu pratikte kullanılıyor mu? Değilse, neden vektör saatler tercih edilir?
notlar
Eşler arası
Bir istemci sunucu çözümü üzerinde bir eşler arası çözümü tercih ederim.
Muhtemel son topoloji, kendi aralarında çoğaltan çok daha küçük bir sunucu grubuna bağlanan birçok istemci olacaktır. Bununla birlikte, bu özel topolojiyi gerektiren bir çözümden ziyade bu özel topolojiyi destekleyen genel bir çözüme sahip olmak güzel olurdu.