ทฤษฎีบท CAP - ความพร้อมใช้งานและความทนทานของพาร์ติชัน


207

ในขณะที่ฉันพยายามทำความเข้าใจ "ความพร้อมใช้งาน" (A) และ "ความทนทานต่อพาร์ติชัน" (P) ใน CAP ฉันพบว่ามันยากที่จะเข้าใจคำอธิบายจากบทความต่าง ๆ

ฉันรู้สึกว่า A และ P สามารถไปด้วยกันได้ (ฉันรู้ว่านี่ไม่ใช่กรณีและนั่นเป็นสาเหตุที่ฉันไม่เข้าใจ!)

อธิบายอย่างง่าย ๆ ว่า A และ P คืออะไรและแตกต่างกันอย่างไร


1
นี่คือบทความที่อธิบายถึง CAP ในภาษาอังกฤษล้วนksat.me/a-plain-english-introduction-to-cap-theorem
Tushar Saha

2
ไม่ต้องไปหา anslwers readymade อ่านวาดภาพและทำความเข้าใจแต่ละ C, A, P แยกกัน ออกแบบสถาปัตยกรรมคลัสเตอร์แบบกระจาย (อาจเป็น 3 DB) และใช้ความเข้าใจของคุณตอนนี้ ดูว่าเกิดอะไรขึ้นกับ C, A, P เมื่อความล้มเหลวของการกระจาย (DB's) เกิดขึ้น เมื่อคุณเข้าใจแล้วตรวจสอบคำตอบและใช้กับตรรกะของคุณ ข้อควรจำ - แม้ว่าคุณจะเข้าใจ แต่อาจไม่ชัดเจน ดังนั้นคิดและใช้ความเข้าใจของคุณ ขอบคุณ
หญิงสาว

1
ยังไงก็แล้วแต่ลิงค์ ksat.me ด้านบนไปที่ 404 url ​​เพราะมันลงท้ายด้วย '/' ksat.me/a-plain-english-introduction-to-cap-theoremสิ่งนี้ใช้ได้ดีและเป็นคำอธิบายโดยละเอียดของแต่ละ 'C', 'A', 'P'
vivek.m

คำตอบ:


402

ความสอดคล้องหมายความว่าข้อมูลเหมือนกันทั่วทั้งคลัสเตอร์ดังนั้นคุณสามารถอ่านหรือเขียนจาก / ไปยังโหนดใดก็ได้และรับข้อมูลเดียวกัน

ความพร้อมใช้งานหมายถึงความสามารถในการเข้าถึงคลัสเตอร์แม้ว่าโหนดในคลัสเตอร์จะล้มเหลว

การยอมรับพาร์ติชันหมายความว่าคลัสเตอร์ยังคงทำงานได้แม้ว่าจะมี "พาร์ติชัน" (ตัวแบ่งการสื่อสาร) ระหว่างสองโหนด (โหนดทั้งสองหมด แต่ไม่สามารถสื่อสารได้)

เพื่อให้ได้ทั้งความพร้อมใช้งานและความทนทานต่อการแบ่งพาร์ติชันคุณต้องยกเลิกความสอดคล้อง พิจารณาว่าคุณมีสองโหนดคือ X และ Y ในการตั้งค่าต้นแบบหลัก ขณะนี้มีการแบ่งระหว่างการสื่อสารเครือข่ายระหว่าง X และ Y ดังนั้นพวกเขาจึงไม่สามารถซิงค์การอัปเดตได้ ณ จุดนี้คุณสามารถ:

A) ปล่อยให้โหนดหลุดจากการซิงค์ (ให้ความสม่ำเสมอ) หรือ

B) พิจารณาว่าคลัสเตอร์เป็น "down" (ยกเลิกความพร้อมใช้งาน)

