Hashing سازگار (Consistent Hashing)

Consistent Hashing: حل مشکل rehash در مقیاس‌پذیری؛ حلقه هش، Virtual Nodes و کاربرد در کش توزیع‌شده

مشکل: سرور اضافه شد!

کش توزیع‌شده با ۳ سرور و هش ساده:

server = hash(key) % 3

سرور ۴ اضافه شد → % 4 → تقریباً همه کلیدها جابه‌جا! (۳/۴ داده = miss انبوه = کش سرد = فاجعه!)

راه‌حل: Consistent Hashing

حلقه هش: فضای هش را به‌صورت دایره (۰ تا ۲³²) تصور کن:

  1. هر سرور را هش کن → روی حلقه بگذار
  2. هر کلید را هش کن → روی حلقه
  3. کلید متعلق به: اولین سرور در جهت عقربه‌های ساعت

جادو: افزودن سرور

سرور جدید بین دو سرور موجود می‌نشیند → فقط کلیدهای بین آن‌ها جابه‌جا می‌شوند (~1/n) — نه همه!

رویدادهش ساده (mod n)Consistent
سرور اضافه~همه جابه‌جا ✗~1/n جابه‌جا ✓
سرور حذف~همه جابه‌جا ✗فقط سهم او ✓

مشکل توزیع ناهمگن + Virtual Nodes

با چند سرور فیزیکی، حلقه ممکن است ناهمگن باشد (سروری سهم زیاد بگیرد). راه‌حل: هر سرور ۱۰۰-۲۰۰ نود مجازی روی حلقه → توزیع یکنواخت آماری!

کاربردهای واقعی

نکته مصاحبه: «کش توزیع‌شده چطور طراحی می‌کنی؟» — «Consistent Hashing با virtual nodes» پاسخ استاندارد است؛ حتماً «چرا» (مشکل mod n) را هم بگویید!

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل طراحی سیستم (System Design) است.

ابزارهای مرتبط