Định lý CAP - Tính khả dụng và dung sai phân vùng


207

Trong khi tôi cố gắng hiểu "Tính khả dụng" (A) và "Dung sai phân vùng" (P) trong CAP, tôi thấy khó hiểu các giải thích từ các bài viết khác nhau.

Tôi có cảm giác rằng A và P có thể đi cùng nhau (tôi biết đây không phải là trường hợp và đó là lý do tại sao tôi không hiểu!).

Giải thích một cách đơn giản, A và P là gì và sự khác biệt giữa chúng là gì?


1
đây là một bài viết giải thích CAP trong tiếng Anh đơn giản ksat.me/a-plain-english-introduction-to-cap-theorem
Tushar Saha

2
đừng đi tìm dấu hiệu đọc sai. Đọc, hình dung và hiểu riêng từng C, A, P. Thiết kế một kiến ​​trúc cụm phân tán (có thể là 3 DB) và bây giờ áp dụng sự hiểu biết của bạn. Xem điều gì xảy ra với C, A, P khi xảy ra lỗi phân tán (DB). Một khi bạn hiểu, sau đó kiểm tra câu trả lời và áp dụng với logic của bạn. Ghi nhớ - Ngay cả khi bạn hiểu, nó có thể không rõ ràng. vì vậy, suy nghĩ và áp dụng sự hiểu biết của bạn. Cảm ơn
Maiden

1
Bằng cách nào đó, liên kết ksat.me ở trên chuyển đến url 404 vì nó kết thúc bằng '/'. ksat.me/a-plain-english-introduction-to-cap-theorem này hoạt động tốt và rất chi tiết lời giải thích của mỗi người trong 'C', 'A', 'P'
vivek.m

Câu trả lời:


402

Tính nhất quán có nghĩa là dữ liệu giống nhau trên toàn cụm, vì vậy bạn có thể đọc hoặc ghi từ / đến bất kỳ nút nào và nhận cùng một dữ liệu.

Tính khả dụng có nghĩa là khả năng truy cập vào cụm ngay cả khi một nút trong cụm bị hỏng.

Dung sai phân vùng có nghĩa là cụm tiếp tục hoạt động ngay cả khi có "phân vùng" (ngắt giao tiếp) giữa hai nút (cả hai nút đều hoạt động, nhưng không thể giao tiếp).

Để có được cả tính khả dụng và dung sai phân vùng, bạn phải từ bỏ tính nhất quán. Xem xét nếu bạn có hai nút, X và Y, trong thiết lập chính chủ. Bây giờ, có một khoảng cách giữa giao tiếp mạng giữa X và Y, vì vậy họ không thể đồng bộ hóa các bản cập nhật. Tại thời điểm này, bạn có thể:

A) Cho phép các nút thoát khỏi đồng bộ hóa (từ bỏ tính nhất quán) hoặc

B) Coi cụm là "xuống" (từ bỏ tính khả dụng)

Tất cả các kết hợp có sẵn là:

  • CA - dữ liệu phù hợp giữa tất cả các nút - miễn là tất cả các nút trực tuyến - và bạn có thể đọc / ghi từ bất kỳ nút nào và chắc chắn rằng dữ liệu là như nhau, nhưng nếu bạn từng phát triển một phân vùng giữa các nút, dữ liệu sẽ không đồng bộ hóa (và sẽ không đồng bộ lại sau khi phân vùng được giải quyết).
  • CP - dữ liệu phù hợp giữa tất cả các nút và duy trì dung sai phân vùng (ngăn chặn không đồng bộ dữ liệu) bằng cách không khả dụng khi nút bị hỏng.
  • AP - các nút vẫn trực tuyến ngay cả khi chúng không thể liên lạc với nhau và sẽ đồng bộ lại dữ liệu sau khi phân vùng được giải quyết, nhưng bạn không đảm bảo rằng tất cả các nút sẽ có cùng dữ liệu (trong hoặc sau phân vùng)