ชุดค่าผสมทั้งหมดที่มีคือ:

  • CA - ข้อมูลสอดคล้องกันระหว่างโหนดทั้งหมด - ตราบใดที่โหนดทั้งหมดออนไลน์ - และคุณสามารถอ่าน / เขียนจากโหนดใดก็ได้และตรวจสอบให้แน่ใจว่าข้อมูลเหมือนกัน แต่ถ้าคุณพัฒนาพาร์ติชันระหว่างโหนดข้อมูลจะเป็น ไม่ซิงค์ (และจะไม่ซิงค์อีกครั้งเมื่อพาร์ทิชันได้รับการแก้ไข)
  • CP - ข้อมูลสอดคล้องกันระหว่างโหนดทั้งหมดและรักษาความทนทานต่อการแบ่งพาร์ติชัน (การป้องกันข้อมูล desync) โดยใช้งานไม่ได้เมื่อโหนดลง
  • AP - โหนดยังคงออนไลน์แม้ว่าพวกเขาจะไม่สามารถสื่อสารซึ่งกันและกันและจะซิงค์ข้อมูลเมื่อพาร์ติชันได้รับการแก้ไข แต่คุณไม่รับประกันว่าโหนดทั้งหมดจะมีข้อมูลเดียวกัน (ทั้งในระหว่างหรือหลังพาร์ติชัน)

คุณควรทราบว่าระบบ CA ไม่มีอยู่จริง (แม้ว่าบางระบบอ้างว่าเป็นเช่นนั้น)


1
ใน AP ทำไมเราไม่รับประกันว่าโหนดทั้งหมดจะมีข้อมูลเดียวกัน ตกลงเพราะเราไม่มี "C" แต่ .. นี่ยังไม่ชัดเจนสำหรับฉัน ... ฉันต้องการทราบว่าทำไมสิ่งนี้จึงเกิดขึ้น ...
grep

3
@grep ขออภัยสำหรับคำตอบที่ล่าช้า หากคุณมีทั้งความพร้อมใช้งาน (คลัสเตอร์ไม่ลดลง) และความทนทานต่อพาร์ติชัน (ฐานข้อมูลสามารถอยู่รอดได้โหนดที่ไม่สามารถสื่อสารได้) ดังนั้นคุณไม่สามารถรับประกันได้ว่าโหนดทั้งหมดจะมีข้อมูลทั้งหมด (ความสอดคล้อง) เสมอเนื่องจากโหนด ลุกขึ้นและยอมรับการเขียน แต่ไม่สามารถสื่อสารการเขียนเหล่านั้นให้กันและกันได้
Chris Heald

4
มาปาร์ตี้ช้า แต่ก็คุ้มค่าที่จะแสดงตัวอย่างบางอย่างในแต่ละหมวดหมู่เช่น blog.nahurst.com/visual-guide-to-nosql-systems
bitinn

มันจะช่วยให้มีภาพประกอบ / ตัวอย่างง่าย ๆ เกี่ยวกับ node-clusters ที่นี่ มันเป็นระบบหรือตารางข้อมูล / คอลเลกชันที่แพร่กระจายในระบบที่แตกต่างกันหรืออย่างอื่น?
shrotavre

ในทางปฏิบัติโหนดส่วนใหญ่มักจะเป็นระบบเดี่ยว ๆ (หรือซอฟต์แวร์ที่ทำงานบนระบบเหล่านั้น) ซึ่งเชื่อมต่อกันด้วยกลไกเครือข่ายบางอย่าง
Chris Heald

43

การพิจารณา P ในเทอมที่เท่ากันกับ C และ A นั้นเป็นความผิดพลาดเล็กน้อยความคิด '2 จาก 3' ในกลุ่ม C, A, P นั้นทำให้เข้าใจผิด วิธีสั้น ๆ ที่ฉันจะอธิบายทฤษฎีบทของ CAP คือ "ในที่เก็บข้อมูลแบบกระจาย ณ เวลาที่พาร์ติชันเครือข่ายคุณต้องเลือกความสอดคล้องหรือความพร้อมใช้งานและไม่สามารถรับทั้งคู่ได้" ระบบ NoSQL ที่ใหม่กว่ากำลังพยายามที่จะมุ่งเน้นไปที่ความพร้อมใช้งานในขณะที่ฐานข้อมูล ACID แบบดั้งเดิมนั้นให้ความสำคัญกับความสอดคล้องมากกว่า

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


18

นี่คือวิธีที่ฉันพูดถึง CAP เกี่ยวกับ P โดยเฉพาะ

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

