Consistent Hashing
وقتی یه سیستم توزیعشده داری، مثل یه کلاستر از سرورها که درخواستها رو بین خودشون تقسیم میکنن، باید یه راهی باشه که دادهها رو طوری پخش کنی که هم کارآمد باشه، هم اگه یه سرور از مدار خارج شد، اوضاع بهم نریزه. اینجاست که Consistent Hashing و Hash Ring به درد میخورن.
🔄 اHash Ring چیه؟
تصور کن یه دایره داریم که ۰ تا ۳۶۰ درجه داره. این دایره مثل یه نقشهست که کلیدها (Keys) و سرورها (Nodes) روی اون قرار میگیرن.
۱. هر سرور (Node) یه عدد هش میگیره و یه نقطه توی این حلقه بهش اختصاص داده میشه.
۲. هر داده (Key) هم هش میشه و یه نقطه روی حلقه پیدا میکنه.
- دادهای که هش شده، به اولین سروری که در جهت ساعتگرد پیدا بشه، اختصاص داده میشه.
اConsistent Hashing چه مشکلی رو حل میکنه؟
فرض کن از هش معمولی استفاده کنیم (مثلاً key % تعداد سرورها
). اگه تعداد سرورها عوض بشه (مثلاً یکی خراب بشه یا یه سرور جدید اضافه بشه)، همهی هشها تغییر میکنن و دادهها جابهجا میشن، که این یه فاجعهست! اما Consistent Hashing این مشکل رو حل میکنه.
✅ مزایای Consistent Hashing:
✔ اگه یه سرور اضافه یا حذف بشه، فقط بخش کوچیکی از دادهها جابهجا میشن، نه همهشون.
✔ تعادل بار (Load Balancing) خوبی ایجاد میکنه.
✔ مقیاسپذیری (Scalability) بالایی داره.
🛠 چند نکته برای بهینهسازی:
- اVirtual Nodes: برای جلوگیری از نامتعادل بودن بار، هر سرور میتونه چندین نقطه روی حلقه داشته باشه تا دادهها بهتر توزیع بشن.
- اReplication: میشه دادهها رو روی چند نقطهی نزدیک نگه داشت تا در صورت خرابی یه سرور، دادهها از جای دیگه خونده بشن.
📌 جمعبندی
اHash Ring یه مدل برای نگاشت دادهها به سرورهاست، و Consistent Hashing باعث میشه که این مدل با اضافه یا حذف سرورها کارآمد بمونه. این تکنیک خیلی توی سیستمهای توزیعشده مثل Redis Cluster، Cassandra و CDNها استفاده میشه.