본문 바로가기

Studying/Data System Design

일관성과 합의 [데이터 중심 애플리케이션 설계 9장]

  1. 선형성: 시스템에 데이터 복사본이 하나만 있고 모든 연산은 원자적인 것처럼 보이게 만드는 것 (최신성 보장)
    1. 유용한 예
      1. 잠금과 리더 선출
      2. 제약 조건과 유일성 보장
      3. 채널 간 타이밍 의존성
  2. 선형성과 가용성은 트레이드 오프가 있다.
    1. 선형성을 보장하려 하면 네트워크 문제 등에 약해지게 된다.
    2. CAP 정리가 이런 개념을 설명한다.
    3. 심지어 RAM조차도 선형적이지 않음
  3. 순서화 보장
    1. 인과성을 보존하는 데 도움을 준다. 인과성은 이벤트에 순서를 부과한다.
    2. 선형성: 전체 순서를 정할 수 있다.
    3. 인과성: 인과적인 관계가 있을 경우에만 순서를 비교할 수 있다.
    4. 선형성은 인과성을 내포한다.
    5. 일련번호나 타임스탬프를 써서 이벤트의 순서 정하는 식으로 구현된다.
      1. 노드별로 독립적인 일련번호 집합 생성 (홀짝)
      2. 각 연산에 물리적 시계에서 얻는 타임스탬프 생성
      3. 노드 별로 일련번호 블록을 할당
      → 생성한 일련번호가 인과성에 일관적이지 못 하다
  4. 램포트 타임스탬프
    1. (카운터, 노드ID) 쌍으로 일련번호 생성한다.
    2. 카운터의 최대값을 추적하고 새로운 카운터를 생성한다.
    3. 타임스탬프로 먼저 비교하고 같을 경우 노드 ID로 비교
    4. 동일한 사용자 계정 생성 시처럼 당장 결정을 해야할 때 사용이 힘들다.
  5. 전체 순서 브로드캐스트
    1. 신뢰성 있는 전달: 어떤 메시지도 손실되지 않고 메시지가 한 노드에 전달되면 모든 노드에도 전달된다.
    2. 전체 순서가 정해진 전달: 메시지는 모든 노드에 같은 순서로 전달된다.
    3. 동일한 사용자 계정 생성 시, 최초 요청만 처리할 수 있어서 선형성 저장소 구현이 가능하다
    4. 전체 순서 브로드캐스트로 선형성 저장소 구현이 가능하다. (일련번호가 유일한 값이 되므로)
  6. 합의
    1. 2단계 커밋(2PC): 코디네이터를 사용해서 1단계로 참여 준비를 확인하고 2단계로 실제 커밋을 한다.
      1. 1단계에서 모두 동의를 해야한다.
      2. 동의를 하고 커밋 요청이 오면 무조건 커밋을 해야 한다. (돌아갈 수 없는 지점)
      3. 코디네이터에 장애가 발생하면 커밋도 어보트도 하지 못 하는 지점이 생긴다. (블로킹)
    2. 내결함성을 지니는 합의
      1. 전체 순서 브로드캐스트는 모든 노드에 정확히 한 번, 같은 순서로 전달되어야 하는데, 이 작업은 합의를 여러 번 하는 것과 동일하다.
    3. 단일 리더 복제와 합의
      1. 새 노드를 선출하기 위해 투표를 하고 선출이 되면 에포크 번호를 증가시킨다.
      2. 리더는 결정하기 위해 에포크 번호가 더 높은 리더가 없는 지 확인해야 하여 정족수로 투표를 받는다.
    4. 단점
      1. 합의는 동기식 복제라 성능의 손해 발생
      2. 과반수를 유지해야 하므로 네트워크 문제에 약함
      3. 노드 집합이 고정되어 있다고 가정하여 클러스터 변경이 힘듦
  7. 코디네이션 서비스: 주키퍼로 대표되며, 분산 시스템 구축에 유용한 기능들을 제공함
    1. 선형성 원자적 연산 (실제로 합의가 필요함)
    2. 연산의 전체 순서화
    3. 장애 감지
    4. 변경 알림