DBMS แบบกระจาย - Commit Protocols
ในระบบฐานข้อมูลภายในสำหรับการทำธุรกรรมผู้จัดการธุรกรรมจะต้องถ่ายทอดการตัดสินใจที่จะส่งมอบให้กับผู้จัดการการกู้คืนเท่านั้น อย่างไรก็ตามในระบบแบบกระจายผู้จัดการธุรกรรมควรถ่ายทอดการตัดสินใจที่จะกระทำต่อเซิร์ฟเวอร์ทั้งหมดในไซต์ต่างๆที่กำลังดำเนินการธุรกรรมและบังคับใช้การตัดสินใจอย่างสม่ำเสมอ เมื่อการประมวลผลเสร็จสมบูรณ์ในแต่ละไซต์จะเข้าสู่สถานะการทำธุรกรรมที่ถูกผูกมัดบางส่วนและรอให้ธุรกรรมอื่น ๆ ทั้งหมดไปถึงสถานะที่ถูกผูกมัดบางส่วน เมื่อได้รับข้อความว่าไซต์ทั้งหมดพร้อมที่จะคอมมิตมันก็จะเริ่มคอมมิต ในระบบแบบกระจายไซต์ทั้งหมดยอมรับหรือไม่มีเลย
โปรโตคอลการคอมมิตแบบกระจายที่แตกต่างกัน ได้แก่ -
- หนึ่งเฟสคอมมิต
- การคอมมิตสองเฟส
- สามเฟสคอมมิต
การคอมมิตเฟสเดียวแบบกระจาย
คอมมิตแบบเฟสเดียวแบบกระจายเป็นโปรโตคอลคอมมิตที่ง่ายที่สุด ให้เราพิจารณาว่ามีไซต์ควบคุมและไซต์ทาสจำนวนหนึ่งที่กำลังดำเนินการธุรกรรม ขั้นตอนในการคอมมิตแบบกระจายคือ -
หลังจากที่ทาสแต่ละคนทำธุรกรรมภายในเครื่องเสร็จเรียบร้อยแล้วระบบจะส่งข้อความ "เสร็จสิ้น" ไปยังไซต์ควบคุม
ทาสจะรอข้อความ“ Commit” หรือ“ Abort” จากไซต์ควบคุม เวลารอนี้เรียกว่าwindow of vulnerability.
เมื่อไซต์ควบคุมได้รับข้อความ "เสร็จสิ้น" จากทาสแต่ละคนไซต์จะตัดสินใจกระทำหรือยกเลิก นี้เรียกว่าจุดกระทำ จากนั้นมันจะส่งข้อความนี้ไปยังทาสทั้งหมด
เมื่อได้รับข้อความนี้ทาสจะกระทำหรือยกเลิกแล้วส่งข้อความตอบรับไปยังไซต์ควบคุม
การคอมมิตสองเฟสแบบกระจาย
การคอมมิตสองเฟสแบบกระจายช่วยลดช่องโหว่ของโปรโตคอลคอมมิตแบบเฟสเดียว ขั้นตอนที่ดำเนินการในสองขั้นตอนมีดังนี้ -
Phase 1: Prepare Phase
หลังจากที่ทาสแต่ละคนทำธุรกรรมภายในเครื่องเสร็จเรียบร้อยแล้วระบบจะส่งข้อความ "เสร็จสิ้น" ไปยังไซต์ควบคุม เมื่อไซต์ควบคุมได้รับข้อความ "เสร็จสิ้น" จากทาสทั้งหมดไซต์จะส่งข้อความ "เตรียม" ไปยังทาส
ทาสลงคะแนนว่าพวกเขายังต้องการที่จะกระทำหรือไม่ หากทาสต้องการกระทำมันจะส่งข้อความ“ พร้อม”
ทาสที่ไม่ต้องการกระทำส่งข้อความ“ ยังไม่พร้อม” สิ่งนี้อาจเกิดขึ้นเมื่อทาสมีธุรกรรมที่ขัดแย้งกันหรือมีการหมดเวลา
Phase 2: Commit/Abort Phase
หลังจากไซต์ควบคุมได้รับข้อความ“ พร้อม” จากทาสทั้งหมด -
ไซต์ควบคุมจะส่งข้อความ "Global Commit" ไปยังทาส
ทาสใช้ธุรกรรมและส่งข้อความ“ Commit ACK” ไปยังไซต์ควบคุม
เมื่อไซต์ควบคุมได้รับข้อความ "Commit ACK" จากทาสทั้งหมดไซต์จะพิจารณาธุรกรรมนั้นเป็นข้อตกลง
หลังจากไซต์ควบคุมได้รับข้อความ "ไม่พร้อม" แรกจากทาสใด ๆ -
ไซต์ควบคุมจะส่งข้อความ "Global Abort" ไปยังทาส
ทาสยกเลิกธุรกรรมและส่งข้อความ“ Abort ACK” ไปยังไซต์ควบคุม
เมื่อไซต์ควบคุมได้รับข้อความ“ ยกเลิก ACK” จากทาสทั้งหมดจะถือว่าธุรกรรมนั้นถูกยกเลิก
การคอมมิตสามเฟสแบบกระจาย
ขั้นตอนในการคอมมิตสามเฟสแบบกระจายมีดังนี้ -
Phase 1: Prepare Phase
ขั้นตอนจะเหมือนกับการคอมมิตสองเฟสแบบกระจาย
Phase 2: Prepare to Commit Phase
- ไซต์ควบคุมออกข้อความออกอากาศ“ Enter Prepared State”
- ไซต์ทาสโหวต "ตกลง" ในการตอบสนอง
Phase 3: Commit / Abort Phase
ขั้นตอนนี้เหมือนกับการคอมมิตสองเฟสยกเว้นว่าไม่จำเป็นต้องมีข้อความ "Commit ACK" / "Abort ACK"