Open meloncha opened 2 years ago
https://dgryski.medium.com/consistent-hashing-algorithmic-tradeoffs-ef6b8e2fcae8
Jump Hash
Multi-Probe Consistent Hashing
Rendezvous Hashing
Maglev Hashing
알고리즘 별로 걸리는 시간
CHash(Consistent Hashing) 의 경우 시간 복잡도 O(logN) 이다
https://itnext.io/introducing-consistent-hashing-9a289769052e
type RendezVous struct {
nodes []Node
}
type Node struct {
id string
}
func (r *RendezVous) Get(key string) (*Node, error) {
length := uint32(len(r.nodes))
var maxHashValue = hash(key, r.nodes[0].id, length)
result := 0
for index, node := range r.nodes[1:] {
currentHashValue := hash(key, node.id, length)
if currentHashValue > maxHashValue {
maxHashValue = currentHashValue
result = index
}
}
return &r.nodes[result], nil
}
int32_t JumpConsistentHash(uint64_t key, int32_t num_buckets) {
int64_t b = 1, j = 0;
while (j < num_buckets) {
b=j;
key = key * 2862933555777941757ULL + 1; // Did you say magic number?
j = (b + 1) * (double(1LL << 31) / double((key >> 33) + 1));
}
return b;
}
장점
해시 키 재배치(rehash) 문제
안정 해시
해시 공간과 해시 링
해시 서버
해시 키
서버 조회
서버 추가
서버 제거
기본 구현법의 두 가지 문제
안정 해시 알고리즘
문제점
가상 노드
-> 시스템 요구사항에 맞추는 의미? best practice는 무엇일까?
재배치할 키 결정
안정 해시의 이점