PACELC 이론은 분산 데이터베이스에 적용되는 이론이다.
하지만, PACELC 이론을 시작하기 전에 CAP 이론부터 알아야 한다.
C : Consistency, 모든 요청은 최신 데이터를 응답받는다.
A : Availability, 모든 요청은 항상 정상 응답을 받는다.
P : Partition tolerance, 노드간 통신이 실패해도 시스템은 정상작동한다.
이 이론에 따르면, 분산 데이터베이스 시스템은 세 가지의 속성 중 두 가지만 만족할 수 있다는 이론이다.
만약 일관성(Consistency)을 포기하는 경우에는, 그냥 두 개의 DB를 만드는 경우이다.
두 DB간의 싱크를 포기한다면, 노드간(DB간) 통신이 실패해도 DB는 정상 응답을 돌려주며 정상작동한다.
다만, 하나의 DB에서 바꾼 값이 다른 DB에서는 바뀌지 않을 뿐이다.
하나의 트랜잭션을 시작하면, 모든 노드에 해당 트랜잭션이 적용되어야 다른 트랜잭션을 시작하는 경우이다.
모든 트랜잭션은 다른 DB에 적용이 되어 있는 상태기 때문에 항상 최신 데이터를 응답하고 노드간 통신이 실패한다고 하더라도 서로 동일한 DB를 가지고 있기 때문에 문제가 없다.
하지만 하나의 노드가 문제가 생길 시 트랜잭션이 완료되지 못한다.
만약 네트워크 위에서 동작하는 하나의 데이터베이스를 가정해 보자.
저장소와, 스토리지 엔진 등등 모든 구성품들이 각각 다른 곳에 저장되어 있지만, 결국 동작은 할 것이다.
하나의 거대한 데이터베이스이므로, 일관성은 말할 것도 없다.
하지만 네트워크가 끊긴다면, 구성품들간의 통신이 끊겨 데이터베이스는 멈춰버리고 말것이다.
물론, 분산 데이터베이스 시스템을 가정하고 만든 이론이기 때문에 네트워크를 통한 하나의 거대한 데이터베이스는 가정에 맞지 않다.
CAP 이론은 단순하지만, 실제 시스템에서는 3개 중 하나를 포기하는 경우 쓸모없어진다.
결국 타협을 하여 중간 어딘가에 있는 시스템을 사용한다.
이 때문에 다른 이론이 필요하다.
PACELC 이론은 정상 상황에서 지연시간과 일관성의 축을 더한다.
P : 네트워크 파티션
A : 가용성
C : 일관성
E : 정상
L : 지연 시간
C : 일관성
이 때문에 PACELC 이론이라는 이름을 갖게 되었다.
장애 상황과 정상 상황 모두 일관성을 챙기는 방식이다.
이는 CAP 이론의 CP와 매우 유사하다.
모든 트랜잭션마다 모든 노드에 적용시킨 후 다른 트랜잭션을 시작하면, 장애 상황과 정상 상황 모두 일관성은 유지된다.
하지만 모든 노드에 트랜잭션을 적용시키면서, 정상 상황에서도 많은 대기시간이 발생할 것이다.
PNUTS가 있다.
장애 상황에서는 일관성을 챙기지만, 정상 상황에서는 지연시간을 줄여 빠르게 응답을 하는 방식이다.
MongoDB가 있다.
장애 상황 시 가용 노드만 반영하고, 복구 시 전체에 트랜잭션을 반영한다.
정상 상황일 경우에는 모든 노드에서 동일한 메시지를 보장한다.
Cassndra, DynamoDB가 있다.
장애 상황 시 가용 노드만 반영하고, 복구 시 전체에 트랜잭션을 반영한다.
때문에, 일관성에 문제가 발생할 수 있지만 가용성은 문제없다.
정상 상황시 지연시간이 최대한 적게 만드는 방식이며, 모든 노드에 데이터를 반영하지 않기 때문에 일관성 보다는 빠른 응답에 초점을 맞춘다.
분산 데이터베이스를 사용하는 경우 많은 선택지가 있는데, 어떤 데이터베이스를 고를지에 대한 좋은 기준이 된 것 같다.
특히 데이터 백업의 용도로 분산 데이터베이스 시스템을 사용한다면, PC/EL의 방식으로 사용하는 것이 좋을 것 같다.