[database] CAP 정리-가용성 및 파티션 공차
CAP의 “가용성”(A) 및 “파티션 공차”(P)를 이해하려고 시도하는 동안 다양한 기사의 설명을 이해하기가 어렵습니다.
나는 A와 P가 함께 갈 수 있다고 생각합니다 (이 경우가 아니라는 것을 알고 있으므로 이해하지 못합니다!).
간단한 용어로 설명하면 A와 P는 무엇이고 차이점은 무엇입니까?
답변
일관성은 데이터가 클러스터 전체에서 동일하므로 모든 노드에서 읽고 쓸 수 있으며 동일한 데이터를 얻을 수 있습니다.
가용성은 클러스터의 노드가 다운 되더라도 클러스터에 액세스 할 수있는 기능을 의미합니다.
파티션 허용 오차는 두 노드 사이에 “파티션”(통신 중단)이 있어도 (두 노드가 작동하지만 통신 할 수 없음) 클러스터가 계속 작동 함을 의미합니다.
가용성과 파티션 허용 오차를 모두 얻으려면 일관성을 포기해야합니다. 마스터-마스터 설정에 X와 Y라는 두 개의 노드가 있는지 고려하십시오. 이제 X와 Y 사이의 네트워크 통신이 중단되어 업데이트를 동기화 할 수 없습니다. 이 시점에서 다음 중 하나를 수행 할 수 있습니다.
A) 노드가 동기화되지 않도록 허용 (일관성 제공) 또는
B) 클러스터가 “중단”된 것으로 간주 (가용성 제공)
사용 가능한 모든 조합은 다음과 같습니다.
- CA- 모든 노드가 온라인 상태 인 한 모든 노드간에 데이터가 일관되며 모든 노드에서 읽고 쓸 수 있으며 데이터가 동일한 지 확인할 수 있지만 노드 간 파티션을 개발 한 경우 데이터는 동기화되지 않음 (파티션이 해결되면 다시 동기화되지 않음)
- CP- 데이터는 모든 노드간에 일관되며 노드가 다운 될 때 사용할 수 없게되어 파티션 허용 오차를 유지합니다 (데이터 비동기 방지).
- AP- 노드는 서로 통신 할 수없는 경우에도 온라인 상태를 유지하며 파티션이 해결되면 데이터를 다시 동기화하지만 모든 노드가 동일한 데이터를 가지고 있다고 보장 할 수는 없습니다 (파티션 중 또는 이후).
당신은주의해야 CA 시스템이 실질적으로 존재하지 않는 (일부 시스템이 그렇게 주장하는 경우에도).
답변
P를 C와 A와 같은 용어로 간주하는 것은 약간의 실수입니다. CAP 정리를 간결하게 설명하는 방법은 “분산 된 데이터 저장소에서 네트워크 파티션시 일관성 또는 가용성을 선택해야하며 둘 다를 얻을 수 없습니다”입니다. 최신 NoSQL 시스템은 가용성에 중점을두고 있지만 기존 ACID 데이터베이스는 일관성에 중점을두고 있습니다.
당신은 정말로 CA를 선택할 수 없으며, 네트워크 파티션은 누군가가 원하는 것이 아니며, 분산 시스템의 바람직하지 않은 현실이며, 네트워크는 실패 할 수 있습니다. 문제는 애플리케이션이 발생할 때 어떤 트레이드 오프를 선택 하는가입니다. 이 용어를 처음 만든 사람 의이 기사 는 이것을 매우 명확하게 설명하는 것 같습니다.
답변
다음은 특히 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
답변
일관성:
읽기는 주어진 클라이언트에 대한 최신 쓰기 (예 : ACID) 를 반환합니다 . 해당 시간 동안 요청이 있으면 노드 전체 에서 / 또는 노드에서 데이터 동기화가 완료 될 때까지 기다려야 합니다.
유효성:
모든 노드 (실패하지 않은 경우)는 항상 쿼리를 실행하며 항상 요청에 응답해야합니다. 최신 사본을 반환하는지 여부는 중요하지 않습니다.
파티션 공차 :
네트워크 파티션이 발생해도 시스템은 계속 작동합니다.
AP 와 관련하여 가용성 (항상 액세스 가능)은 ( Cassendra ) 또는 파티션 허용 오차 ( RDBMS ) 없이 존재할 수 있습니다
답변
나는 CAP 정리가 의미하는 것을 좀 더 자세하게 설명하기 위해 파티션 허용 오차가 어떤 대답에도 잘 설명되어 있지 않다고 생각합니다.
C : (선형성 또는 강한 일관성)은 대략적으로
작업 A가 성공적으로 완료된 후 작업 B가 시작된 경우 작업 B는 시스템이 작업 A를 완료 한 것과 동일한 상태이거나 새로운 상태 (이전 상태는 아님) 여야합니다.
A :
“시스템의 비 실패 [데이터베이스] 노드가 수신 한 모든 요청은 [비 오류] 응답을 가져와야합니다.” 일부 노드가 요청을 처리하기에 충분하지 않습니다. 비 실패 노드는 처리 할 수 있어야합니다. 많은 “고 가용성”(즉, 다운 타임이 적은) 시스템은 실제로 이러한 가용성 정의를 충족하지 않습니다.
P :
Partition Tolerance (잘못 명명 된)는 기본적으로 메시지를 지연 시키거나 삭제할 수있는 비동기 네트워크를 통해 통신하고 있음을 의미합니다. 인터넷과 모든 데이터 센터에는이 속성이 있으므로이 문제에 대한 선택은 없습니다.
출처 : 굉장한 Martin kleppmann의 작품
Cassandra는 최대 AP 시스템 일 수 있습니다. 그러나 Quorum을 기반으로 읽거나 쓰도록 구성하면 CAP 사용 가능 (CAP 정리의 정의에 따라 사용 가능)으로 유지되지 않으며 P 시스템 일뿐입니다.
답변
간단한 CAP 정리에서는 분산 시스템이 세 가지 보증을 동시에 제공 할 수 없다고 말합니다.
일관성
모든 노드는 동시에 동일한 데이터를 포함합니다
유효성
매번 데이터를 제공 할 수있는 노드가 하나 이상 있어야합니다.
분할 공차
시스템 고장은 매우 드 rare니다
대부분의 모든 시스템은 CA, AP 또는 CP 중 최소한 두 가지 기능 만 보장 할 수 있습니다 .
답변
일관성 – 읽기 요청을 보낼 때 결과를 반환하는 경우 클라이언트 요청에서 제공 한 가장 최근의 쓰기를 반환해야합니다. 가용성 – 읽기 / 쓰기 요청은 항상 성공해야합니다. 파티션 허용 – 네트워크 파티션 (일부 컴퓨터가 서로 통신하는 데 문제가 있음)이 발생해도 시스템은 여전히 작동합니다.
분산에서는 네트워크 파티션이 발생할 가능성이 있으며 CAP의 “P”를 피할 수 없습니다. “Consistency”와 “Availability”중에서 선택합니다.