[TOC]
CAP 이론은 분산 데이터베이스 시스템을 바탕으로, 네트워크 분할 허용(Network Partition)이 이루어지는 경우에 일관성(Consistency), 가용성(Availability)을 동시에 만족하는 것은 불가능하며, 일관성과 가용성 중 하나만 가질 수 있다는 이론이다.
CAP 이론에 따르면 모든 분산 네트워크는 일관성을 지키는 상황(Consistency-Partition Tolerance: CP)과 가용성을 지키는 상황(Availability-Partition Tolerance: AP)으로 나눌 수 있다. 모든 노드는 데이터를 업데이트하는 과정에서 다른 작업이 불가능하기 때문에 업데이트가 진행되는 시간에는 일시적으로 데이터베이스에 접속할 수 없어 서비스가 중지된다.
-
일관성(Consistency): 분산 시스템에서의 요청 및 응답 과정에서, 노드가 여러 개 있더라도 마치 한 노드에서 실행되는 것처럼 동작해야 한다.
-
가용성(Availability): 분산 시스템이 지속해서 가용하기 위해서 장애 없는(Non-Failing) 노드에 수신된 모든 요청은 반드시 응답돼야 한다.
-
분할 허용(Partition Tolerance): 여러 개의 네트워크가 동작하고 있을 때 접속이 단절되어 서로 메시지를 주고 받지 못하더라도 서비스가 잘 동작해야 한다.
-
CA: 일관성과 가용성을 충족하지만 분할 허용을 충족하지 못한다. 데이터데 대한 강한 신뢰를 부여할 수 있지만, 네트워크 문제가 시스템의 중단을 야기할 수 있다.
-
CP: 일관성과 분할 허용을 충족하지만 가용성을 충족하지 못한다. 높은 확장성으로부터 성능을 확보할 수 있지만 일부 데이터가 비가용할 수 있다.
-
AP: 가용성과 분할 허용을 충족하지만 일관성을 충족하지 못한다. 부정확한 응답을 허용하는 고성능 시스템에 적합하다.
- 모든 요청은 최신 데이터 또는 에러를 응답받는다.
일관성(Consistency)은 최신 데이터의 전파 속도 및 업데이트 노드 양에 따라서 그 강도가 다르게 분류된다.
여기서는 Linearizability(Atomic/Strong Consistency; 원자성)를 일관성으로 기준으로 설정하였으며, 이 외에도 증명을 위해 읽기와 쓰기 권한만을 싱글 스레드로 순차적으로 처리하는 간단한 서비스로 가정한다. Linearizability는 Operation A가 성공적으로 종료된 이후에 Operation B가 시작될 때, Operation B는 Operation A의 최종 결과치를 모든 시스템에서 하나의 동일한 상태(the same state)로 같은 논리적 시간(logical time)에 업데이트되어 관찰할 수 있어야 한다는 기준이다. 즉, 한 노드에서 특정 데이터의 처리가 완료되었을 때 다른 노드가 동시 다발적으로 업데이트된 정보에 접근할 수 있어야 한다는 것이다. 따라서 Linearizability는 매우 강력한 형태의 일관성을 요구한다.
- 정상적으로 이루어진 모든 요청은 정상적으로 작동하고 있는 모든 노드로부터 응답을 받을 수 있다.
높은 가용성(Hight Availability)은 시스템 자체가 모든 요청에 대한 정상적인 응답을 할 수 있다는 것을 전제한다. 따라서 모든 요청은 정상적으로 작동하고 있는 노드 중 일부만 응답을 받을 수 있어도 충분하다. 하나의 정상 노드만 응답해도 시스템은 가용이 가능하다고 할 수 있기 때문이다. 또한 높은 가용성을 가정하는 데이터베이스는 현실적인 응답시간(Realistic Response Time)을 고려한다.
그러나 CAP 이론에서 의미하는 가용성은 높은 가용성보다 훨씬 높은 난이도를 요구한다.
우선 오류가 없는 노드가 발송한 메시지는 오류가 없는 모든 노드로부터 응답을 받을 수 있어야 하고, 데이터 저장소에 대한 모든 동작이 오류가 없는 모든 노드로부터 성공적으로 리턴을 받아야 한다.
한 가지 주목해야 할 점은 CAP 이론의 가용성은 응답시간에 대한 제한을 걸어두지 않는다는 것(unbounded response time)이다. 분산형 네트워크는 단일 네트워크보다 속도가 느리기 때문이다. 가용성은 응답시간과 깊은 관련이 있음에도 CAP 이론에서는 이를 고려하지 않는다는 단점이 있다.
분산 네트워크의 기본적인 특징을 설명하는 ACID 이론에 따르면, 모든 네트워크는 고립성(isolated)이 존재한다. 트랜잭션이 실행이 되는 중에 생성하는 연산의 중간 결과는 다른 트랜잭션이 접근할 수 없다는 것이다.
노드 간의 통신이 실질적으로 어려운 상태에 도달하여 네트워크가 사실상 분할(Partition)되었을 때도 네트워크가 정상적으로 작동할 수 있는 경우를 의미한다.
네트워크 분할 허용을 전제하는 네트워크는 노드 간의 통신이 완전히 불가능하거나 비동기성 네트워크(Asynchronous Network)에서 메시지가 유실될 수 있고, 현실성이 떨어지는 시간에 메시지가 전달될 수 있다. 이런 상황에도 분산 네트워크가 단일 네트워크처럼 보여야한다.
모든 분산 네트워크는 네트워크 분할 허용성(Network Partition)을 보유할 수밖에 없다. 또한, 모든 분산 네트워크는 비동기성 네트워크 상황에 처해질 가능성이 존재한다. 분산 네트워크는 노드 간의 통신이 불안정하더라도 네트워크가 정상적으로 동작할 수 있도록 한다는 것에 의의가 있다. 따라서 분산형 네트워크에서 분할 허용성을 가정하지 않는다면 사실상 없기 때문에, CAP 이론에서는 네트워크 분할 허용을 기본으로 전제한다.
Copyright © 2022 Song_Artish