CAP 이론은 네트워크 장애 상황인 것을 전제로 생각한다면, PACELC 는 네트워크가 정상인 상황도 포함한 이론이다.
- 이 그림을 보면 좀 더 이해가 잘 될 수 있다.
- 위 그림은 네트워크의 장애 상황에 따라서 분기를 나누고 있다. 장애 상황일 때 (partition) 는 A (가용성) 과 C (일관성) 둘중에 하나를 선택해야 함을 그림에서 표현하고 있다.
- 네트워크 장애 상황이 아닌 정상 상황일 때는 L (지연)과 C (일관성) 둘중에 하나를 선택해야 한다.
- 지연과 일관성은 왜 트레이드 오프가 될까? 분산 데이터베이스 시스템에서 노드가 많아질수록 일관성을 지키는 것은 시간을 필요로 한다.
- 극단적인 예시로 100개의 노드가 있다고 생각해보자. 그렇다면 모든 노드가 일관성을 지키기 위해서는 그만큼 싱크되는 시간이 필요할 것이다.
-
HBase 는 PC / EC 이다. 풀어서 생각하면, 네트워크 장애상황에서는 일관성을 위해 가용성을 포기하고, 네트워크 정상상황에서도 일관성을 지키기 위해서 지연시간을 포기한다.
-
Cassandra 는 PA / EL 이다. 설정에 따라서 Eventual Consistency 특성 (언젠가는 데이터 일관성이 맞게 됌) 을 가지게 되는데 장애 상황인 경우에는 가능한 노드에만 데이터를 반영하고, 복구되면 나머지 노드에도 데이터를 모두 반영한다. 일관성을 '잠시' 포기하는 것이다. 정상 상황일 때도 빠른 응답 Latency 를 위해 모든 노드에 데이터를 반영하지 않는다.
-
야후의 PNUTS 는 PC/EL이다. 장애상황일 때는 C를 선택하고, 정상 상황일 때는 L을 위해 C를 희생한다. 무언가 이상하다. 장애 상황일때는 가용성도 포기하고 일관성을 선택하는데 정상 상황에는 레이턴시를 위해 일관성을 포기한다니? 말이 안되는 것 같지만, 여기서 PC의 의미는 평소만큼의 C를 보장하기 위해서 A를 희생시킨다는 의미로 받아들이면 된다. PNUTS의 일관성 레벨은 Timelime Consistency 다. 일반적으로 생각하는 일관성 보다는 약하지만, 장애상황일 때에도 정상상황일 때와 같은 Consistency 레벨을 보장하기 위해 요청 자체를 실패시킨다.
-
위에서 마지막 야후의 PNUTS 는 CAP 이론으로 설명하기는 다소 모호하다. 네트워크 장애 상황에 따라서 선택하게 되는 요소가 바뀌기 때문이다.
-
이처럼 다양한 분산 데이터베이스 시스템 디자인에 대해서 분류하기 위해서는 CAP 이론보다는 PACELC 이론이 보다 명확하다.