DEV Community

Anuchit Prasertsang
Anuchit Prasertsang

Posted on

ปัญหาของการจัดการเวลาในระบบกระจาย: Lamport Clock

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

ปัญหาคืออะไร?

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

ยกตัวอย่างเช่น หากเครื่องหนึ่งส่งข้อความไปยังเครื่องอื่น เราจะรู้ได้อย่างไรว่าเหตุการณ์นี้เกิดขึ้นก่อนหรือหลังจากเหตุการณ์อื่นในเครื่องที่ต่างกัน?

Solving the Problem: Lamport Clock

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

หลักการของ Lamport Clock:

  1. ทุกเครื่องในระบบจะมีการตั้งตัวนับเหตุการณ์ (logical clock) ของตนเอง
  2. เมื่อเครื่องทำการส่งข้อความไปยังเครื่องอื่น ตัวนับของเครื่องต้นทางจะเพิ่มขึ้นก่อนส่งข้อความ
  3. เมื่อเครื่องรับข้อความจากเครื่องต้นทาง ตัวนับของเครื่องรับจะถูกปรับขึ้นให้สูงกว่า (max) ระหว่างตัวนับของเครื่องตัวเองและตัวนับที่ส่งมาจากเครื่องต้นทาง
  4. ด้วยวิธีนี้ ทุกเครื่องจะสามารถติดตามลำดับเหตุการณ์ในระบบกระจายได้โดยไม่จำเป็นต้องใช้เวลาจริง (real clock) ที่ซิงโครไนซ์กัน

ข้อดีและข้อจำกัดของ Lamport Clock

  • ข้อดี: ระบบสามารถทำงานได้แม้เครื่องต่างๆ จะไม่ซิงโครไนซ์เวลา เนื่องจากใช้ตัวนับเหตุการณ์ในการจัดการลำดับเหตุการณ์
  • ข้อจำกัด: Lamport Clock สามารถช่วยได้เพียงแค่การจัดลำดับเหตุการณ์เท่านั้น และไม่สามารถบอกได้ว่าเหตุการณ์ใดเกิดขึ้นก่อนหรือหลังอย่างแน่ชัด เนื่องจากมันไม่ใช่การจับเวลาในเชิงปริมาณ (absolute time)

สรุป

Lamport Clock เป็นแนวทางที่มีประโยชน์ในการจัดการเวลาในระบบกระจายโดยไม่ต้องพึ่งพาการซิงโครไนซ์เวลาจริงระหว่างเครื่อง แต่ยังคงสามารถรักษาลำดับเหตุการณ์ได้ในระดับที่เพียงพอสำหรับการประสานงานในระบบที่กระจายทั่วกัน

https://martinfowler.com/articles/patterns-of-distributed-systems/lamport-clock.html

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay