책 리뷰/가상 면접 사례로 배우는 대규모 시스템 설계 기초
가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 5장
eess
2024. 8. 26. 17:23
🔖 5장 : 안정 해시 설계
읽은 날짜 : 2024.08.26
지은이 : 알렉스 쉬
출판사 : 인사이트
기억하고 싶은 내용
해시 키 재배치(rehash) 문제
- N개의 캐시 서버가 있을 때 서버들에 부하를 균등하게 나누는 일반적인 방법은
- serverIndex = hash(key) % N
- 특정 키가 보관된 서버의 인덱스를 계산하는 방법
- 이 방법은 서버 풀의 크기가 고정되어 있을 때와 데이터 분포가 균등할 때는 잘 동작한다.
- 그러나 서버가 추가되거나 기존 서버가 삭제되는 경우(즉, N 값이 바뀜), 서버 인덱스 값이 바뀌면서 대규모 캐시 미스(cache miss)가 발생한다.
안정 해시(consistent hash)
- 해시 테이블 크기가 조정될 때 거의 대부분의 키를 재배치하는 전통적인 방식과 달리, 안정 해시는 평균적으로 k/n개의 키만 재배치하는 해시 기술이다. (k는 키의 개수, n은 슬롯의 개수)
해시 공간과 해시 링
- x0 ~ xn 범위(해시 함수의 출력 범위)의 해시 공간의 양쪽을 구부려 접으면 해시 링(hash ring)이 된다.
- 서버와 키를 균등 분포 해시 함수를 사용해서 해시 링에 배치한다.
- 키가 저장될 서버는 키의 위치에서 링을 시계 방향으로 탐색하다 만나는 최초의 서버이다.
서버 조회/추가/삭제
- 해시 링에서 어떤 키가 저장된 서버를 찾는 방법은, 해당 키의 위치로부터 시계 방향으로 링을 탐색해서 만나는 첫번째 서버이다.
- 서버를 추가 또는 삭제하더라도 일부 키만 재배치 된다. 추가 또는 삭제된 서버의 반시계 방향에 있는 최초 서버까지의 키가 재배치 된다.
안정 해시 알고리즘 문제점 두 가지
- 서버를 추가, 삭제하게 되면 파티션(인접 서버 사이의 해시 공간) 크기를 균등하게 유지하는 것이 불가능하다.
- 키의 균등 분포를 달성하기 어렵다.
가상 노드(virtual node)
- 실제 노드 또는 서버를 가리키는 노드. 하나의 서버는 링 위에 여러 개의 가상 노드를 가질 수 있다.
- 이로써 하나의 서버가 여러 개의 파티션을 관리하게 된다.
- 키의 위치로부터 시계 방향으로 링을 탐색하다 만나는 최초의 가상 노드가 해당 키가 저장될 서버가 된다.
- 가상 노드의 개수를 늘리면 키의 분포가 점점 더 균등해진다. 그러나 가상 노드 데이터를 저장할 공간에 대한 tradeoff가 발생한다.
안정 해시의 이점
- 서버 추가/삭제 시 재배치 되는 키의 수 최소화
- 데이터의 균등 분포로 수평적 규모 확장 달성하기 쉬움
- 핫스팟(hotspot) 키 문제를 줄임
오늘 읽은 소감
1장의 데이터베이스 규모 확장 부분에서 언급된 데이터 재 샤딩과 안정 해시 기법을 연관지어 정리해보자면, 다음과 같습니다.
- 샤드 소진(shard exhaustion) 현상이 발생하면 샤드 키를 계산하는 함수를 변경하고 데이터를 재배치 해야 합니다(재샤딩).
- 이때 안정 해시 기법을 활용하면 데이터 분포의 균형을 유지함과 동시에 재배치 되는 데이터를 최소하면서 재샤딩을 효율적으로 할 수 있습니다.
궁금한 내용 & 잘 이해되지 않는 내용
캐시 미스(cache miss)
- 요청한 데이터가 캐시에서 발견되면 캐시 히트(cache hit), 발견되지 않으면 캐시 미스(cache miss)라고 합니다.
- 캐시 미스의 유형
- Cold Miss : 데이터에 처음 액세스할 때 발생하는 캐시 미스
- Capacity Miss : 캐시의 크기가 충분하지 않아서 발생하는 캐시 미스
- Conflict Miss : 캐시가 특정 알고리즘에 따라 데이터를 저장할 위치를 결정할 때, 서로 다른 데이터가 동일한 캐시 위치에 매핑될 때 발생하는 캐시 미스
참고