Consistency, Availability, Partition tolerance
3가지를 동시에 만족하는 분산 시스템을 설계하는 것은 불가능하다는 정리.
그림에서 가운데 영역에 들어가는 시스템은 존재할 수 없다.
각각의 요소들의 정의를 알아보자
- consistency 일관성
- 모든 노드가 같은 순간에 같은 데이터를 볼 수 있다
- 모든 노드는 동일한 데이터를 동시에 본다. 추가 읽기를 허용하기 전에 여러 노드를 업데이트하여 일관성을 확보한다
- 분산 시스템에 접속하는 모든 클라이언트는 어떤 노드에 접속했느냐와 관계없이 언제나 같은 데이터를 보게 되어야 한다
- availability 가용성
- 모든 요청이 성공 또는 실패 결과를 반환할 수 있다
- 하나 이상의 노드가 작동 중지되어도 데이터를 요청하는 클라이언트는 반드시 응답을 받아야 한다
- 분산 시스템의 작업 노드는 일부에 문제가 발생하여도 모든 요청에 대한 유효한 응답을 전해줄 수 있어야 한다
- partition tolerance 분할 허용성
- 메시지 전달이 실패하거나 시스템 일부가 망가져도 시스템이 계속 동작할 수 있다
- 네트워크 분할이 발생하더라도 시스템은 계속 작동해야 한다
조합
- CP (consistency+partition tolerance)
- 가용성을 희생
- 일관성, 분할허용 제공
- 시스템 간 네트워크 분할이 발생한 경우 일관성을 유지하기 위해서 시스템 전체가 응답 불가
- 데이터의 일관성이 중요한 은행시스템에서 많이 사용
- AP (availability+partition tolerance)
- 일관성을 희생
- 가용성, 분할허용 제공
- 시스템 간 네트워크 분할이 발생한 경우 가용성을 유지하기 위해서 이전의 데이터라도 응답
- 네트워크 장애 극복 이후에 데이터 업데이트 진행
- CA (consistency+availability)
- 분할 허용성 희생
- 절대로 장애가 나지 않는 네트워크 구성은 이 세상에 존재하지 않는다
- 불가능한 조합