อย่างชัดเจน DAG แทน Vector Clocks สำหรับการซิงโครไนซ์


13

ฉันเริ่มดูวิธีการซิงโครไนซ์ข้อมูลระหว่างกลุ่มเพื่อน คนรอบข้างต้องสามารถทำงานได้ในวิธีที่ไม่ได้เชื่อมต่อและจากนั้นประสานกันเพื่อรวมการเปลี่ยนแปลงในท้องถิ่นของพวกเขา

ทำเนียบควรจะสามารถที่จะผสานการปรับปรุงในท้องถิ่นด้วย"สามวิธีผสาน" ดังนั้นในการทำข้อมูลให้ตรงกันควรรู้ว่าข้อเท็จจริงใดเป็นข้อมูลล่าสุด แต่เมื่อไม่มีคำสั่งที่เข้มงวดพวกเขาควรจะสามารถรวมข้อเท็จจริงเข้าด้วยกันตามรากที่พบบ่อย

เมื่อเพื่อนร่วมงานอิสระทำการเปลี่ยนแปลงพวกเขาสามารถ "ประทับเวลา" ด้วย "นาฬิกา" ฉันใช้คำว่า "นาฬิกา" และ "การประทับเวลา" แต่ฉันไม่ได้หมายถึงนาฬิกาเวลาติดผนัง ฉันหมายถึงการเรียงลำดับบางส่วนของเหตุการณ์ที่ทำให้เกิดความชัดเจน มันเป็นความสัมพันธ์"ที่เกิดขึ้นก่อนหน้า"ระหว่างเหตุการณ์ที่เกิดขึ้นในรูปแบบ acyclic graph (DAG)

ดูเหมือนว่าวิธีที่ "ปกติ" ที่จะทำนี้สร้างการสั่งซื้อบางส่วนโดยใช้นาฬิกาเวกเตอร์ อย่างไรก็ตามสิ่งเหล่านี้อาจมีขนาดใหญ่มาก การพัฒนาล่าสุดเช่นนาฬิกาต้นไม้ช่วงเวลาจะช่วยให้การจัดเก็บเวลามีขนาดกะทัดรัดยิ่งขึ้น

สิ่งที่ฉันไม่ชัดเจนเลยก็คือทำไมโปรโตคอลการซิงโครไนซ์ไม่ "เพียงแค่" เก็บ DAG อย่างชัดเจน (หรือพวกเขา?)

เพียร์สามารถสร้างการประทับเวลาอย่างอิสระโดยการสุ่มสร้าง UUID (หรือโดยวิธีอื่น ๆ เช่น<peer-name> + <local-monotonically-increasing-counter>) การเรียงลำดับของการประทับเวลานี้มีความชัดเจนต่อเพื่อนคนนั้น

เมื่อเพื่อน 2 คนซิงค์กันพวกเขาสามารถตกลงในการประทับเวลาใหม่ การเรียงลำดับของการประทับเวลานี้อีกครั้งชัดเจนสำหรับทั้งสองคน

ขณะนี้มีความต้องการที่จะผ่านสิ่งที่เกิดขึ้นก่อน DAG ระหว่างเพื่อน แต่การจัดเก็บและข้อกำหนดแบนด์วิดท์ของเรื่องนี้มีขนาดเล็ก จุดเวลาคือกราฟจุดสุดยอด ด้วยเหตุนี้จึงมีขอบขาเข้า 1 หรือ 2 (1 สำหรับเหตุการณ์บนไคลเอ็นต์และ 2 สำหรับการซิงค์ระหว่างไคลเอ็นต์) นี่เป็นขอบเขตและเป็นอิสระจากจำนวนของเพียร์ในเครือข่าย