Bạn nên lưu ý rằng các hệ thống CA thực tế không tồn tại (ngay cả khi một số hệ thống tuyên bố là như vậy).


1
Trong AP tại sao chúng tôi không đảm bảo rằng tất cả các nút sẽ có cùng một dữ liệu? Ok, bởi vì chúng tôi không có "C" nhưng .. điều này không rõ ràng đối với tôi ... Tôi muốn biết tại sao điều này xảy ra ...
grep

3
@grep Xin lỗi vì câu trả lời muộn. Nếu bạn có cả tính khả dụng (cụm không đi xuống) và dung sai phân vùng (cơ sở dữ liệu có thể tồn tại các nút không thể giao tiếp), thì bạn không thể đảm bảo rằng tất cả các nút sẽ luôn có tất cả dữ liệu (tính nhất quán), bởi vì các nút đang lên và chấp nhận viết, nhưng không thể giao tiếp những người viết cho nhau.
Chris Heald

4
Đến bữa tiệc muộn, nhưng nó đáng để thể hiện một số ví dụ trong mỗi thể loại, ví dụ. blog.nahurst.com/visual-guide-to-nosql-systems
bitinn

thực sự hữu ích khi đưa vào một minh họa / ví dụ đơn giản về các cụm nút có ý nghĩa ở đây. nó là một hệ thống hay một bảng dữ liệu / bộ sưu tập trải rộng trên các hệ thống khác nhau hay cái gì khác?
shrotavre

Về mặt thực tế, các nút thường là các hệ thống riêng lẻ (hoặc phần mềm chạy trên các hệ thống đó) được kết nối bởi một số cơ chế kết nối mạng.
Chris Heald

43

Việc coi P bằng nhau với C và A là một chút sai lầm, thay vào đó, 2 trong số 3 khái niệm trong số C, A, P là sai lệch. Cách ngắn gọn mà tôi sẽ giải thích định lý CAP là, "Trong một kho lưu trữ dữ liệu phân tán, tại thời điểm phân vùng mạng, bạn phải chọn Tính nhất quán hoặc Tính khả dụng và không thể có được cả hai". Các hệ thống NoQuery mới hơn đang cố gắng tập trung vào Tính khả dụng trong khi cơ sở dữ liệu ACID truyền thống tập trung cao hơn vào tính nhất quán.

Bạn thực sự không thể chọn CA, phân vùng mạng không phải là thứ ai cũng muốn có, nó chỉ là một thực tế không mong muốn của một hệ thống phân tán, các mạng có thể thất bại. Câu hỏi là những gì bạn đánh đổi cho ứng dụng của bạn khi điều đó xảy ra. Bài viết này từ người đàn ông đầu tiên xây dựng thuật ngữ đó dường như giải thích điều này rất rõ ràng.


18

Đây là cách tôi thảo luận về CAP, đặc biệt là về P.

CA chỉ có thể nếu bạn ổn với cơ sở dữ liệu máy chủ đơn, nguyên khối (có thể sao chép nhưng tất cả dữ liệu trên một "khối lỗi" - máy chủ không được coi là bị lỗi một phần).

Nếu vấn đề của bạn yêu cầu mở rộng quy mô, phân tán và nhiều máy chủ --- phân vùng mạng có thể xảy ra. Bạn đã yêu cầu P. Một số vấn đề tôi tiếp cận có thể tuân theo các mô hình luôn luôn của một máy chủ (hoặc, như Stonebraker đã nói, "phân phối là cổ phần bảng"). Nếu bạn có thể tìm thấy một vấn đề CA, các giải pháp như RDBMS không có quy mô truyền thống cung cấp rất nhiều lợi ích.

Đối với tôi, hiếm: vì vậy chúng tôi chuyển sang thảo luận về AP vs CP.

Bạn chỉ chọn giữa hoạt động AP và CP khi bạn có phân vùng. Nếu mạng và phần cứng hoạt động chính xác, bạn lấy bánh của mình và ăn nó.

Hãy thảo luận về sự khác biệt AP / CP.

