CAP이론

zioo·2022년 2월 6일
0

Backend

목록 보기
28/40

Consistency, Availability, Partition tolerance

C, A, P 중 가지 특성중 2가지 특성만을 충족 할수 있고 3가지 모두 충족할 수 없다는 이론.

  • 일관성(Consistency)
    모든 노드들은 같은 시간에 동일한 항목에 대하여 같은 내용의 데이터를 사용자에게 보여준다.
  • 가용성(Availability)
    모든 사용자들이 읽기 및 쓰기가 가능해야 하며, 몇몇 노드의 장애 시에도 다른 노드에 영향을 미치면 안된다.
  • 분할내성(Partition tolerance)
    메시지 전달이 실패하거나 시스템 일부가 망가져도 시스템이 계속 동작할 수 있어야 한다.

일관성(Consistency)

일관성을 가진다는 것은 모든 데이터를 요청할 때 응답으로 가장 최신의 변경된 데이터를 리턴 또는 실패를 리턴한다는 것입니다. 즉, 모든 읽기에 대해서 DB노드가 항상 동일한 데이터를 가지고 있어야한다는 의미입니다.

DB가 2개의 Instance를 유지하고 있다면 A에 요청하든 B에 요청하든 동일한 값이 반환됨을 의미합니다. 이말은 A에 update를 하든 B에 update를 했을 경우 누군가 동기화 되기전 READ를 한다면 바로 반환하는 것이 아니라 모두 동기화 후 READ가 되어야 합니다.

가용성(Availability)

가용성은 모든 요청에 대해서 정상적인 응답을 한다는 것입니다. 즉, 클러스터의 노드 일부에서 장애(Down 등)가 발생하더라도 READ와 WRITE 등의 동작은 항상 성공적으로 리턴되어야 한다는 것입니다.

분할 내구성(Partition Tolerance)

분할 내구성이란 DB Node간의 통신 장애가 발생하더라도 동작해야한다는 것입니다. Instacne A와 B가 있습니다. 이때 A와 B의 Instance간의 네트워크에 장애가 발생했습니다. 유저는 A DB에서 쿼리를 했습니다. Instance A는 B의 상태를 알지 못하지만 A 자체만으로 동작합니다. 이를 분할 내구성이라고 합니다.

가용성 VS 분할 내구성

가용성과 분할 내구성의 개념이 조금 헷갈릴 수 있을 것입니다. 개인적으로 확인 했을 때 가용성은 노드에서 장애가 발생하여 Down 되었을 때, 분할 내구성은 노드간의 통신이 정상적으로 이루어지지 않을 때 라고 확인하였습니다.

Client 입장에서보면 차이가 있습니다. 전자의 경우 client a와 b가 있을때 모두 동일한 장애가 나지 않는 node를 이용하지만, 후자의 경우 client 별로 바라보고 있는 node가 다를 수 있습니다.

실제 DB 비교


DB의 CAP 이론 기준의 분류.. 현실과 동떨어진 부분이 많다.

CAP 이론에 맞춰 DB가 어떤 특성 2가지를 가지고 있는지 확인한 삼각형 그래프입니다. 몇가지 DB를 예를들어 확인해보도록 하겠습니다.

Mysql

MySQL은 위의 삼각형 그래프에서 CA에 속한다고 되어있습니다. 하지만 실질적으로는 설정하기에 따라서 CP 또는 CA에 속할 수 있습니다. 기본적으로 MySQL을 그냥 사용했을 때는 CA에 속하게됩니다. 왜나하면 main이 되는 master 노드가 있고 그 노드를 복제해서 사용하는 slave 가 있는 패러다임을 사용하기 때문입니다. 이때 MySql은 가용성과 일관성을 만족하게 됩니다.

하지만 MySQL은 cluster 설정을 지원합니다. cluster 설정을 하면 MySQL은 CP를 만족하는 시스템이 됩니다. 왜냐하면 data를 유지할만한 cluster 노드가 존재하지 않으면 cluster는 종료될 것이기 때문입니다.

DynamoDB

DynamoDB는 aws에서 지원하는 key/Value의 NoSQL로 AP에 속한다고 알려져있습니다. Dynamo는 key값을 hashing 하고 또 이 값을 mod하여 맞는 서버에 저장해둡니다. 그리고 전체 노드 중 일부 node에 복제해 둡니다. 그리고 data versioning도 진행합니다. DynamoDB에는 strongly consistent 설정을 할 수 있습니다. 이 설정을 하게 되면 DynamoDB는 CP로 변하게 됩니다. 이 설정을 하게 되면 가장 최신의 데이터를 반드시 리턴하게 됩니다. 따라서 모든 노드를 찾기 때문에 가용성은 조금 떨어지게 됩니다.

마무리

CAP 이론 처럼 완벽한 CP, AP 시스템은 없고 대부분 CP와 AP의 어느 중간 쯤에 존재합니다. 그리고 위의 예제에서 봤듯이 configuration에 따라서 변하는 부분이기도 합니다. 또한 이론 자체에 몇가지 한계점이 존재합니다. 가장 문제가 되는것이 P에 대한 명확한 정의가 부족하다는 것입니다. 이런 문제점을 극복하고자 PACELC 이론이 나오기도 했습니다. 따라서 오늘의 이론은 어디까지나 참고로 봐주시기 바랍니다.

0개의 댓글