หากปัญหาของคุณต้องใช้การขยายการกระจายและหลายเซิร์ฟเวอร์ --- พาร์ติชันเครือข่ายสามารถเกิดขึ้นได้ คุณต้องการให้มีปัญหาบางอย่างที่ P. วิธีการแก้ไขแล้วนั้นสอดคล้องกับกระบวนทัศน์เซิร์ฟเวอร์เดียวเสมอ (หรืออย่างที่ Stonebraker กล่าวว่า "การกระจายคือการเดิมพันบนโต๊ะ") หากคุณพบปัญหาเกี่ยวกับ CA โซลูชันเช่น RDBMS ที่ไม่ใช่ขนาดดั้งเดิมนั้นให้ประโยชน์มากมาย

สำหรับฉันแล้วหายาก: ดังนั้นเราจะพูดถึงเรื่อง AP vs CP

คุณเลือกระหว่างการดำเนินการ AP และ CP เท่านั้นเมื่อคุณมีพาร์ติชัน หากเครือข่ายและฮาร์ดแวร์ทำงานอย่างถูกต้องคุณจะได้เค้กและกินด้วย

เรามาคุยกันถึงความแตกต่างของ AP / CP

AP - เมื่อมีพาร์ติชันเครือข่ายให้ชิ้นส่วนอิสระทำงานได้อย่างอิสระ

CP - เมื่อมีพาร์ติชันเครือข่ายให้ปิดโหนดหรือไม่อนุญาตให้อ่านและเขียนดังนั้นจึงมีข้อผิดพลาดที่กำหนดไว้

ฉันชอบสถาปัตยกรรมที่สามารถทำได้ทั้งสองอย่างเนื่องจากปัญหาบางอย่างคือ AP และบางอย่างเป็น CP - และฐานข้อมูลบางอย่างสามารถทำได้ทั้งสองอย่าง ในบรรดาโซลูชั่น CP และ AP ก็มีรายละเอียดปลีกย่อยเช่นกัน

ตัวอย่างเช่นในชุดข้อมูล AP คุณมีความเป็นไปได้ของการอ่านที่ไม่สอดคล้องกันทั้งสองและสร้างข้อขัดแย้งในการเขียนซึ่งเป็นโหมด AP ที่แตกต่างกันสองโหมด ระบบของคุณสามารถกำหนดค่าสำหรับ AP ที่มีความพร้อมในการอ่านสูง แต่ไม่สามารถเขียนข้อขัดแย้งได้หรือไม่? หรือระบบ AP ของคุณสามารถยอมรับข้อขัดแย้งในการเขียนด้วยระบบการแก้ปัญหาที่แข็งแกร่งและยืดหยุ่นได้หรือไม่ ในที่สุดคุณจะต้องใช้ทั้งสองอย่างหรือคุณสามารถเลือกระบบที่จะใช้งานได้หรือไม่?

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

นี่คือคำถามทั้งหมดที่ต้องถามกับ CP vs AP

การอ่านที่ดีในพื้นที่นี้ในขณะนี้คือโพสต์ "12 ปีต่อมา" ของ Brewer ฉันเชื่อว่าสิ่งนี้จะนำไปสู่การถกเถียงอย่างถ่องแท้ด้วยความชัดเจนและแนะนำอย่างสูง

http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed


ระบบ CA นั้นสับสนฉันมีคำถามเกี่ยวกับตัวอย่าง CA ของคุณเกี่ยวกับฐานข้อมูลเสาหิน ถ้ามันเป็นเพียงเซิร์ฟเวอร์เดียว "A" มาจากไหนเพราะฉันเห็นว่าความล้มเหลวของเซิร์ฟเวอร์ดังกล่าวจะส่งผลให้ไม่มีบริการใด ๆ
chaooder

