CAP 정리-가용성 및 파티션 공차


207

CAP의 "가용성"(A) 및 "파티션 공차"(P)를 이해하려고 시도하는 동안 다양한 기사의 설명을 이해하기가 어렵습니다.

나는 A와 P가 함께 갈 수 있다고 생각합니다 (이 경우가 아니라는 것을 알고 있으므로 이해하지 못합니다!).

간단한 용어로 설명하면 A와 P는 무엇이고 차이점은 무엇입니까?


1
여기에 일반 영어로 CAP을 설명하는 기사입니다 ksat.me/a-plain-english-introduction-to-cap-theorem은
Tushar 사하

2
기성품 anslwers를 가지 마십시오. 각 C, A, P를 개별적으로 읽고, 시각화하고 이해합니다. 분산 클러스터 아키텍처 (아마도 3 DB)를 설계하고 이제 이해를 적용하십시오. 분산 (DB) 장애가 발생할 때 C, A, P에 어떤 일이 발생하는지보십시오. 이해 한 후에는 답변을 확인하고 논리를 적용하십시오. 기억하십시오 – 이해하더라도 명확하지 않을 수 있습니다. 따라서 이해하고 생각하십시오. 감사합니다
Maiden

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) 클러스터가 "중단"된 것으로 간주 (가용성 제공)

사용 가능한 모든 조합은 다음과 같습니다.

  • CA- 모든 노드가 온라인 상태 인 한 모든 노드간에 데이터가 일관되며 모든 노드에서 읽고 쓸 수 있으며 데이터가 동일한 지 확인할 수 있지만 노드 간 파티션을 개발 한 경우 데이터는 동기화되지 않음 (파티션이 해결되면 다시 동기화되지 않음)
  • CP- 데이터는 모든 노드간에 일관되며 노드가 다운 될 때 사용할 수 없게되어 파티션 허용 오차를 유지합니다 (데이터 비동기 방지).
  • AP- 노드는 서로 통신 할 수없는 경우에도 온라인 상태를 유지하며 파티션이 해결되면 데이터를 다시 동기화하지만 모든 노드가 동일한 데이터를 가지고 있다고 보장 할 수는 없습니다 (파티션 중 또는 이후).

당신은주의해야 CA 시스템이 실질적으로 존재하지 않는 (일부 시스템이 그렇게 주장하는 경우에도).


1
AP에서 모든 노드가 동일한 데이터를 가질 것이라고 보장하지 않는 이유는 무엇입니까? 좋아, 우리는 "C"를 가지고 있지 않지만 .. 이것은 나에게 분명하지 않다 ... 왜 이런 일이 발생하는지 알고 싶다 ...
grep

3
@grep 답변이 늦어 죄송합니다. 가용성 (클러스터가 다운되지 않음)과 파티션 허용 오차 (데이터베이스가 통신 할 수없는 노드에서 살아남을 수 있음)가 모두있는 경우, 모든 노드가 항상 모든 데이터 (일관성)를 갖도록 보장 할 수는 없습니다. 쓰기를 승인하고 있지만 해당 쓰기를 서로 통신 할 수 없습니다.
Chris Heald

4
파티에 늦었지만 각 범주에 몇 가지 예를 보여줄 가치가 있습니다. blog.nahurst.com/visual-guide-to-nosql-systems
bitinn

여기서 의미하는 노드 클러스터에 대한 간단한 그림 / 예를 포함시키는 것이 실제로 도움이 될 것입니다. 시스템이나 데이터 테이블 / 컬렉션이 다른 시스템이나 다른 시스템에 분산되어 있습니까?
shrotavre

실제로 노드는 대부분의 네트워킹 메커니즘으로 연결된 개별 시스템 (또는 해당 시스템에서 실행되는 소프트웨어)입니다.
Chris Heald

43

P를 C와 A와 같은 용어로 간주하는 것은 약간의 실수입니다. CAP 정리를 간결하게 설명하는 방법은 "분산 된 데이터 저장소에서 네트워크 파티션시 일관성 또는 가용성을 선택해야하며 둘 다를 얻을 수 없습니다"입니다. 최신 NoSQL 시스템은 가용성에 중점을두고 있지만 기존 ACID 데이터베이스는 일관성에 중점을두고 있습니다.

