یک هش ثابت برای مصاحبه طراحی سیستم طراحی کنید

Summarize this content to 400 words in Persian Lang
تصور کنید که محصول جدیدی را راه اندازی می کنید و حجم زیادی از ترافیک را جذب می کند (سفارش ۱ میلیون دلار در ثانیه). محصول شما با طراحی یک سرور طراحی شده است و سرور نمی تواند با حجم آن هماهنگی داشته باشد و باعث می شود سفارشی که می توانستید به دست آورید 1 میلیون دلار باشد.
برای حمایت از یک سری تقاضا، چه نوع مکانیزمی را میتوانید در سمت سرور پیادهسازی کنید تا نه تنها ترافیک را به طور یکنواخت توزیع کنید، بلکه خرید کنید و هرگز سفارشهای دریافتی را از دست ندهید؟ همچنین می خواهید اطمینان حاصل کنید که سایر سرورهای فعال از بارگذاری بیش از حد محافظت می شوند؟
این جایی است که الگوریتم هش ثابت وارد عمل می شود.
به طور سنتی، یک روش معمول برای توزیع ترافیک می تواند با پیروی از یک فرمول ساده انجام شود:
serverIndex = hash(key) % N که N تعداد سرورهاست
اما، هنگامی که یک سرور اضافه یا حذف می شود، serverIndex تغییر می کند و احتمالاً می تواند منجر به توزیع مجدد همه کلیدهای هش شود. به عنوان مثال در مورد کش کردن سرورها فکر کنید (سیستم Backend منجر به از دست دادن حافظه پنهان بسیاری می شود زیرا مقدار N متفاوت است)!
یکی از راه حل هایی که می توانید در نظر بگیرید یک الگوریتم هش ثابت است.
هش ثابت یک حلقه هش است که از اتصال سر و دم یک فضای هش با k تعداد گره مجازی اضافه شده بین هر سرور تشکیل می شود. حداقل تعداد بازتوزیع کلیدهای هش یا داده ها (یکنواخت) را تضمین می کند، در نتیجه از بارگذاری بیش از حد سرور جلوگیری می کند (معروف به مشکل کلید “هات اسپات”)
در حلقه هش، سرورها بر اساس IP یا نام سرور نگاشت می شوند. k تعداد گره مجازی برای هر سرور قرار می گیرد. هنگامی که یک سرور از کار میافتد یا به طور مداوم به سیستم اضافه میشود، فضاهای هش تأثیرگذار را میتوان به راحتی با حرکت در خلاف جهت عقربههای ساعت (از سرور آسیبدیده به سرور قبل از سرور آسیبدیده) ایجاد کرد و فقط کلیدهای آن فاصله بین نقشه برداری مجدد
به طور خلاصه، استفاده از هش کردن مداوم در متعادل کردن بار سرور دارای 3 مزیت است:
تعداد کلیدهایی که باید هنگام اضافه یا حذف سرور توزیع شوند را کاهش می دهد
مقیاس افقی را آسان می کند زیرا داده ها به طور یکنواخت توزیع می شوند
مشکل “هات اسپات” را کاهش می دهد
تصور کنید که محصول جدیدی را راه اندازی می کنید و حجم زیادی از ترافیک را جذب می کند (سفارش ۱ میلیون دلار در ثانیه). محصول شما با طراحی یک سرور طراحی شده است و سرور نمی تواند با حجم آن هماهنگی داشته باشد و باعث می شود سفارشی که می توانستید به دست آورید 1 میلیون دلار باشد.
برای حمایت از یک سری تقاضا، چه نوع مکانیزمی را میتوانید در سمت سرور پیادهسازی کنید تا نه تنها ترافیک را به طور یکنواخت توزیع کنید، بلکه خرید کنید و هرگز سفارشهای دریافتی را از دست ندهید؟ همچنین می خواهید اطمینان حاصل کنید که سایر سرورهای فعال از بارگذاری بیش از حد محافظت می شوند؟
این جایی است که الگوریتم هش ثابت وارد عمل می شود.
به طور سنتی، یک روش معمول برای توزیع ترافیک می تواند با پیروی از یک فرمول ساده انجام شود:
serverIndex = hash(key) % N که N تعداد سرورهاست
اما، هنگامی که یک سرور اضافه یا حذف می شود، serverIndex تغییر می کند و احتمالاً می تواند منجر به توزیع مجدد همه کلیدهای هش شود. به عنوان مثال در مورد کش کردن سرورها فکر کنید (سیستم Backend منجر به از دست دادن حافظه پنهان بسیاری می شود زیرا مقدار N متفاوت است)!
یکی از راه حل هایی که می توانید در نظر بگیرید یک الگوریتم هش ثابت است.
هش ثابت یک حلقه هش است که از اتصال سر و دم یک فضای هش با k تعداد گره مجازی اضافه شده بین هر سرور تشکیل می شود. حداقل تعداد بازتوزیع کلیدهای هش یا داده ها (یکنواخت) را تضمین می کند، در نتیجه از بارگذاری بیش از حد سرور جلوگیری می کند (معروف به مشکل کلید “هات اسپات”)
در حلقه هش، سرورها بر اساس IP یا نام سرور نگاشت می شوند. k تعداد گره مجازی برای هر سرور قرار می گیرد. هنگامی که یک سرور از کار میافتد یا به طور مداوم به سیستم اضافه میشود، فضاهای هش تأثیرگذار را میتوان به راحتی با حرکت در خلاف جهت عقربههای ساعت (از سرور آسیبدیده به سرور قبل از سرور آسیبدیده) ایجاد کرد و فقط کلیدهای آن فاصله بین نقشه برداری مجدد
به طور خلاصه، استفاده از هش کردن مداوم در متعادل کردن بار سرور دارای 3 مزیت است:
- تعداد کلیدهایی که باید هنگام اضافه یا حذف سرور توزیع شوند را کاهش می دهد
- مقیاس افقی را آسان می کند زیرا داده ها به طور یکنواخت توزیع می شوند
- مشکل “هات اسپات” را کاهش می دهد