-
system-design-101. CAP 이론 (CAP theorem)📖 개발 공부 2024. 7. 14. 01:40
CAP theorem
CAP theorem에 따르면 분산 시스템은 일관성, 가용성, 파티션 허용성이라는 세 가지 원하는 속성 중 두 가지만 제공할 수 있다.
- Consistency: consistency means all clients see the same data at the same time no matter which node they connect to.
- 데이터를 저장하는 장비가 1대 든 100대든 모든 장비에서 동일한 데이터가 저장되어 있어야 한다는 것이다. ACID 원리에서 의미하는 것과 같다. 모든 노드가 같은 시간에 같은 데이터를 보게 된다. 즉, 읽기 작업이 항상 가장 최신의 쓰기 작업을 반영하며, 이는 모든 노드에 일관적으로 적용된다.
- Availability: availability means any client that requests data gets a response even if some of the nodes are down.
- 모든 요청은 성공 혹은 실패 여부와 무관하게 응답을 받는다. 모든 요청은 유효한 데이터를 읽거나 쓸 수 있어야 하며, 이는 네트워크 인프라에 실패가 발생하더라도 보장되어야 한다.
- Partition Tolerance: a partition indicates a communication break between two nodes. Partition tolerance means the system continues to operate despite network partitions.클러스터가 여러 대 동작하고 있을 때, 해당 클러스터 사이에 접속이 단절되어 서로 통신을 할 수 없는 상황에서도 시스템이 잘 동작해야 한다는 것이다.
- Partition tolerance이란 네트워크 파티션에도 불구하고 시스템이 계속 작동함을 의미한다.
분산 시스템은 파티션을 허용해야 하기 때문에, 가용성과 일관성 사이에서 결정해야 한다.
시스템 가용성이 저하되더라도 요청을 취소하여 데이터 일관성을 보호하는 시스템을 CP 시스템이라고 한다. 일관되지 않은 데이터가 반환되는 경우에도 가용성을 제공하는 시스템을 AP 분산 시스템이라 한다.
Apache Cassandra vs. MongoDB Architectures
MongoDB는 BSON(바이너리 JSON) 문서로 데이터를 저장하는, 널리 사용되는 NoSQL DBMS이다. MongoDB는 CP 데이터 저장소이며 가용성을 희생시키면서 일관성을 유지하여 네트워크 분할을 해결한다.
MongoDB는 single-master 시스템으로, replica set(복제본)에는 모든 write operation을 받는 하나의 primary 노드만 있을 수 있다. 동일한 replica set의 다른 모든 노드는 primary 노드의 조작 로그를 복제하여 자체 데이터 세트에 적용하는 secondary 노드이다. 기본적으로 클라이언트는 primary 노드에서 읽지만, 이는 secondary 노드에서도 읽을 수 있도록 허용하는 설정을 지정할 수도 있다.
primary 노드가 사용 불가능하게 되면, 가장 최근의 operation 로그가 있는 seconary 노드가 새로운 primary 노드로 선정된다. 다른 모든 secondary 노드가 새로운 마스터를 따라잡으면 클러스터를 다시 사용할 수 있게 된다. 클라이언트가 이 간격 동안 쓰기 요청을 할 수 없으므로, 데이터는 전체 네트워크에서 일관성을 유지한다.
Apache Cassandra는 Apache Software Foundation에서 관리하는 오픈 소스 NoSQL 데이터베이스이다. MongoDB와는 달리 Cassandra는 masterless 아키텍처여서, 결과적으로 하나(SPF)가 아닌 다수의 장애 지점이 있다.
Cassandra는 AP 데이터베이스이며 가용성과 파티션 허용을 제공하지만 항시 일관성을 제공할 수는 없다.
Cassandra에 마스터 노드가 없으므로, 모든 노드는 지속적으로 사용 가능해야 한다. Cassandra는 클라이언트가 언제든지 모든 노드에 쓸 수 있도록 허용하고 불일치를 가능한 한 빨리 조정하여 eventual consistency을 제공한다.
네트워크 분할의 경우에만 데이터가 불일치가 되고, 그러한 불일치가 신속하게 해결되므로 Cassandra는 노드가 peer를 따라잡을 수 있도록 "복구" 기능을 제공한다. 지속적인 가용성 덕분에 결과적으로 고성능 시스템을 갖출 수 있게 되므로 많은 경우에 상쇄 효과가 있다.
참고
728x90반응형'📖 개발 공부' 카테고리의 다른 글
The SAGA Pattern (0) 2024.09.29 Toss | 서버 증설 없이 처리하는 대규모 트래픽 (0) 2024.07.27 system-design-101. How to improve API performance? (0) 2024.06.22 system-design-101. REST API vs. GraphQL (0) 2024.06.09 Netflix의 BFF에서 GraphQL Federation으로 전환기 (0) 2024.04.14