อะไรคือเหตุผลเบื้องหลังของทฤษฎีบท CAP?


21

http://en.wikipedia.org/wiki/CAP_theorem

http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf

ฉันคิดว่ามันไม่ได้ตรงไปตรงมามากว่าทำไมเพียงสองของ

  1. ความมั่นคง
  2. ความพร้อมใช้งาน
  3. ฉากกั้นห้อง

สามารถเก็บไว้สำหรับระบบฐานข้อมูลแบบกระจายที่กำหนด การคาดเดานี้ได้รับการพิสูจน์แล้วว่า แต่จะมีวิธีที่ง่ายเพื่อดูว่าทำไมอาจนี้อาจถือ?

ฉันไม่ได้มองหาหลักฐานเพียงวิธีที่ดีที่จะเข้าใจว่าทำไมทฤษฎีบทนี้จึงสมเหตุสมผล อะไรคือเหตุผล?

คำตอบ:


23

ตกลงลองจินตนาการว่าคุณมีฐานข้อมูลแบบกระจาย สมมติว่าคุณมีโหนดในโอเรกอนและอีกโหนดหนึ่งในแคลิฟอร์เนีย ทฤษฎี CAP บอกว่าคุณจะพบปัญหาเมื่อตั้งค่าฐานข้อมูลประเภทนี้

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

คอมพิวเตอร์อัปเดตข้อมูลในออริกอนถ่ายโอนข้อมูลไปยังแคลิฟอร์เนีย

เมื่อเราอัปเดตข้อมูลในโหนดโอเรกอนข้อมูลจะถูกส่งไปยังโหนดแคลิฟอร์เนียเพื่อให้ฐานข้อมูลสอดคล้องกัน เพื่อรักษาความสอดคล้องอย่างแท้จริงเราต้องมั่นใจว่าฐานข้อมูลทั้งสองได้รับการอัปเดตก่อนที่จะอนุญาตให้บันทึกข้อมูลอย่างแท้จริง (กระทำแบบสองเฟสโดยใช้ธุรกรรมแบบกระจาย) กล่าวอีกนัยหนึ่งถ้าฐานข้อมูลแคลิฟอร์เนียไม่สามารถบันทึกข้อมูลด้วยเหตุผลบางอย่าง (เช่นฮาร์ดไดรฟ์ล้มเหลว) ดังนั้นฐานข้อมูลในโอเรกอนจะไม่บันทึกข้อมูลและจะไม่ทำธุรกรรม

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

โดยทั่วไปสิ่งที่เราทำเพื่อประกันความพร้อมใช้งานสูงคือเราใช้การจำลองแบบแทนธุรกรรมแบบกระจาย ดังนั้นแทนที่จะรับประกันว่าแคลิฟอร์เนียสามารถรับข้อมูลได้เราเพียงแค่ไปข้างหน้าและเก็บไว้ในโหนดโอเรกอนแล้วส่งข้อมูลไปยังแคลิฟอร์เนียเมื่อเราไปถึงที่นั่น สิ่งนี้รับประกันได้ว่าเราสามารถจัดเก็บข้อมูลได้เสมอโดยไม่คำนึงว่ารัฐแคลิฟอร์เนียพร้อมที่จะจัดเก็บข้อมูลหรือไม่

โหนด Oregon อัปเดตข้อมูลขณะที่ California อ่านข้อมูล  ต่อมาข้อมูลจะถูกย้ายไปที่แคลิฟอร์เนีย

สิ่งนี้ช่วยปรับปรุงความพร้อมใช้งาน แต่ด้วยค่าใช้จ่ายของความสอดคล้อง ดูว่าถ้ามีคนอัพเดทข้อมูลในโอเรกอนแล้วบางคน (ในเวลาเดียวกัน) อ่านข้อมูลในแคลิฟอร์เนียพวกเขาจะไม่ได้รับข้อมูลใหม่ - ฐานข้อมูลไม่สอดคล้องกันอีกต่อไป ในความเป็นจริงพวกเขาจะไม่สอดคล้องกันจนกว่าโอเรกอนส่งข้อมูลไปยังแคลิฟอร์เนีย!

ดังนั้นนั่นคือความพร้อมใช้งาน -vs- ความสอดคล้องการแลกเปลี่ยน

Partition Toleranceเป็นส่วนที่สามของทฤษฎี CAP การแบ่งพาร์ติชันในบริบทนี้แนวคิดที่ว่าฐานข้อมูล (หรือระบบกระจายอื่น ๆ ) สามารถแบ่งออกเป็นส่วนต่าง ๆ และยังคงทำงานได้อย่างถูกต้อง

คำถามจะเกิดขึ้นจะเกิดอะไรขึ้นเมื่อฐานข้อมูลทั้งสองทำงานอย่างถูกต้อง แต่ลิงค์จาก Oregon ไปยัง California ถูกตัดออก?

Oregon กำลังได้รับการอัปเดตขณะที่กำลังอ่านโหนด California  เครือข่ายระหว่างโหนดถูกตัด

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

เมื่อสิ่งนี้เกิดขึ้นตัวเลือกของคุณคือหยุดการอนุญาตให้อัปเดต (เพื่อรักษาความสอดคล้อง) ที่ค่าใช้จ่ายของความพร้อมใช้งานหรือเพื่อให้การอัปเดต

อย่างที่คุณเห็นความอดทนต่อพาร์ติชันสร้างการแลกเปลี่ยนโดยตรงระหว่างความสอดคล้องและความพร้อมใช้งาน


เห็นได้ชัดว่ามันมีมากกว่านั้น แต่สิ่งเหล่านี้เป็นตัวอย่างสองประการเกี่ยวกับวิธีการที่สำคัญสามประการของระบบกระจายเหล่านี้ทำงานและต่อต้านซึ่งกันและกัน คำอธิบายของJulian Browneเกี่ยวกับทฤษฎี CAP เป็นสถานที่ที่ยอดเยี่ยมในการเรียนรู้เพิ่มเติม



ด้วยภาพที่สวยกว่ามากในตอนนั้น!
Richard
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.