분산 시스템의 설계 이론을 말하는 것으로, 시스템이 Consistency (일관성), Availability (가용성), Partition Tolerance (분할 내성) 이 세 가지를 모두 동시에 완벽히 충족할 수 없다는 것을 말합니다. 이 3가지를 모두 만족시킬 수는 없으니, 시스템이 요구하는 것이 무엇인지에 따라 한 가지는 어느 정도 포기해야 한다는 이론입니다.

 

각 항목별 구체적인 설명은 다음과 같습니다.

 

1. 일관성 (Consistency)

  • 어떤 노드에 연결하든 모든 클라이언트가 동시에 동일한 데이터를 볼 수 있어야 함을 의미합니다. (일종의 정확성)
  • 어떤 데이터가 갱신됐다고 치면, 해당 데이터를 조회할 때 어떤 노드에서 조회하든 모든 노드가 동일한 값을 반환해야 합니다.
  • 데이터가 한 노드에 기록될 때마다 쓰기가 '성공'된 것으로 간주되기 전에 다른 모든 노드에 데이터를 즉시 전달하거나 복제해야 합니다. 

 

2. 가용성 (Availability)

  • 모든 요청(읽기 및 쓰기)에 대해 항상 응답할 수 있어야 함을 의미합니다. 즉 언제든지 서비스가 가용해야 한다는 뜻입니다.
  • 데이터를 요청하는 모든 클라이언트가 하나 이상의 노드가 다운된 경우에도 응답을 받을 수 있어야 합니다.
  • 즉, 분산 시스템의 모든 작업 노드가 예외 없이 모든 요청에 대해 유효한 응답을 반환해야 합니다.
  • 시스템 일부가 장애를 겪더라도 다른 노드가 요청을 처리하여 응답해야 합니다.

 

3. 분할 내성(파티션 허용성이라고도 부름, Partition Tolerance)

  • 시스템에 분할이 생겨도 여전히 시스템은 동작해야 함을 의미합니다.
  • 즉 네트워크 단절(Network Partition, 예를 들면 일부 노드 간 통신 불가) 상황에서도 시스템은 계속 작동할 수 있어야 합니다.

 

 

 

 

단일 노드 시스템이라면 분할 내성은 고려하지 않아도 됩니다. 하지만 분산 시스템은 시스템의 요구사항이 어떻든 네트워크 장애가 언제든 발생할 수 있으므로, 분할 내성은 반드시 챙겨가야 합니다. 따라서 일관성과 가용성 중 시스템에 요구사항에 맞춰 하나를 고르는 형태로 시스템을 설계하게 됩니다. 

 

그럼 이때 왜 일관성과 가용성을 모두 챙길 수 없다는 것일까요? 일관성을 지켜려면 데이터 복제를 기다리는 것이 필요한데, 이 부분이 가용성을 해치는 요소가 되기 때문입니다. 예를 들어 네트워크 장애가 생겼을 때 데이터 일관성(어떤 노드에서 조회하든 같은 데이터가 조회되는 것)을 지키는 것은 상당히 어렵습니다. 이 때 일관성을 챙기겠다고 하면 잠시 요청 처리를 중단하고 중단된 노드가 재실행될 때까지 기다릴 수 있는데, 그 시간 동안 서비스를 정상적으로 이용하지 못 하는 것이니 가용성은 희생됐다고 볼 수 있습니다. 반면 가용성을 챙기겠다고 하면 정상적으로 요청은 처리하게 되지만 정확한 데이터가 전달된다는 보장은 없으니 데이터의 일관성은 희생하게 된 것이라고 볼 수 있겠습니다.

 

형태에 따라 CP, AP 시스템으로 다음처럼 분류 가능합니다.

 

1. CP 시스템 (Consistency + Partition Tolerance)

  • 일관성과 분할 내성은 허용, 가용성은 희생하는 구조
  • 만약 데이터 쓰기 중 네트워크 장애가 발생하면, 모든 노드가 동일한 데이터를 반환할 때가지 쓰기나 읽기를 지연시킴
  • 즉 최신 데이터를 보장하나, 특정 시점엔 요청을 처리하지 못하는 상황(가용성 희생에 따른..)이 발생 가능

 

2. AP 시스템 (Availability + Partition Tolerance)

  • 가용성과 분할 내성은 허용, 일관성은 희생
  • 네트워크 장애 시에도 시스템은 항상 가용하나, 최신 데이터가 아닌 오래된 데이터를 반환할 수도 있음
  • 네트워크 장애 시에도 쓰기/읽기 요청을 허용하며, 노드 간 동기화는 나중에 처리

 

 

 

 

참고한 레퍼런스

https://www.ibm.com/kr-ko/topics/cap-theorem

https://onduway.tistory.com/106

+ Recent posts