새소식

반응형
Study/대규모 시스템 설계 기초

키-값 저장소 설계

  • -
반응형

키-값 저장소는 키-값 데이터베이스라고도 불리는 비 관계형 데이터베이스이다. 

이 저장소에 저장되는 값은 고유 식별자를 키로 가져야 한다. 

키와 값 사이의 이런 연결 관계를 "키-값" 쌍이라고 지칭한다. 

  • 키는 유일해야 한다 
  • 값은 키를 통해서만 접근할 수 있다
  • 키는 일반 텍스트일 수도 있고 해시값일 수도 있다
  • 성능 상의 이유로, 키는 짧을수록 좋다
  • 값은 문자열일수도, 리스트일 수도, 객체일 수도 있다
  • ex) 아마존 다이나모, memcached, 레디스 등

시스템 컴포넌트 

이번 절에서는 키-값 저장소 구현에 사용될 핵심 컴포넌트들 및 기술들을 살펴볼 것이다

 

데이터 파티션 

대규모의 애플리케이션의 경우, 전체 데이터를 작은 파티션으로 분할한 다음 여러 대의 서버에 저장해야 한다. 

데이터를 파티션 단위로 나눌 때 다음 문제를 해결해야 한다. 

  • 데이터를 여러 서버에 고르게 분산할 수 있는가 
  • 노드가 추가되거나 삭제될 때 데이터의 이동을 최소화할 수 있는가 

5장에서의 안정해시가 이 문제에 적합한 해결책이 된다.

 

데이터 다중화

고가용성과 안정성을 확보하려면 비동기적인 다중화가 필요하다.

다중화할 서버를 선정하는 방식은 다음과 같다

해시 링 위에 저장할 키 값을 배치하고 만나는 N개의 서버에 데이터 사본을 보관하는 것이다.

데이터 일관성 

여러 노드에 다중화된 데이터는 적절히 동기화가 되어야 한다. 

정족수 합의(Quorum Consensus) 프로토콜을 사용하면 읽기/쓰기 연산 모두에 일관성을 보장할 수 있다. 

우선 관계된 정의부터 몇 가지 살펴보자 

  • N=사본 개수 
  • W=쓰기 연산에 대한 정족수 
    • 쓰기 연산이 성공한 것으로 간주되려면 적어도 W개의 서버로부터 쓰기 연산이 성공했다는 응답을 받아야 한다
  • R=읽기 연산에 대한 정족수 
    • 읽기 연산이 성공한 것으로 간주되려면 적어도 R개의 서버로부터 응답을 받아야 한다

상황별 시스템 특성

  • R=1, W=N : 빠른 읽기 연산에 최적화된 시스템 
  • W=1, R=N : 빠른 쓰기 연산에 최적화된 시스템 
  • W+R> N : 강한 일관성 보장 (보통 N=3, W=R=2)
  • W+R <=N : 강한 일관성의 보장이 없다. 

요구되는 일관성 수준에 따라 조정

 

장애 감지 

분산 시스템에서는 그냥 서버 한대가 죽었다고 "지금 서버 A가 죽었습니다"라고 해서 바로 서버 A를 장애처리 하지 않는다. 

보통 두 대 이상의 서버가 똑같이 서버 A의 장애를 보고해야 실제로 해당 서버에 장애가 발생했다고 간주한다.

모든 노드 사이에 멀티캐스팅 채널을 구축하는 것이 서버 장애를 감지하는 가장 손쉬운 방법이지만, 서버가 많을 때에는 비효율적이다.

 

가십 프로토콜 같은 분산형 장애 감지 솔루션을 채택하는 편이 더 효육적이다.

가십 프로토콜의 동작 원리는 다음과 같다.

  • 각 노드는 멤버십 목록을 유지한다.
  • 멤버십 목록은 각 멤버 Id와 그 박동 카운터 쌍의 목록이다.
  • 각 노드는 주기적으로 자신의 박동 카운터를 증가시킨다.
  • 각 노드는 무작위로 선정된 노드들에게 주기적으로 자기 박동 카운터 목록을 보낸다.
  • 박동 카운터 목록을 받은 노드는 멤버십 목록을 최신 값으로 갱신한다.
  • 어떤 멤버의 박동 카운터 값이 지정된 시간 동안 갱신되지 않으면 해당 멤버는 장애 상태인 것으로 간주한다.

요약

 

반응형

'Study > 대규모 시스템 설계 기초' 카테고리의 다른 글

안정 해시 설계(hash ring)  (0) 2024.06.21
알림 시스템 설계  (1) 2024.01.16
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.