본문 바로가기

정보

cap 이론


이번에는 CAP 이론에 대해서 알아보자.


먼저 CAP 이론을 누가 먼저 알아봤는지 찾아보았다.


CAP이론은 Eric Brewer 라는 컴퓨터 과학자가 1990년대 후반에 분산 네트워크 애플리케이션에 대한 CAP정리를 공식화 했다.


Eric Brewer는 2000년 7월 19일 PODC (Sysposium on Principles of Distrubuted Computing)에서  "분산 시스템에서는  위 그림의 3개 속성 모두를 가지는 것은 불가능 하다!" 라고 말했습니다.


그럼 이제 CAP에 대해서 알아보자.


일관성 (Consistency) :  분산된 노드 중 어느 노드로 접근하더라도 데이터 값이 같아야 한다. (데이터 복제 중에 쿼리가 되는 일관성을 제공하지 않는 시스템의 경우 다른 데이터 값이 쿼리될 수 있다.)


유효성 (Availability) :  클러스터링된 노드 중 하나 이상의 노드가 실패(Fail)라도 정상적으로 요청을 처리할 수 있는 기능을 제공한다.


파티션 허용 (Partition tolerance) :  클러스터링 노드 간에 통신하는 네트워크가 장애가 나더라도 정상적으로 서비스를 수행한다. 노드 간 물리적으로 전혀 다른 네트워크공간에 위치도 가능하다.


CAP 이론의 이해

CAP이론은 2002년 MIT의 Seth Gilbert와 Nancy Lynch에 의해서 증명되었다. CAP이론을 증명하는 논문에는 그림이 하나도 없어서 너무너무 재미 없다. 재미없는 논문 보다는 간단한 그림으로 CAP이론을 이해해볼 수 있다.

CAP이론을 이해해보기에 앞서.. 다음과 같은 상황을 가정해본다.


understanding_cap1
– 네트워크가 N1, N2로 구분된 분산환경이다.
– 각 DB 노드는 V=V0이라는 값을 가지고 있다.
– 각 네트워크에는 A, B라는 클라이언트가 존재한다.
– A는 V=V1이라고 쓰고 B가 그것을 읽는다.

이런 환경에서 메시지 전달 과정(M)에서 문제가 생겼을 때..


understanding_cap2

1. “C”가 꼭 필요한 상황인 경우
– A가 V1이라고 썼기 때문에 B는 V1이라고 읽을 수 있어야만 한다.
– A의 쓰기 동작은 M이 복구되기 전까지는 성공할 수 없다.
– M이 복구되기 전까지는 A의 Write는 block되거나 실패해야 한다. = Availability가 없음 = CP
– M이 문제가 생길 수 없도록 구성 = Partition-Tolerance가 필요 없음 = CA

2. “A”가 꼭 필요한 상황인 경우
– 어떤 경우에도 서비스가 Unavailable하면 안된다.
– A와 B가 꼭 동일한 데이터를 읽을 필요는 없음 = AP
– M이 문제가 생길 수 없도록 구성 = Partition-Tolerance가 필요 없음 = CA

3. “P”가 꼭 필요한 상황인 경우
– 메시지 전달 과정(M)에서 문제가 생기더라도 시스템에 영향이 가서는 안된다.
– A와 B가 꼭 동일한 데이터를 읽을 필요는 없음 = AP
– A의 쓰기 동작은 M이 복구되기를 기다린다. = 그동안 쓰기 서비스 불가능 = Availability가 없음 = CP

출처: https://embian.wordpress.com/2013/06/27/nosql-2/