05장: 복제

분산 데이터

기술이 성공하기 위해서 홍보보다 현실이 우선돼야 한다. 자연을 속일 수는 없기 때문이다 - Richard Feynman

여러 장비 간 분산된 데이터베이스를 필요로 하는 이유

  • 확장성

  • 내결함성/고가용성

  • 지연시간

  • 고부하로 확장

    • 수직확장, 용량확장, 공유메모리 아키텍처
    • 비공유 아키텍처
      • 수평확장
    • 복제 대 파티셔닝
      • 여러 노드에 데이터 분산 방법
        • 복제
        • 파티셔닝
  • 참고 문헌

05장: 복제

잘못될 수 있는 것과 잘못될 수 없는 겂 사이의 주된 차이점은 잘못될 수 없는 겂이 잘못됐을 때는 잘못을 파악하거나 고치는 것은 거의 불가능하다 - 더글라스 애덤스

복제란 네트워크로 연결된 여러 장비에 동일한 데이터의 복사본을 유지한다는 의미다

  • 지리적으로 사용자와 가깝게 데이터를 유지해 지연 시간을 줄인다
  • 시스템의 일부에 장애가 발생해도 지속적으로 동작할 수 있게 해 가용성을 높인다
  • 읽기 질의를 제공하는 장비의 수를 확장해 읽기 처리량을 늘린다

노드간 변경을 위한 인기 있는 알고리즘

  • 단일 리더
  • 다중 리더
  • 리더 없는

리더와 팔로워

데이터베이스의 복사본을 저장하는 각 노드를 복제서버 라고 한다

  • 동기식 대 비동기식 복제
    • 동기식 복제
      • 팔로워와 리더가 일관성이 있다
      • 하지만 비현실적
    • 비동기식 복제
      • 보통의 리더기반 복제는 완전히 비동기식으로 구성된다
  • 새로운 팔로워 설정
    • 새로운 팔로워가 리더의 데이터 복제본을 정확히 가지고 있는지 어떻게 보장?
      • 스냅샷을 일정 시점에 가지고 옴
      • 스냅숏을 새로운 팔로워 노드에 복사
      • 팔로워는 리더에서 연결해서 스냅숏 이후에 데이터를 동기화
  • 노드 중단 처리
    • 팔로워 장애: 따라잡기 복구
      • 팔로워가 장애 후에 복구 되면 리더에서 새로운 데이터를 다시 동기화함
    • 리더 장애: 장애 복구
      • 장애복구(failover)
        • 리더가 장애인지 판단
        • 새로운 리더를 선택
        • 새로운 리더 사용을 위해 시스템을 재설정
      • 장애 복구 과정의 문제
        • 비동기식 복제를 사용한다면 새로운 리더는 이전 리더가 실패하기 전에 이전 리더의 쓰기를 일부 수신 하지 못할수 있다
        • 쓰기를 폐기하는 방법은 데이터베이스 외부의 다른 저장소 시스템이 데이터베이스 네용에 맞추 조정돼한한다면 특히 위험
        • 특정 결함 시나리오 두 노드가 모두 자신이 리더라고 믿을 수 있다 - 스플릿 브레인
        • 리더가 분명히 죽었다고 판단 가능한 적절한 타임아웃은 얼마일까?
  • 복제 로그 구현
    • 구문기반 복제
      • SQL 구분을 파싱해서 실행
      • 구문을 기록할때 결정적 함수 호출을 고정 값을 반환하게끔 대체
    • 쓰기 전 로그 배송
      • 리더가 로그를 쓰기 전에 팔로워에게 로그를 보냄
      • 로그가 제일 저수준의 데이터를 기술한다는 점
    • 논리적(로우 기반) 로그 복제
      • 복제와 저장소 엔진을 위해 다른 로그 포멧형식을 사용하는 것
      • change data capture(CDC)라고도 함
    • 트리거 기반 복제
      • 트리거나 스토어드 프로시저를 사용

복제 지연 문제

읽기 확장 아키텍처에서 간단히 팔로워를 추가함으로써 읽기 전용 요청을 처리하기 위한 용량을 늘릴수 있다

최종적 일관성

  • 자신이 쓴 내용 읽기
    • 쓰기 후 읽기 일관성(자신의 쓰기 읽기 일관성)
    • 크로스 디바이스
  • 단조 읽기
    • 시간이 거꾸러 흐르는 현상 - 단조 읽기는 이런 종류 이상이 발생하지 않음을 보장한다
    • 강한 일관성 보다는 덜한 보장이지만 최종일관성보다는 더 강한 보장이다
  • 일관된 순서로 읽기
    • 복제 지연이 일어 날수 있다
    • 일관된 순서로 일기
  • 복제 지연을 위한 해결책
    • 트렌젝션이 있는 이유 - 올바른 작성수행을 항상 보장하기 위해
  • 다중 리더 복제
    • 마스터/마스터 복제, 엑티브/엑티브 복제
    • 다중 리더 복제의 사용 사례
      • 다중 데이터 센터 운영
      • 성능, 데이터센터 중단 내성, 네트워크 문제 내성
      • 오프라인 작업하는 클라이언트
      • 실시간 협업 편집
    • 쓰기 충돌 다루기
      • 다중 리더 복제는 쓰기 충돌이 일어난다
      • 동기 대 비동기 충돌 감지
        • 쓰기 완료전에 쓰기 차단
        • 충돌 회피
        • 일관된 상태 수렴
        • 사용자 정의 충돌 해소 로직
          • 쓰기 수행중
            • 충돌 핸들러를 호출
          • 읽기 수행 중
            • 충돌을 감지하면 모든 충돌 쓰기를 저장한다 그리고 어플리케이션에 여러 데이터를 리턴하고 어플리케이션에서 충돌이 해소 되면 저장
        • 충돌은 무엇인가?
    • 다중 리더 복제 토폴로지
      • 전체 연결
      • 원형 토플로지
        • single point of failure
      • 별모양 토폴로지
        • single point of failure
  • 리더 없는 복제
    • 노드가 다운됐을 때 데이터베이스에 쓰기
      • 읽기 복구와 안티 엔트로피
      • 읽기와 쓰기를 위한 정족수
    • 정족수 일관성의 한계
      • 최신성 모니터링
        • 최신 결과를 반환하는지 모니터링
    • 느슨한 정족수와 암시된 핸드오프
      • 느슨한 정족수
      • 암시된 핸드오프
      • 다중 데이터센터 운영
    • 동시 쓰기 감지
      • 최종 쓰기 승리(동시쓰기 버리기)
      • 이전 발생 관계와 동시성
      • 이전 발생 관계 파악
      • 동시에 쓴 값 병합
      • 버전 벡터

정리

  • 고가용성
  • 연결이 끊긴 작업
  • 지연 시간
  • 확장성

복제

  • 단일 리더 복제
  • 다중 리더 복제
  • 리더 없는 복제

일관성 모델

  • 쓰기 후 읽기 일관성
  • 단조 일기
  • 일관된 순서로 일기

참조