CAP

분산 시스템, CAP 이론

분산 시스템

현대 시스템 설계에서 분산 시스템은 자주 등장하는 개념이다.

분산 시스템은 여러 대의 컴퓨터가 네트워크를 통해 상호 작용하여 하나의 시스템처럼 작동하는 시스템을 말한다.

이 시스템은 데이터 처리, 저장, 통신 등을 분산하여 수행함으로써 성능을 향상시키고, 신뢰성을 높이며, 확장성을 확보한다.

분산 시스템의 주요 목표는 고가용성, 데이터 무결성, 일관성 유지 등을 통해 사용자가 안정적이고 신뢰할 수 있는 서비스를 제공받을 수 있도록 하는 것이다.

분산 시스템의 장점 중 하나는 확장성이다. 시스템에 더 많은 컴퓨터를 추가함으로써 처리 능력을 확장할 수 있다.

또한, 특정 컴퓨터에 장애가 발생해도 전체 시스템의 운영에는 영향을 미치지 않도록 설계할 수 있다.

이러한 이점은 대규모 데이터 처리와 고가용성이 요구되는 현대의 다양한 서비스에서 분산 시스템이 필수적인 이유 중 하나이다.


CAP 이론

CAP 이론은 분산 시스템에서 일관성(Consistency), 가용성(Availability), 네트워크 분할 허용(Partition Tolerance) 세 가지 특성을 동시에 모두 만족할 수 없다는 것을 설명하는 이론이다.

이 이론은 Eric Brewer가 2000년에 제안한 것으로, 이후 분산 시스템 설계의 중요한 원칙으로 자리 잡았다.


Consistency

모든 노드가 동일한 시점에 동일한 데이터를 보유하고 있는 상태 를 말한다.

강한 일관성을 보장한다면, 어떤 업데이트가 발생했을 때 모든 노드가 즉시 그 변경을 반영해야한다.

Availability

모든 요청에 대해 항상 응답할 수 있는 상태를 의미한다.

노드에 장애가 발생하더라도 시스템은 계속해서 정상적으로 동작해야 한다.

Partition Tolerance

네트워크 단절 상황에서도 시스템이 정상적으로 동작할 수 있는 능력을 의미한다.

네트워크가 분할되어도 시스템은 계속해서 기능을 제공해야 한다.


CAP 이론에 따르면, 분산 시스템은 이 세 가지 중 두 가지 특성만을 동시에 만족할 수 있다.

예를 들어, 네트워크 분할 상황에서 일관성과 가용성을 동시에 유지하는 것은 불가능하다.

따라서 시스템 설계자는 CAP 이론을 고려하여 우선순위를 정하고 시스템을 구축해야 한다.


Use Case

실제 사례를 통해 이해도를 높여보자.

Aurora MySQL

Aurora MySQL은 AWS에서 제공하는 고성능 분산형 관계형 데이터베이스 서비스다.

Aurora MySQL은 높은 가용성과 확장성을 제공하며, CAP 이론에 따라 네트워크 분할 허용성과 가용성을 우선시하는 설계를 채택하고 있다.

이를 통해 데이터가 여러 가용 영역에 걸쳐 복제되고, 한 가용 영역에 장애가 발생해도 다른 영역에서 데이터 접근이 가능하도록 한다.

Aurora MySQL은 네트워크 분할 허용성을 여러 가지 방법으로 처리한다.

첫째, Aurora는 다중 가용 영역(Multi-AZ) 아키텍처를 사용하여 데이터를 여러 가용 영역에 자동으로 복제한다.

이로 인해 하나의 가용 영역에서 네트워크 분할이나 장애가 발생하더라도 다른 가용 영역에서 데이터에 접근할 수 있다. 이러한 데이터 복제는 높은 내구성과 가용성을 보장한다.

둘째, Aurora는 분산된 스토리지 시스템을 사용하여 데이터의 각 조각을 여러 노드에 분산 저장한다.

이러한 스토리지 계층은 자동으로 장애를 감지하고, 필요시 데이터의 다른 복제본을 활성화한다. 이로 인해 네트워크 분할 상황에서도 데이터 손실 없이 시스템이 계속해서 동작할 수 있다.

