CAP 이론에 대해 알아보자
2022. 1. 23. 23:21ㆍ학습일지
브루어(Brewer)의 이론 이라고도 하는데, 세 가지 조건을 모두 만족하는 분산 컴퓨터 시스템이 존재하지 않음을 증명한 이론이다. 여기서 세가지의 조건은 다음과 같다.
- 일관성(Consistency)
- 데이터를 저장하려고 하는 노드가 몇대가 되든, 모든 노드에서 동일한 저장되어야 한다는 의미의 속성이다. (관계형 데이터베이스의 ACID 속성의 C 역시 거의 동일한 의미를 가졌다.)
- 가용성(Availablilty)
- 모든 요청이 성공 혹은 실패 응답을 반환하여야 한다. 즉, 서버가 살아있다면, 클라이언트의 요청을 무조건 응답해야한다는 뜻이다.
- 분할 내구성(Partition tolerance)
- 메시지 전달이 실패하거나, 시스템의 일부가 망가져도 시스템이 계속 동작할 수 있어야 한다. 즉 클러스터 사이에 일부 접속이 단절되어 통신할 수 없는 상황이 발생해도, 시스템이 잘 동작해야 한다는 뜻이다.
위의 이미지를 보면, 관계형 데이터베이스는 죄다 CA 기반, 데이터베이스이다. 당연하게도 대부분의 RDBMS는 ACID를 보장하기 위해, 쓰기 작업(insert, update, delete 등)의 경우, 배타적 락이 걸리는 데, 이 경우, 다른 스레드에서 해당 데이터에 접근하는 것을 막는다. 즉, 한번에 하나의 스레드만 접근할 수 있어, 따라서, 대용량 분산 시스템에서는 적절하지 않을 수 있다. 게다가, P를 보장하고자, 일부 서버가 망가져도 DB가 작동하게 한다면, 망가진 서버에 대한 CA를 보장할 수 없게된다.
그럼 해결책은 없는걸까? 답은 아니다. 해결책은 의외로 간단한데, 그냥 C, A 중 하나를 포기하면 된다. 관계형 데이터베이스의 ACID 트랜잭션의 락으로 인해, 대용량 트래픽이 발생할 경우, 블로킹이 되는 트랜잭션 스레드가 많아져서, 결과적으로 lock을 대기하는 클라이언트가 많아질 것이다. 이러한 경우 C를 포기하여, Lock획득을 위해 발생한 스레드들의 경합으로 발생하는 블로킹 시간을 최대한 줄여서 TPS(Transaction Per Second)를 늘려보는 방식(NoSQL을 활용해보는 방식)을 시도해볼 수 있겠다.
'학습일지' 카테고리의 다른 글
CI/CD에 대해 알아보자 (0) | 2022.02.06 |
---|---|
모니터 (0) | 2022.01.26 |
멀티 프로세스/스레드 환경에서 동기화를 위한 여러 전략과 차이 (0) | 2022.01.19 |
벡터 in Java (0) | 2021.12.19 |
Event Driven Programming? (0) | 2021.12.10 |