Today I Learned
(24.10.07) CAP 이론 정리
분산된 DB 등의 환경에서 이뤄져야하는 속성에 관련하여 정리를 했다.
트랜잭션이나, 또는 기본적인 DB 관련 이론에 비해서 개념에 관련된 부분이라
처음 들어본 이론이기도 하고,
현대 클라우드 기반의 분산 시스템 Distributed System에서 어떻게 활용을 할 수 있을 지 볼 수 있다고 생각해서
간단할 수 있지만, 여러 예시를 찾아보기도 하면서 정리했다.
CAP 이론
- 분산 시스템에서 3가지 속성(일관성, 가용성, 네트워크 분할 허용성) 중 모두를 동시에 만족할 수 없고, 2가지만을 만족시킬 수 있다는 이론
- 분산 시스템 : 데이터를 저장하는 클라우드 등의 데이터 관리 시스템 등의 환경
- 에릭 A. 브루어 교수가 2000년에 분산 컴퓨팅에 대해서 처음으로 주장
일관성 Consistency
- 분할된 모든 노드에서 동일한 데이터를 유지하는 속성
- 한 노드에 기록이 될 때 = 성공 시, 시스템의 다른 노드에도 동일하게 적용시키기 위해 전달/복제
가용성 Availability
- 분할이 되어있더라도 각각의 분할된 노드는 하나 이상이 다운된 경우에도, 시스템 응답을 해야하는 속성
- 다른 노드가 응답 가능 = 예외없이 모든 작업 노드들은 모든 요청에 대해서 응답을 할 수 있어야
네트워크 분할 허용성 (분할 내성) Partition Tolerance
- 네트워크에 분할된 노드간의 통신이 끊어지더라도 시스템이 정상적으로 동작할 수 있도록 하는 속성
- 분산 시스템 네트워크에 상관 없이 전체 클러스터가 계속 작동
CAP 이론 기반 설계
CP (일관성 + 네트워크 분할 허용성)
- 네트워크 분할 시에도 데이터 일관성을 유지하기 위해, 일부 요청을 응답X 대기 가능 = 가용성을 일부 포기하는 방식
AP (가용성 + 네트워크 분할 허용성)
- 응답을 보장하기 위해, 데이터 일관성을 일부 포기하는 방식
- ex) Cassandra, DynamoDB
CA (일관성 + 가용성)
- 네트워크 분할 상황에서는 네트워크 분할 허용성이 만족해야만 하므로 분산 시스템에서는 현실적으로 구현하기 어려움
- 단, CP + AP 형식과는 차이가 있기 때문에 별개의 방식
CAP 이론 적용의 한계
- CAP은 극단적인 내부 네트워크 분할 상황을 가정한 이론, 실제로는 절충하는 전략을 취하고 있음
- 완벽한 이론이 아니며, CP, AP 시스템 구분을 명확하게 설계할 필요가 없기 때문에 “이론” 정도로 인지
DynamoDB
- AWS 지원의 Key-Value 형태 DB
- NoSQL DB로 기본적인 AP 모델, 단 상황에 따라 CP 변환
- 최종 일관성(Eventual Consistency) 을 기본적으로 채택
- 시간이 지날수록 점점 데이터가 업데이트됨에 따라 결론적으로 일관된 상태가 된다는 개념
- 시간이 걸리는 대신, 결국(Eventually) 모든 노드가 동일한 데이터를 가지게 될 수 있도록 수렴이 된다는 원칙
- 단, 데이터의 정확성과 일관성이 우선이어야 하는 처리 상황에서 **강한 일관성(Strong Consistency, Read-After-Write Consistency)**으로 변환 가능
- API를 통해 가장 업데이트된 데이터를 조회하려는 시도가 있을 경우, 정확한 데이터를 우선시 해야하는 경우
- 트랜잭션을 보장을 해야하는 경우 (원자성을 유지해야하기 때문에)
- 동시성 제어가 필요할 경우
MySQL DB
- 대포적인 관계형 DB
- 기본적인 CA 모델이나, 상황과 설정에 따라 CP, AP 모델로 변환 가능
- AP 모델 변환
- MySQL의 여러 인스턴스로 운영하는 클러스터를 설정 중, 비동기 복제 기능을 통해 가용성을 우선시 하는 경우
- Master 서버 → Slave 서버의 복제는 따로 이뤄지고(비동기), 클라이언트의 요청에 의한 응답은 Master 서버가 담당
- CP 모델 변환
- 클러스터링 중 동기 복제 기능
- 여러개의 Master 서버가 존재하는 구조일 경우, 여러 노드가 동시에 쓰기 작업을 진행, 데이터의 일관성을 우선시 하는 경우
- 복제 진행 중에는 다른 요청에 대해서 대기 상태 가능
- 일관성을 보장 후 = 업데이트 완료 후에 응답
출처
'Today I Learned' 카테고리의 다른 글
(24.10.10) TDD & DDD / Filter & Interceptor & AOP 비교해보기 (0) | 2024.10.10 |
---|---|
(24.10.08) 보안 공격 정리 : SQL Injection, CSRF, XSS (0) | 2024.10.08 |
(24.09.26) 정렬 알고리즘 : Quick Sort, Merge Sort (1) | 2024.09.26 |
(24.09.24) 객체 지향 설계 원칙, SOLID 원칙 (0) | 2024.09.24 |
(24.09.05) 코딩테스트 알고리즘 정리(유니온 파인드 알고리즘) (0) | 2024.09.05 |