당신은 정말로 CA를 선택할 수 없으며, 네트워크 파티션은 누군가가 원하는 것이 아니며, 분산 시스템의 바람직하지 않은 현실이며, 네트워크는 실패 할 수 있습니다. 문제는 애플리케이션이 발생할 때 어떤 트레이드 오프를 선택 하는가입니다. 이 용어를 처음 만든 사람 의이 기사 는 이것을 매우 명확하게 설명하는 것 같습니다.


18

다음은 특히 P와 관련하여 CAP에 대해 논의하는 방법입니다.

모 놀리 식 단일 서버 데이터베이스가있는 경우에만 CA가 가능합니다 (복제 가능하지만 하나의 "실패 블록"에있는 모든 데이터-서버는 부분적으로 실패한 것으로 간주되지 않음).

문제가 확장, 분산 및 다중 서버 --- 네트워크 파티션이 필요한 경우 발생할 수 있습니다. 당신은 이미 P를 요구하고 있습니다. 제가 접근하는 단일 문제는 항상 단일 서버-항상 패러다임 (또는 Stonebraker가 말했듯이 "분산은 테이블 스테이크"입니다)에 몇 가지 문제가 있습니다. CA 문제를 발견하면 기존의 비 스케일 아웃 RDBMS와 같은 솔루션은 많은 이점을 제공합니다.

저에게는 드문 일입니다. 따라서 AP와 CP에 대해 계속 논의합니다.

파티션이있을 때 AP와 CP 작업 중 하나만 선택하십시오. 네트워크 및 하드웨어가 올바르게 작동하면 케이크를 먹고 먹습니다.

AP / CP 구별에 대해 논의 해 봅시다.

AP-네트워크 파티션이있는 경우 독립 부품이 자유롭게 작동하도록합니다.

CP-네트워크 파티션이있는 경우 노드를 종료하거나 읽기 및 쓰기를 허용하지 않아 결정적인 오류가 발생합니다.

일부 문제는 AP이고 일부는 CP이기 때문에 일부 데이터베이스는 두 가지를 모두 수행 할 수 있기 때문에 두 가지를 모두 수행 할 수있는 아키텍처를 좋아합니다. CP 및 AP 솔루션 중에는 미묘한 부분도 있습니다.

예를 들어, AP 데이터 세트에서 일관되지 않은 읽기와 쓰기 충돌이 발생할 수 있습니다. 두 가지 가능한 AP 모드입니다. 읽기 가용성이 높지만 쓰기 충돌은 허용하지 않는 AP에 대해 시스템을 구성 할 수 있습니까? 아니면 강력하고 유연한 해결 시스템으로 AP 시스템이 쓰기 충돌을 수용 할 수 있습니까? 결국 둘 다 필요합니까, 아니면 하나만 수행하는 시스템을 선택할 수 있습니까?

CP 시스템에서 작은 파티션 (단일 서버)을 사용할 수없는 경우는 얼마입니까? 복제가 클수록 CP 시스템에서 사용 불가능 성을 증가시킬 수 있습니다. 시스템은 이러한 상충 관계를 어떻게 처리합니까?

이것들은 모두 CP와 AP에 대해 질문해야합니다.

이 분야에서 지금 잘 읽은 것은 Brewer의 "12 년 후"포스트입니다. 나는 이것이 명확하게 CAP 토론을 진전시키고 그것을 강력히 추천한다고 믿는다.

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)반환합니다 . 해당 시간 동안 요청이 있으면 노드 전체 에서 / 또는 노드에서 데이터 동기화가 완료 될 때까지 기다려야 합니다.


유효성:

모든 노드 (실패하지 않은 경우)는 항상 쿼리를 실행하며 항상 요청에 응답해야합니다. 최신 사본을 반환하는지 여부는 중요하지 않습니다.


파티션 공차 :

네트워크 파티션이 발생해도 시스템은 계속 작동합니다.


AP 와 관련하여 가용성 (항상 액세스 가능)은 ( Cassendra ) 또는 파티션 허용 오차 ( RDBMS ) 없이 존재할 수 있습니다

사진 출처


2

나는 CAP 정리가 의미하는 것을 좀 더 자세하게 설명하기 위해 파티션 허용 오차가 어떤 대답에도 잘 설명되어 있지 않다고 생각합니다.

C : (선형성 또는 강한 일관성)은 대략적으로

