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"