Consensus Algorithm คืออะไร ?
🤔 เวลาที่ Blockchain เกิดข้อขัดแย้งมันหาข้อสรุปยังไงมาดูกัน
Last updated
🤔 เวลาที่ Blockchain เกิดข้อขัดแย้งมันหาข้อสรุปยังไงมาดูกัน
Last updated
จากบทความตอนที่แล้วเราก็จะทราบว่า การเก็บข้อมูลของ Blockchain มันไม่ได้เก็บข้อมูลไว้ที่เซิฟเวอร์เดียว แต่มันกระจายข้อมูลออกไปเก็บไว้กับเซิฟเวอร์นับแสนๆตัวทั่วทั้งโลก ดังนั้นถ้ามีการอัพเดทกันเกิดขึ้นมันก็จะต้องอัพเดทข้อมูลให้กับเซิฟเวอร์นับแสนๆตัวทั่วทั้งโลกด้วยนั่นเอง
จากที่ว่ามาปัญหาของมันจะเริ่มเกิดขึ้นก็เพราะ จริงๆเซิฟเวอร์ที่อยู่ในระบบมันทำงานแยกของใครของมันเลย ดังนั้นเซิฟเวอร์แต่ละตัวก็จะมีข้อมูลที่ไม่เหมือนกันอยู่เต็มไปหมด และเซิฟเวอร์เหล่านั้นจะต้องแข่งกันแก้โจทย์เพื่อหาคนที่แก้โจทย์ได้เร็วที่สุดถึงจะมีสิทธิ์เอาข้อมูลของตัวเองไปอัพเดทให้คนอื่นนั่นเอง ดังนั้นมันก็มีโอกาสที่จะมีเซิฟเวอร์ที่แก้โจทย์ได้เสร็จในเวลาที่พร้อมกันเกิดขึ้นนั่นเอง แล้วเซิฟเวอร์ในระบบจะเชื่อแหล่งข้อมูลจากไหนดี? ดังนั้นในบทความนี้เราจะมีดูวิธีการรับมือกับข้อขัดแย้งนี้ของ Blockchain กันครับ
ตัวอย่าง ถ้ามีคนซื้อของผ่านเซิฟเวอร์ A ก็จะมีแค่เซิฟเวอร์ A เท่านั้นที่รับรู้และมันจะบันทึกการซื้อของนั้นลงไป โดยที่เซิฟเวอร์อื่นๆที่เหลือจะไม่รู้ว่ามีการซื้อของเกิดขึ้น จนกว่าเซิฟเวอร์ A จะทำการสร้าง Block ได้ก่อนเซิฟเวอร์อื่นๆ มันถึงจะค่อยส่งข้อมูลอัพเดทล่าสุดให้กับเซิฟเวอร์อื่นๆเอาไปใช้ต่อ ซึ่งจากที่ว่ามา มันไม่ได้มีแค่เซิฟเวอร์ A ตัวเดียวที่พยายามจะสร้าง Block แต่เซิฟเวอร์ A ต้องแข่งกับเซิฟเวอร์อีกนับแสนๆตัวต่างหาก ดังนั้นมันก็มีโอกาสที่จะมีเซิฟเวอร์อื่นที่สร้าง Block เสร็จในเวลาที่พร้อมกันเกิดขึ้นได้นั่นเอง
แนะนำให้อ่าน บทความนี้เป็นหนึ่งในซีรี่ Blockchain ดังนั้นถ้าเพื่อนสนใจบทความทั้งหมดตั้งแต่เริ่มต้นว่า Blockchain คืออะไร แล้วจะเริ่มต้นสร้าง Blockchain เป็นของตัวเองได้ยังไง เพื่อนสามารถกดไปอ่านได้จากลิงค์นี้ครับ 👶 Blockchain และเราก็มีบทความเรื่องอื่นๆที่น่าสนใจซึ่งสามารถกดดูได้จาก Side menu เบย
Blockchain แก้ข้อขัดแย้งนี้โดยใช้สิ่งที่เรียกว่า Consensus Algorithm โดยมีหลักการง่ายๆว่า ข้อมูลที่อัพเดทจากฝั่งไหนยาวสุดให้ใช้ตัวนั้น ฟังดูแล้วอาจจะ งงๆ ดังนั้นจะขอยกตัวอย่างให้เข้าใจได้ง่ายขึ้นคือ สมมุติว่าในตอนนี้เซิฟเวอร์ทุกตัวในระบบมีข้อมูลตรงกันหมด โดย Block ตัวล่าสุดคือสีน้ำเงินตามรูป
แล้วพอถึงช่วงเวลานึงก็มีเซิฟเวอร์ 2 ตัวที่แก้สมการขึ้นมาได้เสร็จพร้อมกัน (สมมุติว่าเซิฟเวอร์ A กับ B ละกัน) ดังนั้นมันเลยกระจายข้อมูลของตัวมันเองให้เซิฟเวอร์อื่นๆค่อยๆอัพเดทไปเรื่อยๆ ดังนั้นในตอนนี้ในระบบก็จะถูกแบ่งออกเป็น 3 กลุ่มคือ
กลุ่มสีแดง - ที่ใช้ข้อมูลอัพเดทจากเซิฟเวอร์ A
กลุ่มสีเขียว - ที่ใช้ข้อมูลอัพเดทจากเซิฟเวอร์ B
กลุ่มสีน้ำเงิน - ยังไม่ถูกใครอัพเดท
คำถามคือแล้วสุดท้ายเซิฟเวอร์ทั้งหมดในระบบ จะต้องใช้อัพเดทจากกลุ่มไหนกันแน่นะ ตามรูปด้านล่างเลย
คำตอบคือถ้าเกิดกรณีแบบนี้เกิดขึ้นเซิฟเวอร์ในแต่ละกลุ่มก็จะใช้ Consensus Algorithm เข้ามาเลือกว่าจะใช้อัพเดทจากตัวไหน โดยมันจะเอาข้อมูลที่อัพเดททั้ง 2 แหล่งมาเทียบกัน แล้วดูว่าข้อมูลอัพเดทจากแหล่งไหนที่มันต่อ Block ได้ยาวที่สุด มันก็จะเลือกใช้การอัพเดทจากเซิฟเวอร์ฝั่งที่ยาวที่สุดนั่นเอง ตามรูปด้านล่างเลย
อธิบายรูป สมมุติว่ามีการอัพเดทเข้ามา 2 แหล่งที่ไม่เหมือนกันเช่น ด้านบนที่เป็นกลุ่มสีเขียว กับ ด้านล่างที่เป็นกลุ่มสีส้ม ระบบจะทำการเอาการอัพเดททั้ง 2 มาเทียบกันแล้วเลือกตัวที่มี Block ยาวที่สุด ซึ่งในตัวอย่างนั้นกลุ่มสีส้มมันยาวที่สุด ดังนั้นระบบก็จะเลือกใช้การอัพเดทจากกลุ่มสีส้มนั่นเอง
กลับมาที่ตัวอย่างของเรากันต่อ สมมุติว่าข้อมูลจากกลุ่มสีแดงและกลุ่มสีเขียวมันมีจำนวน Block ที่เท่ากันขึ้นมา เซิฟเวอร์ก็จะเลือกใช้ตัวใดตัวนึงไปก่อน ตามรูปด้านล่างจะเห็นว่ากลุ่มสีแดงและสีเขียวมี Block ต่อขึ้นมาจากสีน้ำเงินแค่ 1 ตัวเท่ากัน ดังนั้นเซิฟเวอร์ทั้งหมดในระบบก็จะถูกอัพเดทเป็นตัวไหนก็ได้แต่จะไม่เหลือสีน้ำเงินในระบบแล้ว เพราะมันเป็นข้อมูลที่เก่าไปละ
แล้วในระบบก็จะมีข้อมูลแบ่งเป็น 2 กลุ่มแบบนี้ไปซักระยะนึง จนกว่าจะถึงเวลาที่มีเซิฟเวอร์จากฝั่งใดฝั่งหนึ่งแก้สมการถัดไปได้ก่อนเพื่อน แล้วเซิฟเวอร์ตัวนั้นก็จะอัพเดทเซิฟเวอร์ตัวอื่นๆว่ามีข้อมูลใหม่มาแล้วนะ ซึ่งในรูปกลุ่มสีชมพูสามารถแก้สมการได้ก่อน ซึ่งกลุ่มสีชมพูนั้นเป็นกลุ่มที่ถูกต่อยอดมาจากกลุ่มสีเขียว ดังนั้นถ้าดูจาก Consensus Algorithm แล้วสุดท้ายข้อมูลในระบบทั้งหมดก็จะกลายเป็นกลุ่มสีชมพูไปในที่สุด เพราะมันมี Block ที่ยาวที่สุดยังไงล่ะ
ตอบง่ายๆเลยว่า มันก็จะถูกลืมไปในที่สุด เหมือนกับไม่เคยมีอะไรเกิดขึ้นมาก่อน เพราะไม่มีเซิฟเวอร์ตัวไหนอยากใช้ข้อมูลที่มีอัพเดทต่ำกว่ายังไงล่ะ ดังนั้นการดำเนินการต่างๆของกลุ่มนั้นจะถือว่ามันไม่เคยเกิดขึ้นมาก่อนในระบบนั่นเอง เช่น Alex โอนเงินค่าซื้อของให้ Katie จำนวน $500 ไป ก็จะถือเป็นโมฆะไป และในระบบก็จะไม่มีข้อมูลการโอนเงินนั้นเกิดขึ้นอีกด้วย
จากที่ว่ามาก็จะเป็นปัญหากับ Katie เพราะ Katie ไม่ได้รับเงิน แต่ Alex ได้รับของไปแล้ว และก็จะเป็นปัญหากับเซิฟเวอร์เพราะก็จะไม่มีคนเชื่อถือเซิฟเวอร์นั้นๆอีกต่อไปเพราะดำเนินการไปแล้วอยู่ๆก็บอกว่าไม่ได้ทำนั่นเอง ดังนั้นเซิฟเวอร์ที่ถูกลืมพวกนี้ก็จะต้องรีบอัพเดทข้อมูลเป็นตัวล่าสุดตามเพื่อนๆ แล้วรีบเอาข้อมูลที่เคยถูกลืมไปกลับไปสร้างเป็น Block ไปต่อใน Chain ให้ได้อีกครั้งนั่นเอง
Confirmation time & Confirmed blocks จากที่บอกไปว่ามันมีโอกาสที่การดำเนินการนั้นจะถูกเลือนหายไปเหมือนกับว่ามันไม่เคยเกิดขึ้นมาก่อน ดังนั้นตอนที่ใช้ระบบ Blockchain มันจะมีสิ่งที่เรียกว่า Confirmation time หรือพูดง่ายๆคือหลังจากดำเนินการไปเราจะต้องรอให้ผ่านเวลา x ไปก่อน เช่น 30 นาที หรือ 1 วัน บลาๆแล้วแต่ที่ตกลงกัน เพื่อเป็นการยืนยันว่าการดำเนินการนั้นจะไม่ถูกลบเลือนไปนั่นเอง หรือในบางทีเราก็จะใช้จำนวน Block ที่ถูกสร้างต่อจากการดำเนินการนั้นๆไปจำนวนกี่ตัวถึงจะถือว่าการดำเนินการนั้นน่าจะใช้งานได้นั่นเอง
ในการทำงานจริงๆของ Blockchain นั้นมันแล้วแต่ว่าคนที่เอา blockchain ไปใช้เขามีการปรับแก้อะไรลงไปบ้าง ดังนั้นผมจะขอยกตัวอย่างการทำงานของ Bitcoin แทนละกันว่าโดยรวมระบบของมันทำงานกันยังไงตั้งแต่เริ่มต้นเลย
ขั้นตอนการทำงานทั้งหมดของ Bitcoin จะเริ่มขึ้นเมื่อมีการสร้าง transaction เกิดขึ้นระบบก็จะรวม transaction ต่างๆเอาไว้ โดยเฉลี่ยของ Blockchain จะทำการอัพเดทกันเสร็จราวๆ 10 นาที โดยที่คนขุดเหมืองหรือ Minders ก็จะทำการสร้าง Block ขึ้นมาแล้วทำการแก้สมการให้เสร็จก่อนเซิฟเวอร์อื่นๆ
เมื่อคนขุดเหมืองหรือ Minders ก็จะทำการแก้สมการได้เสร็จหรือเราเรียกว่า Proof of work ได้ ระบบก็จะทำการแจ้งไปยังเซิฟเวอร์อื่นๆ หรือเราเรียกพวกนั้นว่าคนขุดเหมือนอื่นๆ Minders อื่นๆ ก็ได้ โดยพวกเซิฟเวอร์เหล่านั้นก็จะทำการตรวจสอบว่าเราแก้สมการได้ถูกต้องจริงๆหรือเปล่า ซึ่งถ้าถูกต้อง เซิฟเวอร์อื่นๆก็จะทำการใช้ข้อมูลที่เราแก้ได้ไปใช้เป็นตัวล่าสุดเลยนั่นเอง
สุดท้ายระบบก็จะกลับมาเริ่มวงจรเดิมอีกครั้ง ทำให้เราได้แผนภาพการทำงานทั้งหมดเป็นตามรูปข้างล่างนี้เลย
จากที่ว่ามาจะเห็นว่า Blockchain นั้นมีกลไกในการปรับตัวเพื่อเอาข้อมูลที่อัพเดทเป็นตัวใหม่ที่สุดเข้าไปเสมอ โดยเซิฟเวอร์ฝั่งที่มีข้อมูลเป็นข้อมูลเก่าก็จะต้องรีบสลัดข้อมูลเก่าทิ้งไปแล้วรีบอัพเดทกลับมาให้เท่ากับเพื่อนๆ เพื่อที่จะได้ทำงานกับเพื่อนต่อได้นั่นเอง