ในการใช้จุดเวลาแต่ละจุดคุณต้องใช้กราฟของจุดเวลาที่นำไปสู่จุดนี้ อย่างไรก็ตามเท่าที่ฉันสามารถเห็นได้เพียร์ใด ๆ ที่สามารถรู้จุดเวลา (มันสร้างขึ้นเองหรือสร้างขึ้นด้วยเพียร์อื่นหรือได้รับการบอกกล่าวโดยเพียร์อื่นเมื่อซิงโครไนซ์กับมัน) ก็มี โอกาสที่จะรู้เกี่ยวกับประวัติศาสตร์ที่นำไปสู่จุดนั้น ฉันคิดว่าอาจมีหลักฐานอุปนัยสำหรับเรื่องนี้

เมื่อพิจารณาว่าการจัดเก็บและการซิงค์ DAG ดูเหมือนง่าย: ใช้ในทางปฏิบัติหรือไม่ ถ้าไม่ทำไมนาฬิกาเวกเตอร์ถึงเป็นที่ต้องการ?


หมายเหตุ

เพียร์กับเพื่อน

ฉันต้องการโซลูชันเพียร์ทูเพียร์เหนือโซลูชันเซิร์ฟเวอร์ไคลเอ็นต์

โทโพโลยีปลายที่น่าจะเป็นไคลเอนต์จำนวนมากที่เชื่อมต่อกับกลุ่มของเซิร์ฟเวอร์ที่เล็กกว่าที่ทำซ้ำกันเอง อย่างไรก็ตามจะเป็นการดีถ้ามีโซลูชันทั่วไปที่สนับสนุนโทโพโลยีเฉพาะนี้แทนที่จะเป็นโซลูชันที่ต้องใช้โทโปโลยีเฉพาะนี้


ฉันอาจเข้าใจผิดว่าคุณกำลังพูดอะไร แต่ก็ไม่มีความชัดเจนว่ากราฟของเหตุการณ์ทั้งหมดที่นำไปสู่รัฐอาจเล็กกว่าเวกเตอร์เคาน์เตอร์ นอกจากว่าคุณอยู่ในระบบที่มีโหนดจำนวนมากและมีการเปลี่ยนแปลงจำนวนน้อยมาก
kdgregory

ขอบคุณ @kdgregory - จุดดี ในการคำนวณการรวมสามทางในอนาคตคุณจำเป็นต้องรู้อดีต (และสามารถกำหนด DAG ของคะแนนเวลาที่ผ่านมา) ดังนั้นหากคุณเก็บคะแนนเวลาที่ผ่านมาเหล่านั้นการจัดเก็บ DAG อย่างชัดเจนจะถูกกว่า หากคุณไม่ได้จัดเก็บคะแนนในอดีตคุณไม่สามารถคำนวณข้อมูลสามทางได้ - ฉันสงสัยว่าความต้องการสามทางนี้อาจเป็นอย่างนั้นหรือไม่? หากคุณไม่ต้องการ 3 ทางบางทีอาจเป็นนาฬิกาแบบเวกเตอร์ได้ดีกว่า DAG ที่ชัดเจน?
Benjohn

ฉันคิดว่านี่อาจเป็นจุดสำคัญ @kdgregory ดังนั้นฉันได้เพิ่มเล็กน้อยเกี่ยวกับคำถาม ฉันสมมติว่าเป็นไปได้ที่จะทำการรวมแบบสามทางซึ่งหมายความว่าเป็นที่รู้จักกันในประวัติศาสตร์ทั้งหมด หากทราบประวัติทั้งหมดแล้ว (ฉันนับว่า) DAG ที่ชัดเจนนั้นมีราคาถูกกว่า หากประวัติถูกตัดทอนนาฬิกาเวกเตอร์อาจเป็นวิธีที่มีค่าใช้จ่ายน้อยกว่า
Benjohn

1
ใช่ความเข้าใจของฉันเกี่ยวกับนาฬิกาแบบเวกเตอร์ก็คือพวกมันมีจุดประสงค์เพื่อการตัดสินใจยอมรับ / ปฏิเสธ: "โหนด C กำลังพยายามอัปเดตข้อมูลชิ้นนี้
kdgregory

คำตอบ:


1

เท่าที่ฉันสามารถบอกได้ระบบควบคุมเวอร์ชันเช่น Git และ Mercurial ใช้วิธี DAG แทนนาฬิกาเวกเตอร์