1
คำถามที่ดี. เซิร์ฟเวอร์อาจมีดิสก์ที่ล้มเหลวหรือแม้แต่ DIMM ล้มเหลวหรือมีแหล่งจ่ายไฟล้มเหลวหากได้รับการออกแบบให้มีความพร้อมใช้งานสูง แม้แต่จินตนาการว่ากำลังอยู่บนกริดพลังงานหลาย ๆ คุณจะได้รับความพร้อมใช้งานที่สูงขึ้นและมากขึ้น แต่ไม่มี "เครือข่าย" ภายในที่มีความสามารถในการแบ่งพาร์ติชันและเรียกใช้ด้วยส่วนประกอบที่ไม่เห็นด้วย ในขณะที่มีฮาร์ดแวร์ที่ลึกลับมากขึ้น (ค้นหา SQL NON-STOP) ตัวอย่างของอาร์เรย์ RAID ที่มีส่วนประกอบที่ล้มเหลวและทำงานต่อยังคงเป็นเรื่องปกติในปัจจุบันและให้ความพร้อมใช้งานสูงมากในเซิร์ฟเวอร์เดียว
Brian Bulkowski

13

ทฤษฎีบท CAP

สอดคล้อง:

การอ่านถูกรับประกันว่าจะส่งคืนการเขียนล่าสุด (เช่น ACID)สำหรับไคลเอ็นต์ที่กำหนด หากคำขอใด ๆ เกิดขึ้นในช่วงเวลานั้นจะต้องรอจนกว่าการซิงค์ข้อมูลจะเสร็จสมบูรณ์ใน / ในโหนด


สถานะ:

ทุก ๆ โหนด (หากไม่ได้ล้มเหลว) จะเรียกใช้คิวรีเสมอและควรตอบคำขอเสมอ ไม่สำคัญว่าจะส่งคืนสำเนาล่าสุดหรือไม่


Partition อดทน:

ระบบจะทำงานต่อไปเมื่อพาร์ติชันเครือข่ายเกิดขึ้น


เกี่ยวกับAP , ความพร้อมใช้งาน (สามารถเข้าถึงได้เสมอ) สามารถมีอยู่ด้วย ( Cassendra ) หรือไม่มี ( RDBMS ) พาร์ติชันที่ยอมรับได้

แหล่งที่มา pic


2

ฉันรู้สึกว่าการแบ่งพาร์ติชันไม่ได้อธิบายอย่างดีในคำตอบใด ๆ ดังนั้นเพียงอธิบายสิ่งต่าง ๆ ในรายละเอียดบางส่วนของ CAP ทฤษฎีบทหมายถึง:

C : (Linearizability หรือความมั่นคงที่แข็งแกร่ง) หมายถึงคร่าวๆ

หากการดำเนินการ B เริ่มต้นหลังจากการดำเนินการ A เสร็จสมบูรณ์แล้วการดำเนินการ B ต้องดูระบบในสถานะเดียวกับเมื่อเสร็จสิ้นการดำเนินการ A หรือสถานะใหม่กว่า (แต่ไม่เคยเป็นสถานะเก่า)

A :

“ ทุกคำขอที่ได้รับจากโหนด [ฐานข้อมูล] ที่ล้มเหลวในระบบต้องส่งผลให้เกิดการตอบสนอง [ข้อผิดพลาด] " มันไม่เพียงพอสำหรับบางโหนดที่จะสามารถจัดการกับการร้องขอ: โหนดที่ไม่ใช่ความล้มเหลวใด ๆ จะต้องสามารถจัดการกับมันได้ หลาย ๆ ระบบที่เรียกว่า "พร้อมใช้งานสูง" (เช่นการหยุดทำงานต่ำ) จริง ๆ แล้วไม่ตรงตามคำจำกัดความของความพร้อมใช้งานนี้

P :

ความคลาดเคลื่อน Partition Tolerance (ผิดมาก) หมายความว่าคุณกำลังสื่อสารผ่านเครือข่ายแบบอะซิงโครนัสซึ่งอาจทำให้ข้อความล่าช้าหรือปล่อย อินเทอร์เน็ตและศูนย์ข้อมูลของเรามีคุณสมบัตินี้ดังนั้นคุณจึงไม่มีทางเลือกในเรื่องนี้

ที่มา: ผลงานของ Martin kleppmann ที่ยอดเยี่ยม

ตัวอย่างเช่น: Cassandra สามารถเป็นระบบ AP ได้สูงสุด แต่ถ้าคุณกำหนดค่าให้อ่านหรือเขียนตาม Quorum มันจะไม่คงอยู่ใน CAP (ใช้ได้ตามคำจำกัดความของทฤษฎีบท CAP) และเป็นระบบ P เท่านั้น


