본문 바로가기
개발/DB

CAP 정리와 PACELC 정리

by 달사쿠 2022. 8. 10.
728x90
반응형

CAP 정리

CAP 정리는 C (Consistency/일관성), A (Availability/가용성), P(Partition tolerance/분할 용인)의 약자로,

세 가지 조건을 모두 만족하는 분할 컴퓨팅 시스템(Distributed System)이 존재하지 않음을 나타내는 이론입니다.

다른 말로는 CAP 정의, CAP theorem, Brewer's theorem이 있습니다.

 

이 이론의 조건들에 대해서 먼저 짚고 넘어가겠습니다.

조건 설명
Consistency (일관성) 모든 노드는 동일한 데이터를 바라볼 수 있어야 합니다. 
즉, 모든 읽기에 대해서 모든 DB의 노드들이 항상 동일한 데이터를 가지고 있어야 합니다.
Availability (가용성) 모든 요청은 성공 혹은 실패라는 정상적인 응답을 받아야 합니다.
클러스터의 노드 일부에서 장애가 발생하더라도 READ/WRITE 등의 동작에 대해 성공 혹은 실패라는 응답이 내려와야 합니다. 
Partition tolerance (분할 용인) 2000년에 Brewer가 발표한 정의: 
시스템은 임의의 메세지가 손실되거나 시스템의 일부가 고장나더라도 계속 작동해야 합니다.

2002년에 Gilbert와 Lynch가 이론 증명에 사용한 정의:
네트워크는 한 노드에서 다른 노드로 전송된 많은 메세지가 임의로 잃을 수 있습니다.

 

이 이론은 분산시스템에서는 C, A, P 세가지 조건 중 2가지 조건만 충족할 수 있으며, CA, CP, AP의 조합을 만들 수 있다고 알려져 있습니다. 그렇다보니 마치 P를 포기하고 CA를 선택할래, A를 포기하고 CP를 선택할래 등과 같은 느낌을 줍니다.

 

CAP 정리를 처음 발표한 에릭 브루어(Eric Brewer)는 종종 사용되는 "3개 중 2개"의 개념은 다소 오해가 있다고 했습니다. 이는 시스템 설계자는 파티션(네트워크 장애)이 있을 때에만 일관성(Consistency)이나 가용성(Availability)을 희생하기만 하며, 복구 기술의 발전으로 설계자가 높은 수준의 일관성과 가용성을 모두 달성할 수 있게 되었다고 말합니다. 

또한 이 정리에 의하면 네트워크 파티션 오류가 발생할 경우에는 다음을 결정해야 한다는 전제가 있습니다. 

  • 작업을 취소하여 가용성(Availability)는 낮추되, 일관성 (Consistency)는 보장한다
  • 작업을 진행하여 가용성 (Availability)는 제공하지만, 일관성 (Consistency)는 위험하다.

사실 절대로 장애가 안나는 네트워크는 없기 때문에, P(분할 용인)은 반드시 필요로 하는 것을 알 수 있습니다.

 

따라서 CAP 정리는 분산시스템 환경에서 네트워크 장애 상황일 때 일관성과 가용성 중 어떤 것을 선택할 것인지에 대한 이론입니다.

*참고로 CAP 정리의 일관성은 ACID 데이터베이스 트랜잭션에서 보장된 일관성과는 상당히 다릅니다.

 

 

이 CAP 정리는 언급했던 것과 같이 네트워크 장애상황을 가정한 이론이기 때문에, 장애가 아닌 정상 상황일 때의 분산 시스템의 동작은 서술하지 못한다는 문제가 있습니다.

 

이에 대해서 예일대의 Daniel Abadi가 2010년 PACELC theorm을 처음 블로그 포스팅으로 올렸고, 2012년 논문으로 다시 제시했습니다. 

 


PACELC 정리

파티션(Partition)이 있는 경우, 시스템은 가용성(Availability)과 일관성(Consistency) 사이에서 어떻게 균형을 이루는가?
그렇지 않은 경우(Else) 파티션이 없는 상태에서 시스템이 정상 작동 중일 때, 시스템은 지연 시간(Latency)과 일관성(Concistency) 사이에서 어떻게 균형을 이루는가?

PACELC는 파티션 상황에는 A와 C는 상충하며 둘 중 하나를 선택해야 하며, 정상상황일 때에는 L과 C는 상충하며 둘 중 하나를 선택해야 한다는 얘기입니다.  네트워크 단절이 일어나 몇 개의 노드에 접근할 수 없을 때, 일관성을 위해 데이터 반영이 아예 실패하던지, 일관성을 포기하고 일단 접근 가능한 노드들이게 만 데이터를 반영하던지 둘 중의 하나만 골라야 합니다.

정상 상황일 경우에는 모든 노드들에 새로운 데이터를 반영하는 것은 상대적으로 긴 응답시간이 필요하기 때문에, 낮은 latency를 선택할 것인지 일관성을 선택할 것인지 결정해야 합니다.

반응형

HBase를 예로 들어보자면, PC/EC입니다. 장애 상황일때 일관성을 위해 데이터 반영이 실패되며, 정상 상황에도 일관성을 위해 지연 시간을 용인합니다.

DDBS P+A P+C E+L E+C
BigTable/HBase   O   O
Cassandra O   O  
Cosmos DB   O O  
Couchbase   O O O
DynamoDB O   O  
FaunaDB   O O O
Hazelcast IMDG O O O O
Megastore   O   O
MongoDB O     O
MySQL Cluster   O   O
PNUTS   O O  
PostgreSQL   O   O
Riak O   O  
VoltDB/H-Store   O   O

 


ref

https://codedragon.tistory.com/7609

https://en.wikipedia.org/wiki/CAP_theorem

http://eincs.com/2013/07/misleading-and-truth-of-cap-theorem/

https://en.wikipedia.org/wiki/PACELC_theorem

728x90
반응형

댓글