☕ 5-Min Tech Story #52

Raft Consensus: เบื้องหลังวิธีที่โหนดในคลัสเตอร์จับมือเลือก "หัวหน้าวง" แบบไร้รอยต่อ

⏱️ ใช้เวลาอ่านประมาณ: 4 นาที 30 วินาที

สมมติคุณมีเซิร์ฟเวอร์ฐานข้อมูลเรียงกัน 5 เครื่อง (โหนด) หน้าที่ของมันคือต้องเก็บข้อมูลให้เหมือนกันเป๊ะทุกประการ (Replicated Log)

ปัญหาคือ: ถ้าลูกค้าส่งคำสั่ง "อัปเดตยอดเงินเป็น 500" ไปที่เครื่องที่ 1 และในเสี้ยววินาทีเดียวกัน ลูกค้าอีกคนส่งคำสั่ง "อัปเดตยอดเงินเป็น 1,000" ไปที่เครื่องที่ 2... ทั้ง 5 เครื่องจะตกลงกันอย่างไรว่าคำสั่งไหนมาก่อน?

ในโลก Distributed Systems ปัญหานี้แก้ได้ด้วยการเลือก "ผู้นำ (Leader)" ขึ้นมา 1 คน เพื่อให้ทุกคนฟังคำสั่งจากผู้นำคนเดียว แต่อัลกอริทึมรุ่นเดอะอย่าง Paxos นั้นซับซ้อนจนวิศวกรหลายคนส่ายหัว จนกระทั่งโลกได้รู้จักกับ Raft Consensus Algorithm (ซึ่งอยู่เบื้องหลัง etcd ใน Kubernetes, Consul, และ Redis Sentinel)

🎭 3 บทบาทแห่ง Raft

ในอัลกอริทึม Raft โหนดทุกตัวจะต้องสวมบทบาทใดบทบาทหนึ่งใน 3 สถานะนี้เสมอ:

🗳️ การเลือกตั้งประธานาธิบดี (Leader Election)

กลไกที่เจ๋งที่สุดของ Raft คือ "นาฬิกาจับเวลาตั้งระเบิด (Election Timeout)":

  1. โหนดทุกตัวจะมีนาฬิกาจับเวลาที่ สุ่มระยะเวลาไม่เท่ากัน (เช่น 150ms ถึง 300ms)
  2. ตราบใดที่ Leader ยังมีชีวิต มันจะส่งสัญญาณเต้นของหัวใจ (Heartbeat) มา "รีเซ็ต" นาฬิกาของทุกคนอยู่เสมอ
  3. แต่ถ้า Leader ตาย (หรือเน็ตขาด) สัญญาณจะหายไป... โหนดที่สุ่มเวลาได้สั้นที่สุด (เช่น 150ms) นาฬิกาจะหมดเวลาเป็นคนแรก!
  4. โหนดตัวนั้นจะประกาศตัวเป็น Candidate ทันที พร้อมโหวตให้ตัวเอง 1 เสียง และส่งจดหมายไปขอเสียงโหวตจากโหนดอื่นรอบวง
  5. เนื่องจากมันเริ่มขอโหวตก่อนใคร โหนดอื่นที่นาฬิกายังไม่หมดเวลาจะยอมเทคะแนนเสียงให้ (ใครขอโหวตก่อนได้ก่อน)
  6. เมื่อได้ เสียงข้างมาก (Quorum) โหนดนั้นจะกลายเป็น Leader คนใหม่ทันที!
"การสุ่มเวลา Election Timeout เป็นทริคที่โคตรฉลาด เพราะมันป้องกันการ 'แย่งกันขอโหวตพร้อมกัน (Split Vote)' ทำให้ระบบหาหัวหน้าคนใหม่ได้สำเร็จภายในพริบตา!"

📝 สั่งจดบันทึกตามเสียงข้างมาก (Log Replication)

เมื่อได้หัวหน้าแล้ว เวลาลูกค้าสั่งอัปเดตข้อมูล:

💡 5-Min Takeaway

"ประชาธิปไตยในโลกคอมพิวเตอร์ ขับเคลื่อนด้วยเสียงข้างมากและการจับเวลาแบบสุ่ม" Raft Algorithm เปลี่ยนเรื่องซับซ้อนอย่าง Consensus ให้กลายเป็นสิ่งที่วิศวกรเข้าใจง่ายและนำไปพัฒนาต่อได้จริง กุญแจสำคัญคือการใช้ Timer แบบสุ่มเพื่อป้องกันความขัดแย้ง และยึดมั่นในกฎ Quorum เสมอ ทำให้ระบบระดับโลกอย่าง Kubernetes มีมันสมอง (etcd) ที่เชื่อถือได้และไม่เคยมีปัญหา Split-Brain มารังควาน