가상면접으로 배우는 대규모 시스템 설계 기초
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)
- 강한 일관성 : 모든 읽기 연산은 가장 최근에 갱신된 결과를 반환한다.
- 약한 일관성 : 읽기 연산은 가장 최근에 갱신된 결과를 반환하지 못한다.
- 최종 일관성 : 약한 일관성의 한 형태로 갱신 결과가 결국에는 모든 사본에 반영되는 모델
- 방법
- 데이터 버저닝 : 변경 될때 마다 데이터의 새로운 버전을 만드는것
- 벡터 시계 : 서버:버전의 순서쌍을 데이터에 매단것
- 단점
- 충돌 감지 및 해소 로직이 클라이언트에 들어간다.
- 서버:버전의 순서쌍이 굉장히 빨리 늘어난다.
- 단점
- 장애 처리
- 장애감지
- 모든 노드에 멀티캐스팅 채널을 구축하는것이 가장 손쉬운 방법, 서버가 많으면 비효율적
- 가십 프로토콜 같은 분산형 장애 감지 솔루션을 채낵하는것이 효율적
- 장애해소
- 일시적 장애처리
- 엄격한 정족수 접근법을 쓰면 읽기와 쓰기 연산을 금지
- 느슨한 정족수 접근법은 이 조건을 완화하여 가용성을 높인다
- 임시위탁 : 장애가 났을때 다른서버가 잠시 맡아 처리한다
- 영구적 장애처리
- 반 엔트로피 프로토콜 구현 사본 동기화
- 데이터 센터 장애처리
- 일시적 장애처리
- 장애감지