0. 들어가며


분산 시스템 설계와 구현에는 여러 가지 이론과 알고리즘, 데이터 구조가 중요한 역할을 한다. 이런 개념을 알아두면 분산 시스템 구성에 필요한 기본기를 쌓을 수 있다.

1. CAP 정리


CAP 정리는 분산 시스템이 일관성, 가용성, 파티션 허용성을 동시에 취할 수 없다는 정리이다.

파티션이 단절되는 것은 피할 수가 없는 일이라 파티션 허용성을 배제할 수 없는데 이 때 일관성, 가용성 중에 하나를 선택하는 것이 중요하다.

  1. 일관성을 선택하면 데이터 정합성을 보장하기 위해 일부 노드의 가용성을 포기해야하고, (CP)
  2. 가용성을 선택하면 네트워크 파티션으로 최신화 되지 못한 데이터를 가지고 있는 노드도 응답해야하니 데이터 정합성이 깨진다. (AP)

이 선택은 애플리케이션 성격에 따라 다르며, 높은 가용성과 응답성이 중요하다면 AP, 정합성이 매우 중요하다면 CP를 선택하는 경우가 많다.

2. PACELC 정리


CAP 정리에서 좀 더 개념을 추가한 정리로, 분산 시스템은 파티션 단절이 항상 발생하지는 않는데 이 때 어떤 것을 선택할 것이냐에 대한 것이다.

파티션 단절이 발생하지 않으면 지연 시간과 일관성을 트레이드 오프할 수 있다. 이를 선택하는 것에 대한 내용이다.

분산 시스템에서는 서버 여러 대가 함께 작업을 수행하기 때문에 각 서버가 동일한 결정을 내리는 것이 중요하다. 이를 위해서는 여러 노드 간의 합의를 이루는 것이 필수이다. 이 합의를 도출하는데 사용하는 팩소스와 래프트 알고리즘을 알아보자.