일관성과 합의
- 내 결함성을 지닌 시스템을 구축하는 가장 좋은 방법은 유용한 보장을 해주는 범용 추상화를 찾아 이를 구현하고 애플리케이션에서 이 보장에 의존하게 하는 것이다.
- 분산 시스템에 가장 중요한 추상화는
합의
즉 모든 노드가 어떤 것에 동의하게 만드는 것이다. 네트워크 결함이나 프로세스 장애가 있더라도 신뢰성 있게 합의에 도달하는 것은 놀랄만큼 까다로운 문제다.
- 합의의 문제를 해결하는 알고리즘
일관성 보장
선형성
- 축구시합의 점수표시의 예가 나옴
- 시스템에 데이터 복사본이 하나만 있고 그 데이터를 대상으로 수행하는 모든 연산은 원자적인 것처럼 보이게 만드는 것이 기본아이디어
- 선형성은 최신성 보장(recency guarantee) 이다. 시스템에 데이터 복사본이 하나만 있고 그 데이터를 대상으로 수행하는 모든 연산은 원자적인 것처럼 보이게 만드는 것이 기본아이디어
- (계산비용이 크긴하지만) 모든 요청과 응답 시점을 기록하고 그것들이 유효한 순차 순서로 배열되는지 확인함으로써 시스템의 동작이 선형적인지 테스트할 수도 있다.
선형성이 중요한 요구사항이 되는 몇가지 영역
- 잠금과 리더 선출
- 제약조건과 유일성 보장
- 채널 간 타이밍 의존성
선형성 시스템 구현하기
CAP 정리
- 애플리케이션이 선형성을 요구하고 네트워크 문제때문에 일부 복제 서버가 다른 복제 서버와 연결이 끊기면 일부 복제 서버는 연결이 끊긴 동안은 요청을 처리할 수 없다.
- 애플리케이션에서 선형성을 요구하지 않는다면 각 복제 서버가 다른 복제서버와 연결이 끊기더라도 독립적으로 요청을 처리하는 방식으로 쓰기를 처리할 수 있다.
선형성이 없는 프로그램은 네트워크 문제에 더 강하다.
선형성 시스템 구현하기