찰리의 놀이터

[DB] CAP Theorem(캡 정리) 본문

DataBase

[DB] CAP Theorem(캡 정리)

차알리 2023. 3. 13. 00:00

http://www.kudryavka.me/?p=836

CAP Theorem이란?

"캡 정리" 라고 부르는 CAP Theorem은 분산 컴퓨터 시스템에서 "일관성(Consistency), 가용성(Availability), 분할 내성(Partition Tolerance)" 세 가지 조건을 모두 만족하는 것이 불가능 하다는 것을 증명한 정리입니다.

  • Consistency : 분산 시스템에 접속하는 모든 클라이언트는 어떤 노드에 접속하는 지에 상관없이 언제나 같은 데이터를 볼 수 있어야합니다. 요청에 따른 데이터의 일관성 유지를 보장하는 것을 의미합니다. 
  • Availability : 분산 시스템에 접속하는 클라이언트는 일부 노드에 장애가 발생하더라도 항상 응답을 받을 수 있어야합니다. 클라이언트의 요청은 항상 가능하다는 의미입니다.
  • Partition Tolerance : 분할된 두 노드 사이에 통신장애가 발생하였음을 의미합니다. 메시지 전달이 실패하거나 시스템 일부가 망가져도 시스템이 계속 동작하여야 한다는 뜻 또는 네트워크에 파티션이 생기더라도 시스템은 계속 동작하여야 한다는 것을 뜻합니다. 예를 들어, 주식 거래 서비스를 제공하는 증권사의 시스템은 다운되면 거래가 불가능한 상황이 오기 때문에 분할 내성을 우선적으로 고려합니다.

CAP Theorem에 따른 시스템 설계

세 조건을 모두 만족하는 것이 불가능하므로, 만들 수 있는 것은 셋 중 하나를 어느정도 희생한 시스템입니다.

  • CP System : 가용성을 희생합니다.
    • 분할된 노드에서 응답을 기다리는 경우에 시간 초과 오류(Timeout Error)가 발생할 수 있습니다. CP는 원자성 읽기와 쓰기를 필요로하는 비즈니스 로직에 도움이 됩니다.
  • AP System : 데이터의 일관성을 희생합니다.
    • 응답 요청은 어떤 노드에서도 받을 수 있고, 그 노드에서 준비되어있는 버젼의 데이터를 반환합니다. 반환된 데이터는 최신 버젼이 아닐수도 있다는 뜻입니다. 모든 파티션에 새로운 데이터가 업데이트 되는 데는 시간이 다소 소요될 수 있습니다. 
  • CA System : 분할 내성을 희생합니다.
    • 분할 내성인 P는 포기할 수 없는 조건입니다. 실무에서 네트워크 장애는 피할 수가 없습니다. 따라서 CA 시스템은 고려하지 않습니다.

한계점

  • CAP Theorem에서 다루는 분할 내성에 대한 정의의 일관성이 없습니다.
    • 2000년, Brewer의 발표에서 나온 분할 내성 정의입니다.
      • The system continues to operate despite arbitrary message loss or failure of part of the system
    • 2002년, Gilbert와 Lynch가 새롭게 정의한 분할 내성의 정의입니다.
      • The network will be allowed to lose arbitrarily many messages sent from one node to another
  • 일관성과 가용성은 분산시스템의 특성에 대한 것이지만, 분할 내성은 분산시스템이 돌아가는 네트워크에 대한 특성입니다.

CAP 정리에서 나오는 완벽한 CP 또는 AP 시스템은 없고, 어느 중간 쯤에 존재하는 시스템이 대부분입니다. 이론 자체에도 몇가지의 한계점이 존재하기도 하고, P에 대한 명확한 정의가 부족하다는 점도 문제가 되어 이를 극복하고자 하는 PACELC 이론이 나왔습니다. 다음 포스팅에서는 PACELC 이론에 대해 알아보도록 하겠습니다.

 

Reference

CAP Theorem, 오해와 진실

 

CAP Theorem, 오해와 진실

CAP Theorem은 분산시스템에서 일관성(Consistency), 가용성(Availability), 분할 용인(Partition tolerance)이라는 세 가지 조건을 모두 만족할 수 없다는 정리로, 세 가지 중 두 가지를 택하라는 것으로 많이 알

eincs.com

어떤 DB를 사용해야 할까? CAP이론

 

어떤 DB를 사용해야 할까 ? CAP 이론

안녕하세요. 현재 세상에는 수많은 데이터를 저장할 수 있는 서비스가 많이 나와있습니다. 그런데 이런 와중에 내가 만드는 시스템은 어떤 Database를 사용해야 좋을까요? 확장성은 어느정도로 가

sabarada.tistory.com