ในระบบกระจาย (Distributed Systems) ปัญหาหนึ่งที่มักพบคือการประสานเวลาระหว่างเครื่องต่างๆ ที่ไม่มีการเชื่อมต่อกันโดยตรง ซึ่งเป็นเรื่องยากที่ทุกเครื่องในระบบจะเห็นเวลาเดียวกัน หรือสามารถจัดลำดับเหตุการณ์ที่เกิดขึ้นในแต่ละเครื่องได้อย่างถูกต้อง
ปัญหาคืออะไร?
ในระบบกระจาย เมื่อเครื่องหลายเครื่องทำงานพร้อมกัน มักจะมีการดำเนินการต่างๆ เช่น การส่งข้อความจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง ซึ่งการจะทำให้เครื่องแต่ละเครื่องสามารถเข้าใจลำดับเหตุการณ์เหล่านั้นได้เป็นสิ่งที่ท้าทาย เพราะแต่ละเครื่องอาจจะมีการตั้งเวลา (Clock) ที่ไม่ตรงกันหรือแตกต่างกัน และอาจจะไม่ได้อยู่ในสภาพแวดล้อมที่สามารถซิงโครไนซ์เวลาได้ตลอดเวลา
ยกตัวอย่างเช่น หากเครื่องหนึ่งส่งข้อความไปยังเครื่องอื่น เราจะรู้ได้อย่างไรว่าเหตุการณ์นี้เกิดขึ้นก่อนหรือหลังจากเหตุการณ์อื่นในเครื่องที่ต่างกัน?
Solving the Problem: Lamport Clock
Lamport Clock เป็นกลไกที่ถูกพัฒนาขึ้นมาเพื่อแก้ไขปัญหานี้ โดยไม่จำเป็นต้องมีการซิงโครไนซ์เวลาในระบบทั้งหมด แต่ให้ทุกเครื่องสามารถรักษาลำดับเหตุการณ์ได้ด้วยการใช้ตัวนับเหตุการณ์ (logical clock) ที่ถูกปรับปรุงเมื่อมีการส่งหรือรับข้อความระหว่างเครื่องต่างๆ
หลักการของ Lamport Clock:
- ทุกเครื่องในระบบจะมีการตั้งตัวนับเหตุการณ์ (logical clock) ของตนเอง
- เมื่อเครื่องทำการส่งข้อความไปยังเครื่องอื่น ตัวนับของเครื่องต้นทางจะเพิ่มขึ้นก่อนส่งข้อความ
- เมื่อเครื่องรับข้อความจากเครื่องต้นทาง ตัวนับของเครื่องรับจะถูกปรับขึ้นให้สูงกว่า (max) ระหว่างตัวนับของเครื่องตัวเองและตัวนับที่ส่งมาจากเครื่องต้นทาง
- ด้วยวิธีนี้ ทุกเครื่องจะสามารถติดตามลำดับเหตุการณ์ในระบบกระจายได้โดยไม่จำเป็นต้องใช้เวลาจริง (real clock) ที่ซิงโครไนซ์กัน
ข้อดีและข้อจำกัดของ Lamport Clock
- ข้อดี: ระบบสามารถทำงานได้แม้เครื่องต่างๆ จะไม่ซิงโครไนซ์เวลา เนื่องจากใช้ตัวนับเหตุการณ์ในการจัดการลำดับเหตุการณ์
- ข้อจำกัด: Lamport Clock สามารถช่วยได้เพียงแค่การจัดลำดับเหตุการณ์เท่านั้น และไม่สามารถบอกได้ว่าเหตุการณ์ใดเกิดขึ้นก่อนหรือหลังอย่างแน่ชัด เนื่องจากมันไม่ใช่การจับเวลาในเชิงปริมาณ (absolute time)
สรุป
Lamport Clock เป็นแนวทางที่มีประโยชน์ในการจัดการเวลาในระบบกระจายโดยไม่ต้องพึ่งพาการซิงโครไนซ์เวลาจริงระหว่างเครื่อง แต่ยังคงสามารถรักษาลำดับเหตุการณ์ได้ในระดับที่เพียงพอสำหรับการประสานงานในระบบที่กระจายทั่วกัน
https://martinfowler.com/articles/patterns-of-distributed-systems/lamport-clock.html
Top comments (0)