분산시스템 이론, CAP와 PACELC
다음 자료를 기반으로 정리하고 작성하였습니다. 저의 글보다 링크의 글을 더 추천합니다. 간단하게 CAP와 PACELC를 정리하는 형태로 현재 글은 작성되었습니다.
- http://eincs.com/2013/07/misleading-and-truth-of-cap-theorem/
CAP
- CAP는 분산시스템을 설명하고 설계하는데 사용되는 이론으로서, 요소 세 개 CAP 중 두 개만 선택 가능하다는 이론이다.
- CAP의 요소
- 일관성(Consistency) : 데이터를 저장하는 장비가 1대 든 100대든 모든 장비에서 동일한 데이터가 저장되어 있어야 한다는 것이다. ACID 원리에서 의미하는 것과 같다. 어떤 데이터베이스 속성에 C가 있다면, 트랜잭션 기능 또는 그와 비슷한 매커니즘이 존재한다는 뜻이다.
- 가용성(Availablity) : 가용성은 죽지 않은 상태의 모든 서버는 클라이언트에게 항상 정상 처리 응답을 보애주어야 한다는 것을 의미한다. 클라이언트가 읽기, 쓰기 요청을 하면 제대로 읽고 쓰는 작업을 해야한다. 현재 시스템에 문제가 있어서 읽을 수 없다고 보내면 가용성이 보장되지 않는 것을 뜻한다.
- 분단 허용성(Partition tolerance) : 분단 허용성은 클러스터가 여러 대 동작하고 있을 때, 해당 클러스터 사이에 접속이 단절되어 서로 통신을 할 수 없는 상황에서도 시스템이 잘 동작해야 한다는 것이다.
https://dongwooklee96.github.io/post/2021/03/26/cap-%EC%9D%B4%EB%A1%A0%EC%9D%B4%EB%9E%80/
CAP의 한계
- 네트워크의 문제는 분산시스템에서 필연이다. 그러니까 노드 간 네트워크 문제가 발생하거나 특정 노드가 고장난 상황은 분산시스템에 있어서 당연하게 여겨지고 이를 고려하여 시스템을 구축해야 한다. P는 반드시 선택되어야 한다. 결국 CAP 중 두 개를 선택하는 것이 아닌 P를 선택한 조건에서 C 혹은 A를 선택해야 하는, 이론적 한계가 존재한다.
- 장애 상황과 일반적인 상황은 나눠서 생각해야 한다. 장애가 없는 경우 CAP를 모두 만족시킬 수 있다.
- 결과적으로 CAP 모델은 한계를 가진다. 장애가 없는 상황과 장애가 있는 상황 혹은 지연이 느린 상황 등 다양한 형태에 대한 대응책은 다를 수밖에 없다.
- PACELC는 CAP의 이론적 한계를 개선한다.
PACELC
- PACELC 이론은 P(Partition: 파티션 분리, 네트워크 장애 상황)와 (else, 정상)를 구분하여 적합한 전략을 선택한다.
- E일 때는 L(latency)와 C(consistency) 중 하나를 선택한다.
- P일 때는 A(availability)와 C(consistency) 중 하나를 선택한다.
- EL vs EC : 정상 상태에서 일관성과 지연 중 하나를 선택해야 한다.
- 일관성을 선택한 경우, 최종 상태의 데이터를 어디서나 읽을 수 있도록 락을 건 상태로 데이터를 갱신한다. 쓰기에 초점을 맞춘다.
- 지연을 선택한 경우, 갱신 처리가 모든 노드에 완전하게 처리되지 않아 어떤 노드에서는 데이터가 최신의 상태가 아닐지라도 빠른 응답을 위하여 데이터를 즉각 리턴한다. 읽기에 초점을 맞춘다.
- PC vs PA : 파티션이 분리된 상태에서 일관성과 가용성 중 하나를 선택할 수 있다.
- 일관성을 선택한 경우, 정상적인 쓰기를 보장하지 못하므로 쓰기 자체가 불가능하다. 쓰기 실패로 응답을 한다.
- 가용성을 선택한 경우, 갱신 자체가 정상 상태가 요구하는 수준에 미달하더라도 일단 쓰기를 하고 성공으로 응답한다.
- 다만, 장애가 해결되고 결과적으로 노드 간 동기화 처리를 할 경우(Eventual Consistency로) CAP를 모두 만족시킨다.