AP - khi có phân vùng mạng, hãy để các bộ phận độc lập hoạt động tự do.

CP - khi có phân vùng mạng, tắt các nút hoặc không cho phép đọc và ghi để có các lỗi xác định.

Tôi thích các kiến ​​trúc có thể làm cả hai, bởi vì một số vấn đề là AP và một số là CP - và một số cơ sở dữ liệu có thể làm cả hai. Trong số các giải pháp CP và AP, có cả sự tinh tế.

Ví dụ: trong bộ dữ liệu AP, bạn có khả năng cả hai lần đọc không nhất quán và tạo ra xung đột ghi - đây là hai chế độ AP khác nhau có thể. Hệ thống của bạn có thể được cấu hình cho AP với tính sẵn sàng đọc cao nhưng không cho phép ghi xung đột không? Hoặc hệ thống AP của bạn có thể chấp nhận xung đột bằng văn bản, với hệ thống giải quyết mạnh mẽ và linh hoạt không? Cuối cùng bạn sẽ cần cả hai, hoặc bạn có thể chọn một hệ thống chỉ làm một hệ thống không?

Trong một hệ thống CP, bạn nhận được bao nhiêu không có sẵn với các phân vùng nhỏ (máy chủ đơn), nếu có? Nhân rộng hơn có thể làm tăng tính không khả dụng trong hệ thống CP, làm thế nào để hệ thống xử lý những sự đánh đổi đó?

Đây là tất cả các câu hỏi để hỏi với CP vs AP.

Một bài đọc tuyệt vời trong lĩnh vực này ngay bây giờ là bài đăng "12 năm sau" của nhà sản xuất bia. Tôi tin rằng điều này thúc đẩy cuộc tranh luận về CAP một cách rõ ràng và khuyến nghị nó rất cao.

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


Hệ thống CA thực sự khó hiểu, tôi có một câu hỏi liên quan đến ví dụ CA của bạn về cơ sở dữ liệu nguyên khối. Nếu nó chỉ là một máy chủ duy nhất, thì chữ "A" đến từ đâu, vì tôi thấy rằng sự thất bại của máy chủ nói trên sẽ dẫn đến không có dịch vụ nào khả dụng?
chaooder

1
Câu hỏi hay. Máy chủ có thể bị hỏng đĩa, hoặc thậm chí có DIMM bị lỗi hoặc có nguồn điện bị hỏng nếu chúng được thiết kế để có tính sẵn sàng cao. Thậm chí tưởng tượng là trên nhiều lưới điện. Bạn có tính sẵn sàng cao hơn và cao hơn, nhưng không bao giờ có một "mạng" bên trong có khả năng phân vùng và chạy với các thành phần không đồng ý. Mặc dù có nhiều phần cứng bí truyền hơn (tìm kiếm SQL NON-STOP), các ví dụ về mảng RAID với các thành phần bị lỗi và tiếp tục vẫn còn phổ biến hiện nay và cung cấp tính sẵn sàng rất cao trong một máy chủ.
Brian Bulkowski

13

Định lý CAP

Tính nhất quán:

Một lần đọc được đảm bảo để trả về lần ghi gần đây nhất (như ACID) cho một khách hàng nhất định. Nếu bất kỳ yêu cầu nào xuất hiện trong thời gian đó, nó phải đợi cho đến khi đồng bộ hóa dữ liệu hoàn thành trên / trong (các) nút.


Khả dụng:

mọi nút (nếu không thất bại) luôn thực hiện các truy vấn và phải luôn trả lời các yêu cầu. Nó không quan trọng cho dù nó trả về bản sao mới nhất hay không.


Dung sai phân vùng:

Hệ thống sẽ tiếp tục hoạt động khi phân vùng mạng xảy ra.


Về AP , Tính khả dụng (luôn có thể truy cập) có thể tồn tại với dung sai phân vùng ( Cassendra ) hoặc không có ( RDBMS )

nguồn pic


2