셋째, Aurora는 자동 장애 조치(failover) 기능을 통해 네트워크 분할이나 특정 노드의 장애 발생 시 빠르게 다른 복제본으로 전환한다.

이 과정은 대부분의 경우 몇 초 내에 이루어지며, 애플리케이션이 중단 없이 작동할 수 있도록 지원한다.

마지막으로, Aurora는 트랜잭션 로그를 분산 저장하고, 각 노드가 로그를 독립적으로 유지하며, 동기화 메커니즘을 통해 데이터의 일관성을 보장한다.

이러한 메커니즘은 네트워크 분할 상황에서도 트랜잭션의 무결성과 일관성을 유지할 수 있도록 한다.

결과적으로, Aurora MySQL은 네트워크 분할 허용성을 처리하기 위해 여러 가지 분산 시스템 기술을 통합하여 높은 가용성과 데이터 무결성을 유지한다.

이러한 설계는 대규모 트랜잭션 처리와 고가용성이 요구되는 애플리케이션에 적합하다.

MongoDB

MongoDB는 NoSQL 데이터베이스로, 문서 지향적 저장 방식을 사용한다.

MongoDB 역시, CAP 이론에서 네트워크 분할 허용성과 가용성을 우선시하는 설계를 취하고 있다.

MongoDB는 복제본 집합을 통해 데이터의 가용성을 높이며, 네트워크 분할 상황에서도 데이터의 접근성을 유지할 수 있다.

MongoDB의 일관성 모델은 설정에 따라 조정할 수 있다.

기본적으로 최종 일관성(Eventual Consistency)을 제공하지만,

필요에 따라 강한 일관성(Strong Consistency) 모드를 설정할 수 있다.

이러한 유연성은 다양한 애플리케이션 요구사항에 맞게 MongoDB를 사용할 수 있도록 한다.

Blockchain

블록체인은 분산 원장 기술로, 거래 기록을 중앙 관리자 없이 여러 노드에 분산하여 저장한다.

블록체인 역시, CAP 이론에서 네트워크 분할 허용성과 가용성을 우선시하는 설계를 취하고 있다.

네트워크 분할 허용성(Partition Tolerance)은 블록체인의 근본적인 특성 중 하나로, 네트워크가 분할되었을 때도 각 분할된 네트워크가 독립적으로 블록을 생성하고 거래를 기록할 수 있다.

이러한 분할 상황에서 일시적인 불일치가 발생할 수 있으며, 어떤 체인에서는 고아블록(Orphan Block)이 생성되기도 한다.

이는 블록체인의 탈중앙화된 합의 메커니즘이 네트워크의 일부 노드가 일시적으로 다른 노드와 연결되지 않더라도 시스템의 가용성을 유지하도록 설계되었기 때문이다.

블록체인은 합의 알고리즘을 통해 네트워크가 다시 연결되었을 때 일관성을 맞추는 방식으로 동작한다.

예를 들어, 비트코인의 경우 작업 증명(Proof of Work) 합의 알고리즘을 사용하여 가장 긴 체인을 인정하는 방식으로 일관성을 유지한다.

이 과정에서 여러 노드가 독립적으로 블록을 생성하고 경쟁하는 상황이 발생하며, 최종적으로 합의에 도달하면 일시적인 불일치가 해결된다.

왜 세 기술 모두 AP를 우선할까?

내 생각에 그 이유는 분산 시스템의 목적이 고가용성과 네트워크 분할 상황에서도 지속적인 운영을 보장하는 것이 우선이기 때문이다.

분산 시스템에서는 네트워크 장애나 특정 노드의 장애가 발생할 가능성이 높다.

이러한 상황에서 시스템이 중단 없이 작동하려면 가용성과 네트워크 분할 허용성을 우선시하는 것이 필수적이다.

블록체인, Aurora MySQL, MongoDB 모두 분산된 환경에서 높은 가용성을 유지하면서도 네트워크 분할 상황에 유연하게 대응할 수 있도록 설계되어 있다.

이는 사용자에게 지속적이고 안정적인 서비스를 제공하기 위한 중요한 전략이다.

Last updated