CAP란 분산 시스템에서 속성인 3가지 일관성(Consistency), 가용성(Availablity), 분할 허용성(Partition tolerance)을 말합니다.
우선, CAP에 대해서 하나씩 알아보겠습니다.
일관성 , Consistency
일관성이란 사용자가 분산 데이터베이스 상의 어떤 노드와 통신하는지 상관없이 같은 데이터를 조회할 수 있는 것을 의미한다.
조회한 데이터는 가장 최근에 쓰여진 데이터. 따라서 하나의 노드에 쓰기 작업이 이루어졌다면, 모든 복제본에 반영이 되어야 한다.
하지만 시스템이 모든 인스턴스에 변경 내용을 즉시 반영하는 것은 불가능에 가깝다. 따라서 일관성이란 데이터의 동기화가 즉시 반영은 아니지만 속도를 높여 사용상의 문제가 없게끔 만들어야 한다.
따라서 일관성은 모든 사용자가 일관성 있는 데이터를 조회해야 할 때 중요하다. 예를 들면 금융, 개인정보 등을 조회할 때 같은 정보를 확인할 수 있어야 한다.
가용성, Availablity
가용성이란 모든 요청이 응답을 받을 수 있어야 한다는것을 의미한다.
사용자가 읽기작업, 쓰기 작업, 작업이 실패했더라도 사용자는 응답을 받을 수 있어야 한다.
즉, 시스템이 중단되는 일 없이 언제든지 사용가능한 상태를 뜻합니다.
또한, 데이터가 일관되지 않더라도 언제든지 접근 가능하다는 것을 의미합니다.
분할 허용성, Partition Tolerance
분할이란 노드 간 통신이 끊어지는 것을 의미한다.
즉, 하나의 노드가 다른 노드와 통신할 수 없을 때 분할이 생겼다고 한다.
분할 허용성이란 시스템 내 분할이 생겼을 때, 시스템이 오류 없이 작동하는 것을 의미한다.
즉, 하나의 노드가 다른 노드와 통신할 수 없을 때 , 다른 복제 노드가 사용자 요청에 응답할 수 있어야 한다.
이는 데이터의 복제본을 여러 다른 노드에 저장하여 처리하는 것을 의미한다.
따라서, 분할이 생기더라도 복제본으로부터 데이터를 조회할 수 있다.
분할 허용성은 분할 데이터베이스 시스템에서 필수이다.
CAP 이론이란?
CAP이론이란 분산 데이터베이스 시스템은 분할이 생겼을 때, 일관성과 가용성 중 하나를 포기해야 한다는 것을 의미한다.
장애가 생겼을 때, 이를 해결하기 위해 분산데이터베이스 시스템은 반드시 분할 허용성을 가지고 있어야 하며, 일관성과 가용성 중 하나를 선택해야 한다.
따라서 , CP시스템과 AP시스템으로 분류된다. CA 시스템은 하나의 노드에서 동작하는 모놀리식 데이터 베이스 시스템을 의미한다.
CP 시스템
MongoDB를 통해 가용성을 포기한 분산 데이터베이스 시스템을 이해해 보자.
MongoDB는 데이터를 프라이머리 노드에 이진 JSON형태로 저장한다.
각 프라이머리 노드는 로그를 이용해 비동기적으로 업데이트되는 복제본을 가진 여러 개의 세컨더리 노드를 가진다.
각 노드는 다른 노드와 통신하여 서로의 상태를 확인. 만약 몇 초동안 응답을 받지 못하면 해당 노드는 접근 불가능한 상태로 지정
프라이머리 노드가 중단되었다면 세컨더리 노드 중 하나가 프라이머리 노드로 승격되어야 한다.
새로운 프라이머리 노드가 선출되는 동안 모든 쓰기 작업은 잠시 중단된다. 따라서 MongoDBsms CP 시스템으로 분류
AP 시스템
Cassandra를 통해 일관성을 포기한 분산 데이터베이스 시스템을 이해해 보자
카산드라는 프라이머리 노드 없이 모든 노드가 읽기 작업, 쓰기 작업을 수행할 수 있고 복제본을 분리된 다른 노드에 저장한다.
프라이머리 노드가 없으므로 , 지정된 복제 수만큼 데이터를 시계 방향으로 인접한 노드에 복제한다.
노드가 다른 노드와 통신할 수 없어도 해당 노드는 여전히 읽기 작업과 쓰기 작업을 수행할 수 있으나 데이터가 다른 노드와 맞지 않는 상태, 일관성이 깨진 상태가 된다.
카산드라는 이를 최종적 일관성(Eventual Consitency)을 통해 추후에 복구한다. 따라서 노드 간 데이터가 동기화되기 전까지 각 노드는 서로 다른 버전의 데이터를 가지고 있다.
따라서 카산드라는 일관성을 포기한 대신 높은 가용성을 확보한 AP시스템으로 분류된다.
Mysql
Mysql 은 설정하기에 따라서 CP 또는 CA에 속할 수 있습니다.
Mysql을 그냥 사용했을 땐 CA에 속하게 된다. main이 되는 Master노드가 있고 그 노드를 복제하는 slave가 있는 패러다임을 사용
Cluster설정을 하게 되면 Mysql CP를 만족하게 된다. data를 유지할만한 cluster 노드가 존재하지 않으면 cluster는 종료되기 때문이다.
참고
CAP Theorem and Distributed Database Systems for Data Engineering (analyticsvidhya.com)
'DB' 카테고리의 다른 글
Connection Pool (0) | 2024.09.19 |
---|---|
Oracle Process (0) | 2024.09.19 |