요약
- 분산 시스템의 일관성과 합의에 대한 내용을 알게됨.
- 가능하다와 불가능하다에 대한 범위를 이해해야 함.
- 일관성 보장에 대한 내용을 이해함.
- 분산 일관성은 대개 지연과 결함이 있더라도 복제본의 상태를 코디네이션하는 것에 관한 것임.
- 선형성에 대한 내용을 이해함.
- 선형성은 최신성 보장이다.
- 시스템에 데이터 복사본이 하나뿐인 것처럼 보이게 만드는 것이 선형성을 뒷받침하는 기본 아이디어임.
메모
9장. 일관성과 합의
- 내결함성을 지닌 분산 시스템을 구축하는 데 쓰이는 알고리즘과 프로토콜의 몇가지를 얘기한다.
- 내결함성을 지닌 시스템을 구축하는 가장 좋은 방법
- 유용한 보장을 해주는 범용 추상화를 찾아서 구현하고 애플리케이션에서 이 보장에 의존하게 만든다.
- 7장의 트랜잭션이 다루는 방법과 같음.
- 분산 시스템의 가장 중요한 추상화 중 하나는 합의임.
- 즉, 모든 노드가 어떤 것에 동의하게 만드는 것임.
- ex) 단일 리더복제
- 두 노드가 자신이 리더라고 생각하는 상황을 스플릿 브레인(split brain)이라 부름. → 데이터 손실로 이어짐.
- 올바르게 구현된 합의는 이 문제를 피하는데 도움이 됨.
- 어떤 것을 할 수 있고 어떤 것을 할 수 없는지에 대한 범위를 이해해야 함.
일관성 보장
- 복제 데이터베이스는 대부분 최소한 최종적 일관성을 제공함.
- 모든 복제본은 결국에 같은 값으로 수렴되기를 기대함.
- 이는 매우 약한 보장임. (언제 수렴될지 알 수 없음.)
- 최종적 일관성의 에지 케이스는 시스템에 결함(ex: 네트워크 끊김)이 있거나, 동시성이 높을때 분명히 드러남.
- 강한 일관성 모델의 경우, 시스템 성능이 나쁘거나, 약한 보장을 제공하는 시스템보다 내결함성이 약할지도 모름.
- 그럼에도 강한 보장은 올바르게 사용하기 쉽기에 매력적임.
- 분산 일관성은 대개 지연과 결함이 있더라도 복제본의 상태를 코디네이션하는 것에 관한 것임.
- 이번 장에서 볼 영역
- 강한 일관성 모델 중 하나인 선형성(linearizability)
- 이벤트 순서화 문제, 특히 인과성과 전체 순서화
- 분산 트랜잭션을 원자적으로 커밋하는 방법
선형성
- 선형성 시스템에서는 클라이언트가 쓰기를 성공적으로 완료하자마자 그 데이터베이스를 읽는 모든 클라이언트는 방금 쓰여진 값을 볼 수 있어야 함.
- 선형성은 최신성 보장(recency guarantee)임.
- p323 은 비선형성 시스템예에 대한 설명이 있음.
시스템에 선형성을 부여하는 것은 무엇인가?
- 시스템에 데이터 복사본이 하나뿐인 것처럼 보이게 만드는 것이 선형성을 뒷받침하는 기본 아이디어임.
- 이를 정확히 이해하려면 주의가 필요함. p324 예시 참고
- 시스템을 선형으로 만들기 위해, 한 클라이언트가 변경된 값을 읽었다면, 다음 클라이언트가 그 값을 읽을때 변경된 값을 읽어야 함. (변경된 값을 읽은 시점은 쓰기 요청한 클라이언트가 쓰기가 잘됐다는 요청이 오기전에 읽을 수 있음.)
- 모든 요청과 응답 시점을 기록하고, 그것들이 유효한 순차 순서로 배열되는지 확인함으로써 시스템의 동작이 선형적인지 테스트할 수 있음.
댓글