작업 A가 성공적으로 완료된 후 작업 B가 시작된 경우 작업 B는 시스템이 작업 A를 완료 한 것과 동일한 상태이거나 새로운 상태 (이전 상태는 아님) 여야합니다.

A :

"시스템의 비 실패 [데이터베이스] 노드가 수신 한 모든 요청은 [비 오류] 응답을 가져와야합니다." 일부 노드가 요청을 처리하기에 충분하지 않습니다. 비 실패 노드는 처리 할 수 ​​있어야합니다. 많은 "고 가용성"(즉, 다운 타임이 적은) 시스템은 실제로 이러한 가용성 정의를 충족하지 않습니다.

P :

Partition Tolerance (잘못 명명 된)는 기본적으로 메시지를 지연 시키거나 삭제할 수있는 비동기 네트워크를 통해 통신하고 있음을 의미합니다. 인터넷과 모든 데이터 센터에는이 속성이 있으므로이 문제에 대한 선택은 없습니다.

출처 : 굉장한 Martin kleppmann의 작품

Cassandra는 최대 AP 시스템 일 수 있습니다. 그러나 Quorum을 기반으로 읽거나 쓰도록 구성하면 CAP 사용 가능 (CAP 정리의 정의에 따라 사용 가능)으로 유지되지 않으며 P 시스템 일뿐입니다.


1

간단한 CAP 정리에서는 분산 시스템이 세 가지 보증을 동시에 제공 할 수 없다고 말합니다.

여기에 이미지 설명을 입력하십시오

일관성

모든 노드는 동시에 동일한 데이터를 포함합니다

유효성

매번 데이터를 제공 할 수있는 노드가 하나 이상 있어야합니다.

분할 공차

시스템 고장은 매우 드 rare니다

대부분의 모든 시스템은 CA, AP 또는 CP 중 최소한 두 가지 기능 만 보장 할 수 있습니다 .


0

일관성 – 읽기 요청을 보낼 때 결과를 반환하는 경우 클라이언트 요청에서 제공 한 가장 최근의 쓰기를 반환해야합니다. 가용성 – 읽기 / 쓰기 요청은 항상 성공해야합니다. 파티션 허용 – 네트워크 파티션 (일부 컴퓨터가 서로 통신하는 데 문제가 있음)이 발생해도 시스템은 여전히 ​​작동합니다.

분산에서는 네트워크 파티션이 발생할 가능성이 있으며 CAP의 "P"를 피할 수 없습니다. "Consistency"와 "Availability"중에서 선택합니다.

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


0

CAP 정리를 이해하는 간단한 방법 :

네트워크 파티션의 경우 완벽한 가용성과 완벽한 일관성 중에서 선택해야합니다.

일관성 선택 은 시스템이 가장 최근의 쓰기를 반환한다고 보장 할 수 없으므로 클라이언트의 쿼리에 응답 할 수 없음을 의미합니다. 이것은 가용성을 희생시킵니다.

가용성 선택 은 고객의 요청에 응답 할 수 있지만 시스템은 일관성, 즉 가장 최근에 작성된 값을 보장 할 수 없습니다. 사용 가능한 시스템은 주어진 상황에서 최상의 답변을 제공합니다.

이 설명은 이 훌륭한 기사 에서 나온 것입니다 . 그것이 도움이되기를 바랍니다.


0

나는 많은 링크를 겪었지만 그들 중 누구도 하나를 제외하고는 만족스러운 대답을 할 수 없었습니다.

따라서 나는 매우 간단한 표현으로 CAP를 설명하고 있습니다.

  • 일관성 : 어느 노드에서 오는지 에 관계없이 동일한 Data를 반환해야 합니다.

  • 가용성 : 노드 가 응답해야합니다 (사용 가능해야 함).

  • Partition Tolerance : 노드간에 파티션 (예 : 네트워크 오류)이 있더라도 클러스터 가 응답해야합니다 (사용 가능해야 함).

(더 많은 혼란을 일으키는 주된 이유 중 하나는 이름 지정 규칙이 잘못 되었기 때문입니다. 내가 옳다면 DNC 정리 대신 데이터 일관성 , 노드 가용성 , 클러스터 가용성 을 부여했을 수도 있습니다 . 여기서 각각은 일관성 , 가용성파티션 공차에 해당합니다)

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.