6장 키-값 저장소 설계

가상면접으로 배우는 대규모 시스템 설계 기초

6장 키-값 저장소 설계

키-값 저장소는 키-값 데이터베이스라고도 불리는 비관계형 데이터베이스다
키는 유일해야 되며 성능상의 이슈로 키는 짧을수록 좋다
값은 보통 무엇이 오던 상관하지 않는다

분산 키-값 저장소는 분산 해시 테이블이라고도 불린다.

CAP 정리

데이터 일관성(consistency), 가용성(availability), 파티션 감내(partition tolerance)라는 세가지 요구사항을 동시에 만족하는 분산 시스템을 설계 하는것은 불가능하다

  • 데이터 일관성 : 분산 시스템에 접속하는 모든 클라이언트는 어떤 노드에 접속했느냐에 관계없이 언제나 같은 데이터를 보게 된다
  • 가용성 : 분산 시스템에 접속하는 클라이언트는 일부 노드에 장애가 발생해도 항상 응답을 받아야 된다
  • 파티션 감내 : 파티션은 두 노드 사이에 통신 장애가 발생하였음을 의미한다. 파티션 감내는 네트워크에 파티션이 생겨도 시스템은 계속 동작해야 된다

핵심 컴포넌트

  • 데이터 파티션
    • 데이터를 여러서버에 고르게 분산할 수 있는가
    • 노드가 추가되거나 삭제될 때 데이터의 이동을 최소화할 수 있는가
    • 안정해시가 적합한기술
  • 데이터 다중화(replication)
    • 높은 가용성과 안정성을 확보하기 위해서는 데이터를 N개 서버에 비동기적으로 다중화 필요가 있다.
    • 가상 노드를 사용할때도 물리서버의 중복 선택되지 않도록 해야 된다
    • DR도 고려
  • 일관성(consistency)
    • 여러 노드에 다중화된 데이터는 적절히 동기화 해야 된다.
    • 정족수 합의(Quorum Consensus) 프로토콜을 사용하면 읽기/쓰기 연산 모두에 일관성을 보장할수 있다
    • N = 사본 갯수
    • W = 쓰기 연산에 정족수
    • R = 읽기 연산에 대한 정족수
    • R = 1, W=N : 빠른 읽기 연산에 최적화된 시스템
    • W = 1, R=N : 빠른 쓰기 연산에 최적화된 시스템
    • W + R > N : 강한 일관성이 보장됨 (보통 N=3, W=R=2)
    • W + R <= N : 강한 일관성이 보장되지 않음
  • 일관성 불일치 해소(inconsistency resolution)
    • 강한 일관성 : 모든 읽기 연산은 가장 최근에 갱신된 결과를 반환한다.
    • 약한 일관성 : 읽기 연산은 가장 최근에 갱신된 결과를 반환하지 못한다.
    • 최종 일관성 : 약한 일관성의 한 형태로 갱신 결과가 결국에는 모든 사본에 반영되는 모델
    • 방법
      • 데이터 버저닝 : 변경 될때 마다 데이터의 새로운 버전을 만드는것
      • 벡터 시계 : 서버:버전의 순서쌍을 데이터에 매단것
        • 단점
          • 충돌 감지 및 해소 로직이 클라이언트에 들어간다.
          • 서버:버전의 순서쌍이 굉장히 빨리 늘어난다.
  • 장애 처리
    • 장애감지
      • 모든 노드에 멀티캐스팅 채널을 구축하는것이 가장 손쉬운 방법, 서버가 많으면 비효율적
      • 가십 프로토콜 같은 분산형 장애 감지 솔루션을 채낵하는것이 효율적
    • 장애해소
      • 일시적 장애처리
        • 엄격한 정족수 접근법을 쓰면 읽기와 쓰기 연산을 금지
        • 느슨한 정족수 접근법은 이 조건을 완화하여 가용성을 높인다
          • 임시위탁 : 장애가 났을때 다른서버가 잠시 맡아 처리한다
      • 영구적 장애처리
        • 반 엔트로피 프로토콜 구현 사본 동기화
      • 데이터 센터 장애처리

참조