Tôi cảm thấy dung sai phân vùng không được giải thích tốt trong bất kỳ câu trả lời nào vì vậy chỉ để giải thích mọi thứ chi tiết hơn về định lý CAP có nghĩa là:

C : (Tính tuyến tính hoặc tính nhất quán mạnh) có nghĩa là

Nếu hoạt động B bắt đầu sau khi hoạt động A hoàn thành thành công, thì hoạt động B phải xem hệ thống ở trạng thái giống như khi hoàn thành hoạt động A hoặc trạng thái mới hơn (nhưng không bao giờ là trạng thái cũ).

A :

Mỗi yêu cầu nhận được bởi một nút [cơ sở dữ liệu] không bị lỗi trong hệ thống phải dẫn đến phản hồi [không lỗi]. Nó không đủ để một số nút có thể xử lý yêu cầu: bất kỳ nút không bị lỗi nào cũng cần có khả năng xử lý nó. Nhiều hệ thống được gọi là có sẵn rất cao (tức là thời gian chết thấp) thực sự không đáp ứng định nghĩa về tính khả dụng này.

P :

Dung sai phân vùng (bị đặt sai tên khủng khiếp) về cơ bản có nghĩa là bạn đang liên lạc qua mạng không đồng bộ có thể trì hoãn hoặc xóa tin nhắn. Internet và tất cả các trung tâm dữ liệu của chúng tôi đều có tài sản này, vì vậy bạn không thực sự có lựa chọn nào trong vấn đề này.

Nguồn: Awesome Martin kleppmann của công việc

Chỉ cần lấy một số ví dụ: Cassandra có thể tối đa là hệ thống AP. Nhưng nếu bạn định cấu hình nó để đọc hoặc viết dựa trên Quorum thì nó không còn khả dụng (có sẵn theo định nghĩa của định lý CAP) và chỉ là hệ thống P.


1

Trong định lý CAP đơn giản nói rằng hệ thống phân tán không thể cung cấp đồng thời cả ba bảo đảm:

nhập mô tả hình ảnh ở đây

Tính nhất quán

Mỗi nút chứa cùng một dữ liệu cùng một lúc

khả dụng

Ít nhất một nút phải có sẵn để phục vụ dữ liệu mỗi lần

Dung sai phân vùng

Lỗi hệ thống là rất hiếm

Hầu hết mọi hệ thống chỉ có thể đảm bảo tối thiểu hai tính năng là CA, AP hoặc CP .


0

Tính nhất quán - Khi chúng tôi đang gửi yêu cầu đọc, nếu nó đang trả về kết quả, nó sẽ trả về lần ghi gần đây nhất được đưa ra bởi yêu cầu của khách hàng. Sẵn có - Yêu cầu đọc / ghi của bạn phải luôn thành công. Dung sai phân vùng - Khi có phân vùng mạng (sự cố cho một số máy nói chuyện với nhau) xảy ra, hệ thống vẫn hoạt động.

Trong một bản phân phối, có nhiều khả năng phân vùng mạng sẽ xảy ra và chúng tôi không thể tránh được bản P P của CAP. Vì vậy, chúng tôi lựa chọn giữa liên tục và liên tục.

http://bigdatadose.com/under Hiểu-cap-theemem /


0

Cách đơn giản để hiểu định lý CAP:

Trong trường hợp phân vùng mạng, người ta cần phải chọn giữa tính sẵn có hoàn hảo và tính nhất quán hoàn hảo.

Chọn tính nhất quán có nghĩa là không thể trả lời truy vấn của khách hàng vì hệ thống không thể đảm bảo trả về lần ghi gần đây nhất. Điều này hy sinh sẵn có.

Chọn tính khả dụng có nghĩa là có thể đáp ứng yêu cầu của khách hàng nhưng hệ thống không thể đảm bảo tính nhất quán, nghĩa là giá trị gần đây nhất được viết. Các hệ thống có sẵn cung cấp câu trả lời tốt nhất có thể trong hoàn cảnh nhất định.

Giải thích này là từ bài viết tuyệt vời này . Hy vọng nó sẽ giúp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.