[DB] CAP 이론

CAP 이론

CAP 이론은 에릭 브러워가 분산 스토리지는 일관성(Consistency), 가용성(Availability), 분할 내성(Partition Tolerance)을 만족시킬 수 없음을 정리해놓은 이론이다.

DB가 A, B, C 노드로 분산되어 있는 환경이 전제가 되어 있다고 생각해보자

일관성(Consistency)

모든 데이터를 읽는 수행(Read Operation)이 최신 데이터를 읽는다는 것을 보장하는 것이다.

A 노드에 1000원이 저장되어 있을 때 이를 2000원으로 변경했다. 이와 같은 변경사항은 B와 C노드에도 반영이 되어야 하는데 반영에는 시간이 필요하다. 이 상황에서 B와 C 노드에 접근한 유저에게 반영 후의 결과를 보내기 위해 기다리게 하고 최신 데이터를 응답한다면 이는 일관성 있는 시스템이라고 할 수 있다.

C를 보장하는 시스템은 만약 최신 데이터를 보장하지 못하면 에러를 내야한다.(CAP 중 구현이 가장 어렵다는 의견)

가용성(Availability)

모든 수행,요청(Operation)이 정상 응답을 받는다. 에러가 아닌 데이터를 돌려주는 것이다. 이때 돌려 주는 데이터는 최신 데이터가 아니어도 된다.

B 노드에 장애가 생겨서 서비스를 못해도 A, C 노드가 살아있기 때문에 A, C 노드로 서비스가 유지된다면 가용성 있는 시스템이라고 할 수 있다.

여기서 A와 C에 변경사항이 생긴다든가 B노드가 제대로 작동을 못하고 있다면 이는 일관성 있는 시스템이라고 보기는 힘들다.

네트워크 파티션 허용(Partition Tolerance)

노드 간 통신이 실패하는 경우라도 시스템은 정상 동작해야한다.

B 노드가 네트워크 장애로 A, C 노드와 통신이 안되는 상황이다.

이때

  1. 변경 사항들이 제대로 적용되지 않지만(Replication이 제대로 적용X) 서비스가 계속 된다면 일관성은 없지만 가용성 있는 시스템이라고 볼 수 있다.

  2. 변경 사항들이 제대로 적용될 때까지, 즉 일관성을 유지하기 위해 네트워크 장애 해소를 기다리면 가용성이 떨어지는 시스템이 된다.

위의 세가지 관점에서 봤을 때 CAP 세가지 속성을 모두 만족하는 것은 존재할 수 없다.

CP 시스템

완벽한 일관성을 갖는 분산 시스템에서 데이터 변경은 분산된 모든 노드에 복제되어야 한다. 만약 하나의 노드라도 문제가 생긴다면 트랜잭션은 실패한다.

AP 시스템

완벽한 가용성을 갖는 분산 시스템에서 모든 노드가 어떤 상황이든 응답해야한다. 네트워크 문제가 발생해서 일관성 문제가 발생하더라도 가용성을 위해 어떤 데이터든 반환이 되어야 한다. 일관성은 이미 깨졌고, 사용자는 어떤 문제가 발생한지도 파악하지 못한다.

CA 시스템

일관성과 가용성을 동시에 만족하기 위해서는 네트워크 장애(P)가 허락되서는 안된다. 네트워크 장애가 절대 일어나지 않는 네트워크 구성은 존재할 수 없다. 결국엔 서비스 목적에 맞도록 CP와 AP 중 하나를 골라서 시스템을 구성해야 한다.

PACELC 이론

위와 같은 CAP이론의 부족한 점을 보완하기 위해 네트워크 장애 상황과 정상상황을 나누어서 설명하는 이론이다.

이는 나중에 필요로 할 때 다시 정리해야겠다.

  참조:
  https://ko.wikipedia.org/wiki/NoSQL
  https://ko.wikipedia.org/wiki/CAP_%EC%A0%95%EB%A6%AC
  https://blog.seulgi.kim/2018/03/cap-theorem.html
  https://ohjongsung.io/2019/05/01/cap-%EC%9D%B4%EB%A1%A0%EA%B3%BC-pacelc-%EC%9D%B4%EB%A1%A0