0. 5장 요약
- 안정해시가 왜 필요한가?
- 안정해시가 어떻게 동작하는가?
1. 안정해시란?(Consistent Hashing)
- 수평적 규모 확장성을 달성하기 위해서 요청 또는 데이터를 서버에 균등하게 나누기 위해 보편적으로 사용하는 기술이다.
- Hashing
- 요청이 올때 해시코드를 얻어내고 그 결과에 따라 어떤 서버에 잘 분배할 수 있을까에 대한 고민
- Consistent(일관된)
- 서버를 추가하거나 빼는 상황에서도 유연하게 대처할 수 있는가?
2. 해시 키 재배치(rehash) 문제
- N개의 캐시 서버가 있다면 이 서버에 부하를 균등하게 나누는 보편적 방법은 아래의 해시함수를 사용하는 것이다.
- serverIndex = hash(key) % N
- 총 4대의 서버를 사용한다고 가정했을 때 각각의 키에 대해서 해시 값과 서버 인덱스를 계산하면 위와 같다.
- 예를들어, hask(key0) % 4 = 1 이면 클라이언트는 캐시에 보관된 데이터를 가져오기 위해 서버1에 접속해야 한다.
- 키 값이 서버에 어떻게 분산되는지 보여준다.
- 이 방법은 서버 풀(server pool)의 크기가 고정되어 있고, 데이터 분포가 균등할 때는 잘 동작한다.
- 하지만 서버가 추가되거나 삭제되면 문제가 생긴다.
- 만약 서버 하나가 장애 때문에 중단 된다면 전체 서버 크기는 3이 되고 서버 인덱스 값은 달라지게 된다.