Closed wooyounggggg closed 2 years ago
존재하는 데이터와, 그에 대한 논리적 연산의 동기화가 어긋나 발생하는 문제 ex) Modular N 연산을 Hashing에 사용하다가, N값이 변경되는 경우. 서버의 추가/제거 등
해시 테이블의 크기가 조정될 때, 평균적으로 k/n개의 키만 재배치하는 기술
기존의 전통적 해시 테이블이 대부분의 키
를 재배치하는 것에 반해, k/n개만 재배치
하여 시간 복잡도를 향상하는 특징을 가짐
안정 해시 알고리즘의 문제를 해결하기 위해 고안된 방법
서버의 개수보다 더 많은 가상 노드
를 해시 링 내부에 분포시켜, 데이터 분포의 표준 편차를 낮추는
방법
서버 하나가 여러대의 가상 노드를 할당하여 사용하게 됨
데이터 파티션 시 2가지 이슈
→ 5장에서 다룬 ‘안정 해시(Consistent Hashing)’를 통해 해결 가능
정족수에 따른 특성
→ ‘응답 지연 vs 일관성’ 사이의 Trade-off 존재
책에는 벡터 시계를 누가 가지고 있는 지에 대한 설명이 없음
→ 개인적인 견해로, 중재자가 갖고 있어야 할 것 같음
→ 만약 그렇다면, 중재자 서버는 어떻게 선정하는지에 대한 의문과, 중재자 서버가 죽으면 벡터 시계가 날라갈 텐데 이는 어떻게 방지할 수 있는가 등의 의문이 남음
영구적으로 장애가 발생한 서버의 최신 데이터들을 정상 기동 중인 다른 복제 서버(Replication)들로 반영할 필요가 있다
→ 반-엔트로피 프로토콜(Anti-entropy Protocol)
머클 트리(Merkle Tree) 이용하여, 두 서버 간에 불일치하는 사본들을 효율적으로 탐색할 수 있다
머클 트리 생성/갱신 방법
여러 개의 Bucket 안에 여러 개의 key를 보관한다
각 Bucket마다 1개의 해시 값을 추출한다
자식 노드로부터 새로운 해시 값을 계산하여 이진 트리를 상향식으로 구성해간다
불일치 사본 탐색 방법
CAP
consistency(일관성): 모든 노드에 동일한 데이터가 있어야 함
availability(가용성): 클라이언트는 분산시스템으로 부터 항상 응답을 받을 수 있어야 함
partiton tolerance(파티션 감내): 통신 장애가 발생하더라도 시스템이 계속 동작하는 것 (파티션은 두 노드 사이에 통신 장애가 발생함을 의미함)
주제
5~6장을 읽고 내용을 요약하거나, 중요✨ 하다고 생각하는 키워드 및 관련 설명을 코멘트로 달아주세요
연관 챕터
16
@caffeine-library/readers-system-design-interview