Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

อัลกอริทึมของเบอร์เกลีย์ (Berkeley's Algorithm) ใน C/C++


อัลกอริทึมของเบอร์เกลีย์ (Berkeley's Algorithm) เป็นอัลกอริทึมที่ใช้สำหรับซิงโครไนซ์นาฬิกา (clock synchronization) ในระบบกระจาย (distributed systems) อัลกอริทึมนี้ใช้ในกรณีที่ระบบบางส่วนหรือทั้งหมดในเครือข่ายกระจายมีปัญหาดังนี้:

  • A. เครื่องไม่มีแหล่งเวลาที่แม่นยำ

  • B. เครือข่ายหรือเครื่องไม่มีเซิร์ฟเวอร์ UTC

ระบบกระจาย (Distributed system) ประกอบด้วยโหนดหลายตัวที่แยกทางกายภาพแต่เชื่อมต่อกันผ่านเครือข่าย

อัลกอริทึมของเบอร์เกลีย์ (Berkeley s Algorithm) ใน C/C++

อัลกอริทึมของเบอร์เกลีย์

ในอัลกอริทึมนี้ ระบบจะเลือกโหนดหนึ่งเป็น master/leader node จาก pool ของโหนดในเซิร์ฟเวอร์

ขั้นตอนของอัลกอริทึม:

  • กระบวนการเลือกตั้ง (election process) เลือก master node ในเซิร์ฟเวอร์

  • Leader จะ polling ตัวติดตาม (followers) ที่ให้เวลาของพวกเขาในลักษณะคล้าย อัลกอริทึมของคริสเตียน (Cristian's Algorithm) ทำเป็นระยะ

  • Leader จะคำนวณเวลาสัมพัทธ์ที่โหนดอื่นๆ ต้องปรับเพื่อซิงโครไนซ์กับเวลานาฬิกาสากล (global clock time) ซึ่งเป็นค่าเฉลี่ยของเวลาที่ส่งให้ leader node

มาสรุปขั้นตอนการซิงโครไนซ์นาฬิกาโดยใช้ Berkeley's Algorithm:

โหนดในระบบกระจายพร้อมเวลานาฬิกาของพวกเขา:

N1 -> 14:00 (master node)
N2 -> 13:46
N3 -> 14:15

ขั้นตอนที่ 1 - เลือก Leader, โหนด N1 เป็น master ในระบบ

ขั้นตอนที่ 2 - Leader ขอเวลาจากทุกโหนด

N1 -> time: 14:00
N2 -> time: 13:46
N3 -> time: 14:20

ขั้นตอนที่ 3 - Leader คำนวณค่าเฉลี่ยเวลา และส่งเวลาปรับกลับไปยังโหนดต่างๆ

N1 -> Corrected Time 14:02 (+2)
N2 -> Corrected Time 14:02 (+16)
N3 -> Corrected Time 14:02 (-18)

นี่แสดงให้เห็นว่าการซิงโครไนซ์โหนดของระบบกระจายทำได้อย่างไรโดยใช้ Berkeley's Algorithm