ฉันเริ่มดูวิธีการซิงโครไนซ์ข้อมูลระหว่างกลุ่มเพื่อน คนรอบข้างต้องสามารถทำงานได้ในวิธีที่ไม่ได้เชื่อมต่อและจากนั้นประสานกันเพื่อรวมการเปลี่ยนแปลงในท้องถิ่นของพวกเขา
ทำเนียบควรจะสามารถที่จะผสานการปรับปรุงในท้องถิ่นด้วย"สามวิธีผสาน" ดังนั้นในการทำข้อมูลให้ตรงกันควรรู้ว่าข้อเท็จจริงใดเป็นข้อมูลล่าสุด แต่เมื่อไม่มีคำสั่งที่เข้มงวดพวกเขาควรจะสามารถรวมข้อเท็จจริงเข้าด้วยกันตามรากที่พบบ่อย
เมื่อเพื่อนร่วมงานอิสระทำการเปลี่ยนแปลงพวกเขาสามารถ "ประทับเวลา" ด้วย "นาฬิกา" ฉันใช้คำว่า "นาฬิกา" และ "การประทับเวลา" แต่ฉันไม่ได้หมายถึงนาฬิกาเวลาติดผนัง ฉันหมายถึงการเรียงลำดับบางส่วนของเหตุการณ์ที่ทำให้เกิดความชัดเจน มันเป็นความสัมพันธ์"ที่เกิดขึ้นก่อนหน้า"ระหว่างเหตุการณ์ที่เกิดขึ้นในรูปแบบ acyclic graph (DAG)
ดูเหมือนว่าวิธีที่ "ปกติ" ที่จะทำนี้สร้างการสั่งซื้อบางส่วนโดยใช้นาฬิกาเวกเตอร์ อย่างไรก็ตามสิ่งเหล่านี้อาจมีขนาดใหญ่มาก การพัฒนาล่าสุดเช่นนาฬิกาต้นไม้ช่วงเวลาจะช่วยให้การจัดเก็บเวลามีขนาดกะทัดรัดยิ่งขึ้น
สิ่งที่ฉันไม่ชัดเจนเลยก็คือทำไมโปรโตคอลการซิงโครไนซ์ไม่ "เพียงแค่" เก็บ DAG อย่างชัดเจน (หรือพวกเขา?)
เพียร์สามารถสร้างการประทับเวลาอย่างอิสระโดยการสุ่มสร้าง UUID (หรือโดยวิธีอื่น ๆ เช่น<peer-name> + <local-monotonically-increasing-counter>
) การเรียงลำดับของการประทับเวลานี้มีความชัดเจนต่อเพื่อนคนนั้น
เมื่อเพื่อน 2 คนซิงค์กันพวกเขาสามารถตกลงในการประทับเวลาใหม่ การเรียงลำดับของการประทับเวลานี้อีกครั้งชัดเจนสำหรับทั้งสองคน
ขณะนี้มีความต้องการที่จะผ่านสิ่งที่เกิดขึ้นก่อน DAG ระหว่างเพื่อน แต่การจัดเก็บและข้อกำหนดแบนด์วิดท์ของเรื่องนี้มีขนาดเล็ก จุดเวลาคือกราฟจุดสุดยอด ด้วยเหตุนี้จึงมีขอบขาเข้า 1 หรือ 2 (1 สำหรับเหตุการณ์บนไคลเอ็นต์และ 2 สำหรับการซิงค์ระหว่างไคลเอ็นต์) นี่เป็นขอบเขตและเป็นอิสระจากจำนวนของเพียร์ในเครือข่าย
ในการใช้จุดเวลาแต่ละจุดคุณต้องใช้กราฟของจุดเวลาที่นำไปสู่จุดนี้ อย่างไรก็ตามเท่าที่ฉันสามารถเห็นได้เพียร์ใด ๆ ที่สามารถรู้จุดเวลา (มันสร้างขึ้นเองหรือสร้างขึ้นด้วยเพียร์อื่นหรือได้รับการบอกกล่าวโดยเพียร์อื่นเมื่อซิงโครไนซ์กับมัน) ก็มี โอกาสที่จะรู้เกี่ยวกับประวัติศาสตร์ที่นำไปสู่จุดนั้น ฉันคิดว่าอาจมีหลักฐานอุปนัยสำหรับเรื่องนี้
เมื่อพิจารณาว่าการจัดเก็บและการซิงค์ DAG ดูเหมือนง่าย: ใช้ในทางปฏิบัติหรือไม่ ถ้าไม่ทำไมนาฬิกาเวกเตอร์ถึงเป็นที่ต้องการ?
หมายเหตุ
เพียร์กับเพื่อน
ฉันต้องการโซลูชันเพียร์ทูเพียร์เหนือโซลูชันเซิร์ฟเวอร์ไคลเอ็นต์
โทโพโลยีปลายที่น่าจะเป็นไคลเอนต์จำนวนมากที่เชื่อมต่อกับกลุ่มของเซิร์ฟเวอร์ที่เล็กกว่าที่ทำซ้ำกันเอง อย่างไรก็ตามจะเป็นการดีถ้ามีโซลูชันทั่วไปที่สนับสนุนโทโพโลยีเฉพาะนี้แทนที่จะเป็นโซลูชันที่ต้องใช้โทโปโลยีเฉพาะนี้