Consisten Hashing
تصور کنید که شما تصمیم میگیرید که تعداد node های shard رو تغییر بدید، سوال بزرگ اینه که چه بلایی بر سر hash key ها میاد؟ چون با کم و زیاد شدن node ها عملا خروجی تابع hash برای درخواست ها تغییر میکنه و درخواست ها به node درستی داده نمیشن.
این اتفاق اجتناب ناپذیره، اما یه سری الگوریتم های hashing هستن که تضمین میکنن با تغییر تعداد node ها فقط (#keys / #shards) تعداد از کلید ها احتیاج به remap شدن به shard جدید دارن و خیلی از کلید ها همچنان به node های قبلیشون map میشن.
این الگوریتم هارو consistent hashing میگن. مثلا تصور کنید اگه تعداد node های شما از ۱۰ به ۱۱ node تغییر کنه کمتر از ۱۰ درصد درخواست ها remap میشه که خب این خیلی اتفاق خوبیه، چون remap شدن منجر به repopulate شدن دیتای مورد نیاز درخواست در node جدید میشه که بسیار هزینه بر هست برای سیستم.
استفاده از consistent hashing در بسیاری از سیستم های توزیع شده رایجه و این اهمیت اینگونه الگوریتم ها رو میرسونه
این ویدیو کوتاه خیلی خوب توضیح داده
https://www.youtube.com/watch?v=zaRkONvyGr8
همچنین این مقاله خیلی خوب visualize کرده
https://www.toptal.com/big-data/consistent-hashing
آپدیت: اینم یه مقاله خوب و پیاده سازی در زبان گولنگ
https://medium.com/codex/understanding-and-implementing-consistent-hash-algorithm-e53a35afa428
#designing_distributed_systems_brendan_burns
@gocasts
Post #59
640
Go Casts | Systems & Agents 🚀 Selecting a Key همونطور که در پست قبلی اشاره شد باید به تابع هش یک ورودی داده بشه، انتخاب اینکه ورودی تابع هش چی باشه خیلی مهمه. فرض کنید بخوایم دو پارامتر ip و path (همون route درخواست) رو به عنوان ورودی تابع هش در نظر بگیریم: shard(request.ip, request.path)…YouTube What is CONSISTENT HASHING and Where is it used? Load Balancing is a key concept to system design. One of the popular ways to balance load in a system is to use the concept of consistent hashing. Consistent Hashing allows requests to be mapped into hash buckets while allowing the system to add and remove…