CAP 정리-가용성 및 파티션 공차
CAP의 "가용성"(A) 및 "파티션 공차"(P)를 이해하려고 시도하는 동안 다양한 기사의 설명을 이해하기가 어렵습니다.
나는 A와 P가 함께 갈 수 있다고 생각합니다 (이 경우가 아니라는 것을 알고 있으므로 이해하지 못합니다!).
간단한 용어로 설명하면 A와 P는 무엇이고 차이점은 무엇입니까?
일관성은 클러스터 전체에서 데이터가 동일하므로 모든 노드에서 읽고 쓸 수 있으며 동일한 데이터를 얻을 수 있습니다.
가용성은 클러스터의 노드가 다운 되더라도 클러스터에 액세스 할 수있는 기능을 의미합니다.
파티션 허용 오차는 두 노드 사이에 "파티션"(통신 중단)이 있어도 (두 노드가 작동하지만 통신 할 수 없음) 클러스터가 계속 작동 함을 의미합니다.
가용성과 파티션 허용 오차를 모두 얻으려면 일관성을 포기해야합니다. 마스터-마스터 설정에 X와 Y라는 두 개의 노드가 있는지 고려하십시오. 이제 X와 Y 사이의 네트워크 통신이 중단되어 업데이트를 동기화 할 수 없습니다. 이 시점에서 다음 중 하나를 수행 할 수 있습니다.
A) 노드가 동기화되지 않도록 허용 (일관성 제공) 또는
B) 클러스터가 "중단 된"것으로 간주 (가용성 제공)
사용 가능한 모든 조합은 다음과 같습니다.
- CA- 모든 노드가 온라인 상태 인 한 모든 노드간에 데이터가 일관되며 모든 노드에서 읽고 쓸 수 있으며 데이터가 동일한 지 확인할 수 있지만 노드 간 파티션을 개발 한 경우 데이터는 동기화되지 않음 (파티션이 해결되면 다시 동기화되지 않음)
- CP- 데이터는 모든 노드간에 일관되며 노드가 다운 될 때 사용할 수 없게되어 파티션 허용 오차를 유지합니다 (데이터 비동기 방지).
- AP- 노드는 서로 통신 할 수없는 경우에도 온라인 상태를 유지하며 파티션이 해결되면 데이터를 다시 동기화하지만 모든 노드가 동일한 데이터를 가지고 있다고 보장 할 수는 없습니다 (파티션 중 또는 이후).
당신은주의해야 CA 시스템이 실질적으로 존재하지 않는 (일부 시스템이 그렇게 주장하는 경우에도).
P를 C와 A와 같은 용어로 간주하는 것은 약간의 실수이며, C, A, P 중 '3에서 2'라는 개념은 오해의 소지가 있습니다. 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 ) 없이 존재할 수
일관성 – 읽기 요청을 보낼 때 결과를 반환하는 경우 클라이언트 요청에서 제공 한 가장 최근의 쓰기를 반환해야합니다. 가용성 – 읽기 / 쓰기 요청은 항상 성공해야합니다. 파티션 허용 – 네트워크 파티션 (일부 컴퓨터가 서로 통신하는 데 문제가 있음)이 발생해도 시스템은 여전히 작동합니다.
In a distributed there are chances that network partition will occur and we cannot avoid “P” of CAP. So we choose between “Consistency” and “Availability”.
http://bigdatadose.com/understanding-cap-theorem/
In simple CAP theorem states that its impossible for a distributed system to simultaneously provide all three guarantees:
Consistency
Every node contains same data at the same time
Availability
At least one node must be available to serve data every time
Partition tolerance
Failure of the system is very rare
Mostly every system can only guarantee minimum two features either CA, AP, or CP.
I feel partition tolerance is not explained well in any of the answers so just to explain things in some more detail CAP theorem means:
C: (Linearizability or strong consistency) roughly means
If operation B started after operation A successfully completed, then operation B must see the system in the same state as it was on completion of operation A, or a newer state (but never old state).
A:
“every request received by a non-failing [database] node in the system must result in a [non-error] response”. It’s not sufficient for some node to be able to handle the request: any non-failing node needs to be able to handle it. Many so-called “highly available” (i.e. low downtime) systems actually do not meet this definition of availability.
P:
Partition Tolerance (terribly misnamed) basically means that you’re communicating over an asynchronous network that may delay or drop messages. The internet and all our data centres have this property, so you don’t really have any choice in this matter.
출처 : 굉장한 Martin kleppmann의 작품
Cassandra는 최대 AP 시스템 일 수 있습니다. 그러나 Quorum을 기반으로 읽거나 쓰도록 구성하면 CAP 사용 가능 (CAP 정리의 정의에 따라 사용 가능)으로 유지되지 않으며 P 시스템 일뿐입니다.
참고 URL : https://stackoverflow.com/questions/12346326/cap-theorem-availability-and-partition-tolerance
'IT' 카테고리의 다른 글
| MySQL에서 두 날짜의 차이점 (0) | 2020.05.31 |
|---|---|
| Visual Studio Code : 줄 끝을 표시하는 방법 (0) | 2020.05.31 |
| LayoutInflater가 지정한 layout_width 및 layout_height 레이아웃 매개 변수를 무시하는 이유는 무엇입니까? (0) | 2020.05.31 |
| Objective-C가 NSString을 전환 할 수 있습니까? (0) | 2020.05.31 |
| ASP.NET CORE에서 클라이언트 IP 주소를 어떻게 얻습니까? (0) | 2020.05.31 |