1

ในทฤษฎีบท CAP อย่างง่ายระบุว่าเป็นไปไม่ได้ที่ระบบกระจายจะให้การรับประกันทั้งสามอย่างพร้อมกัน:

ป้อนคำอธิบายรูปภาพที่นี่

ความมั่นคง

ทุกโหนดมีข้อมูลเดียวกันในเวลาเดียวกัน

ความพร้อมใช้งาน

ต้องมีอย่างน้อยหนึ่งโหนดที่จะให้บริการข้อมูลทุกครั้ง

ฉากกั้นห้อง

ความล้มเหลวของระบบนั้นหายากมาก

ส่วนใหญ่ทุกระบบสามารถรับประกันขั้นต่ำทั้งสองคุณสมบัติCA, AP, หรือซีพี


0

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

ในการกระจายมีโอกาสที่พาร์ติชันเครือข่ายจะเกิดขึ้นและเราไม่สามารถหลีกเลี่ยง "P" ของ CAP ดังนั้นเราเลือกระหว่าง "ความสอดคล้อง" และ "ความพร้อมใช้งาน"

http://bigdatadose.com/understanding-cap-theorem/


0

วิธีง่ายๆในการเข้าใจทฤษฎีบท CAP:

ในกรณีของพาร์ติชันเครือข่ายเราต้องเลือกระหว่างความพร้อมใช้งานที่สมบูรณ์แบบและความสอดคล้องที่สมบูรณ์แบบ

การเลือกความสอดคล้องหมายถึงไม่สามารถตอบแบบสอบถามของลูกค้าได้เนื่องจากระบบไม่สามารถรับประกันได้ว่าจะส่งคืนการเขียนล่าสุด ความพร้อมใช้งานนี้เสียสละ

การเลือกความพร้อมใช้งานหมายถึงความสามารถในการตอบสนองต่อคำขอของลูกค้า แต่ระบบไม่สามารถรับประกันความสอดคล้องเช่นค่าล่าสุดที่เขียน ระบบที่มีให้ตอบที่ดีที่สุดภายใต้สถานการณ์ที่กำหนด

คำอธิบายนี้เป็นจากบทความที่ดีเยี่ยมนี้ หวังว่ามันจะช่วย


0

ฉันได้ผ่านการเชื่อมโยงมากมาย แต่ไม่มีใครสามารถให้คำตอบที่น่าพอใจยกเว้นหนึ่ง

ดังนั้นฉันอธิบาย CAP ในคำพูดที่ง่ายมาก

  • ความสอดคล้อง : ต้องส่งคืนข้อมูลเดียวกันโดยไม่คำนึงถึงโหนดที่จะมา

  • ความพร้อมใช้งาน : โหนดควรตอบสนอง (ต้องพร้อมใช้งาน)

  • ความอดทนของพาร์ติชัน : คลัสเตอร์ควรตอบสนอง (ต้องพร้อมใช้งาน) แม้ว่าจะมีพาร์ติชัน aa (เช่นเครือข่ายล้มเหลว) ระหว่างโหนด

(นอกจากนี้เหตุผลหลักที่หนึ่งมันสับสนมากขึ้นคือการตั้งชื่อที่ไม่ดีของมันถ้าฉันมีสิทธิ์ที่ผมอาจจะได้รับ. DNCทฤษฎีบทแทน: ความสอดคล้องของข้อมูล , Node มีจำหน่าย , คลัสเตอร์มีจำหน่ายที่แต่ละสอดคล้องกับความสอดคล้อง , ความพร้อมใช้งานและPartition ความคลาดเคลื่อนตามลำดับ)

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

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

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

ดังนั้นนี่ไม่ได้หมายความว่าคุณไม่สามารถมีฐานข้อมูล CA สำหรับแอปพลิเคชันแบบกระจายของคุณหากคุณต้องการ ฐานข้อมูลเชิงสัมพันธ์จำนวนมากเช่น PostgreSQL ให้ความสม่ำเสมอและความพร้อมใช้งานและสามารถปรับใช้กับหลาย ๆ โหนดโดยใช้การจำลองแบบ

ที่มา: https://www.ibm.com/cloud/learn/cap-theorem

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