shad-go/consistenthash/README.md
2023-04-18 14:48:06 +04:00

16 lines
No EOL
1.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# consistenthash
Реализуйте consistent hashing.
Consistent hashing - это хеш функция, которая отображает множество ключей на
множество нод (процессов в кластере).
Пусть у вас есть `N` процессов. Можно было бы использовать функцию `hash(key) % N`,
где `hash` - какая-то "хорошая" хеш функция. Но если в систему добавить еще один процесс,
почти все ключи "переедут". Потому что `hash(key) % N != hash(key) % (N + 1)`.
Такие "переезды" в распределённой системе могут вызывать недоступность или
просто создавать большую нагрузку. Эту проблему решает consistent hashing.
Он гарантирует, что при добавлении новой ноды, "переедут" только `~ 1/N` ключей.
Для реализации используйте кольцо с виртуальными нодами, которое описано в [CS168: Introduction and Consistent Hashing](https://web.stanford.edu/class/cs168/l/l1.pdf)