책너두 (데이터 중심 애플리케이션 설계) 28일차 (~327p)

요약

  • 분산 시스템의 일관성과 합의에 대한 내용을 알게됨.
    • 가능하다와 불가능하다에 대한 범위를 이해해야 함.
  • 일관성 보장에 대한 내용을 이해함.
    • 분산 일관성은 대개 지연과 결함이 있더라도 복제본의 상태를 코디네이션하는 것에 관한 것임.
  • 선형성에 대한 내용을 이해함.
    • 선형성은 최신성 보장이다.
    • 시스템에 데이터 복사본이 하나뿐인 것처럼 보이게 만드는 것이 선형성을 뒷받침하는 기본 아이디어임.

메모

9장. 일관성과 합의

  • 내결함성을 지닌 분산 시스템을 구축하는 데 쓰이는 알고리즘과 프로토콜의 몇가지를 얘기한다.
    • 내결함성을 지닌 시스템을 구축하는 가장 좋은 방법
      • 유용한 보장을 해주는 범용 추상화를 찾아서 구현하고 애플리케이션에서 이 보장에 의존하게 만든다.
      • 7장의 트랜잭션이 다루는 방법과 같음.
        • 분산 시스템의 가장 중요한 추상화 중 하나는 합의임.
          • 즉, 모든 노드가 어떤 것에 동의하게 만드는 것임.
            • ex) 단일 리더복제
            • 두 노드가 자신이 리더라고 생각하는 상황을 스플릿 브레인(split brain)이라 부름. → 데이터 손실로 이어짐.
            • 올바르게 구현된 합의는 이 문제를 피하는데 도움이 됨.
  • 어떤 것을 할 수 있고 어떤 것을 할 수 없는지에 대한 범위를 이해해야 함.

일관성 보장

  • 복제 데이터베이스는 대부분 최소한 최종적 일관성을 제공함.
    • 모든 복제본은 결국에 같은 값으로 수렴되기를 기대함.
      • 이는 매우 약한 보장임. (언제 수렴될지 알 수 없음.)
      • 최종적 일관성의 에지 케이스는 시스템에 결함(ex: 네트워크 끊김)이 있거나, 동시성이 높을때 분명히 드러남.
  • 강한 일관성 모델의 경우, 시스템 성능이 나쁘거나, 약한 보장을 제공하는 시스템보다 내결함성이 약할지도 모름.
    • 그럼에도 강한 보장은 올바르게 사용하기 쉽기에 매력적임.
  • 분산 일관성은 대개 지연과 결함이 있더라도 복제본의 상태를 코디네이션하는 것에 관한 것임.
  • 이번 장에서 볼 영역
    • 강한 일관성 모델 중 하나인 선형성(linearizability)
    • 이벤트 순서화 문제, 특히 인과성과 전체 순서화
    • 분산 트랜잭션을 원자적으로 커밋하는 방법

선형성

  • 선형성 시스템에서는 클라이언트가 쓰기를 성공적으로 완료하자마자 그 데이터베이스를 읽는 모든 클라이언트는 방금 쓰여진 값을 볼 수 있어야 함.
    • 선형성은 최신성 보장(recency guarantee)임.
    • p323 은 비선형성 시스템예에 대한 설명이 있음.

시스템에 선형성을 부여하는 것은 무엇인가?

  • 시스템에 데이터 복사본이 하나뿐인 것처럼 보이게 만드는 것이 선형성을 뒷받침하는 기본 아이디어임.
    • 이를 정확히 이해하려면 주의가 필요함. p324 예시 참고
      • 시스템을 선형으로 만들기 위해, 한 클라이언트가 변경된 값을 읽었다면, 다음 클라이언트가 그 값을 읽을때 변경된 값을 읽어야 함. (변경된 값을 읽은 시점은 쓰기 요청한 클라이언트가 쓰기가 잘됐다는 요청이 오기전에 읽을 수 있음.)
  • 모든 요청과 응답 시점을 기록하고, 그것들이 유효한 순차 순서로 배열되는지 확인함으로써 시스템의 동작이 선형적인지 테스트할 수 있음.

댓글

Designed by JB FACTORY