1
คำตอบนี้อาจไร้ประโยชน์ในกรณีที่คนอื่นโพสต์ความคิดเห็นตรงข้ามโดยไม่มีคำอธิบาย ตัวอย่างเช่นหากมีคนโพสต์การอ้างสิทธิ์เช่น"ระบบควบคุมการเปลี่ยนทิศทางเช่น Git และ Mercurial ใช้นาฬิกาแบบเวกเตอร์แทนที่จะใช้วิธี DAG"คำตอบนี้จะช่วยให้ผู้อ่านเลือกสองความเห็นตรงข้ามได้อย่างไร ลองพิจารณาแก้ไขให้เป็นรูปร่างที่ดีขึ้นเพื่อให้ได้ตามวิธีการตอบมาตรฐานคุณภาพ
ริ้น

2
วิธีที่ฉันเข้าใจคำถามพวกเขาถามว่ามีตัวอย่างของโลกแห่งความจริงที่ใช้ DAG แทนที่จะเป็นนาฬิกาเวกเตอร์หรือไม่
bikeman868

1
ทั้ง Git และ Mecurial เป็นตัวอย่างในโลกแห่งความเป็นจริงของ peer-to-peer การประสานการเปลี่ยนแปลงโดยใช้ DAG และฉันหวังว่า benjohn จะพบคำตอบของฉันที่เป็นประโยชน์แม้ว่าคุณจะลงคะแนน
bikeman868

สวัสดี @ bikeman868 ฉันลงคะแนนให้คุณเพื่อ net 0 (ขอโทษ) คำตอบของคุณมีประโยชน์แม้ว่าจะไม่แน่ใจ! ในขณะที่การอ้างอิงหรือคำตอบที่เชื่อถือได้เสมอการแลกเปลี่ยนสแต็คไม่ได้บังคับว่า! ข้อเสนอแนะของคุณเหมาะสมกับความคิดเห็นในคำถาม ดูเหมือนว่าเมื่อคุณต้องการเก็บประวัติและสามารถผสานประวัติได้แล้ว DAG นั้นเหมาะสม เมื่อคุณไม่เก็บประวัติและต้องการซิงโครไนซ์และฉันทามติในสถานะปัจจุบันนาฬิกาเวกเตอร์เป็นสิ่งที่คุณต้องการ
Benjohn

1

ลองดูที่ปัญหาฉันทามติ ขึ้นอยู่กับข้อกำหนดของงานของคุณ (เท่าที่คุณมีข้อมูลจำนวนโหนดที่ซิงค์บ่อยแค่ไหน ฯลฯ ) วิธีแก้ปัญหาที่มีอยู่ (เช่น "แพ") อาจเหมาะสำหรับกรณีของคุณ

อีก (อาจจะสัมผัส) วิธีการที่จะแก้ไขปัญหานี้คือการออกแบบCRDT


Braid HTTPกำลังพยายามสร้างโปรโตคอลการซิงค์สถานะที่อิงกับ CRDT ผ่านการเพิ่ม HTTP พวกเขามีการสร้างภาพที่ยอดเยี่ยมของ Time DAG และ Space DAG และแนวคิดทั้งสองนี้เกี่ยวข้องกันอย่างไรเพื่อให้เกิดความสอดคล้องในที่สุด
ดวน J

-1

โปรโตคอล Aleph เป็นโปรโตคอลไร้ผู้นำ p2p ที่สร้าง DAG แบบกระจายของชุดธุรกรรม (หรือเหตุการณ์) โดยฉันทามติ

https://arxiv.org/pdf/1908.05156


คุณควรขยายคำตอบของคุณเพื่อแสดงให้เห็นว่าโปรโตคอลอ้างอิงอ้างอิงถึงจุดที่เกิดขึ้นจากคำถามเดิมอย่างไร มันเป็นสิ่งสำคัญที่จะทำให้คำตอบแบบพอเพียงเพราะสิ่งนี้เป็นประโยชน์ต่อทุกคนที่เจอคำถามนี้
BobDalgleish
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.