Shuffle-sharding: ترفند کمهزینه برای کاهش آسیب مشتریهای شلوغ
خلاصهٔ کاملتر
نویسنده که تجربهی زیادی تو مصاحبههای طراحی سیستم داره، میگه شافلشاردینگ یکی از کماستفادهترین ولی مفتترین ترفندهای دنیای سیستمهای توزیعشدهست. مسئله از اینجا شروع میشه که تو یه سیستم چندمشتری (یعنی چند مشتری با هم از یه زیرساخت استفاده میکنن) با یه ورکر مشترک، اگه چند مشتری فشار زیادی بیارن، همهی مشتریهای دیگه هم تحت تأثیر قرار میگیرن. تقسیمکردن مشتریها بین چند شارد کمک میکنه، ولی مثلاً با سه شارد باز یه خرابی میتونه یکسوم مشتریها رو درگیر کنه.
اضافهکردن شارد بیشتر شعاع آسیب رو کم میکنه، ولی دو مشکل داره: از یه جایی به بعد هزینهاش خیلی بالا میره، و وقتی مشتریها بین شاردهای بیشتری پخش میشن، استفاده از زیرساخت بیصرفهتر میشه. نویسنده میگه مشکل اصلی اینه که تو هر شارد، مشتریها هنوز همهی ورکرهای اون شارد رو با هم مشترکن؛ یعنی دقیقاً همون مشکل قبلی، فقط تو مقیاس کوچیکتر.
ایدهی شافلشاردینگ اینه که بهجای تخصیص هر مشتری به یه گروه ثابت از ورکرها، هر مشتری یه زیرمجموعهی تصادفی و تقریباً منحصربهفرد از ورکرها بگیره. تو یه مثال با ۶ ورکر که هر مشتری دو تاشون رو میگیره، احتمال اینکه دو مشتری دقیقاً همون دو ورکر رو داشته باشن فقط ۶.۶۷ درصده؛ در مقابل ۳۳ درصد تو شاردینگ ساده، یعنی حدود پنج برابر بهتر، بدون اینکه لازم باشه سختافزار بیشتری اضافه کنی.
نویسنده کاربرد این ایده رو با دو مثال عملی نشون میده. تو شرکت Rye، برای محدودیت نرخ ۵ درخواست بر ثانیهی API آمازون، بهجای یه باکت مشترک، پنج باکت با ۱ درخواست بر ثانیه تعریف کردن و هر مستأجر رو به دو تا از این باکتها وصل کردن؛ در نتیجه هر مستأجر حداکثر ۲ درخواست بر ثانیه میگیره، ولی فقط پنج باکت مشترک لازمه، نه یه باکت جدا برای هر مستأجر.
کاربرد دوم صف وبهوکه: بهجای یه صف مشترک که با یه مستأجر پرحجم عقب میافته، چند صف با محدودیت همزمانی تعریف میکنن و هر مستأجر رو به زیرمجموعهای از صفها وصل میکنن. برای حفظ ترتیب رویدادهای یه منبع خاص هم از شافلشاردینگ بازگشتی (دو لایهای) استفاده میکنن: مستأجر یه زیرمجموعه صف میگیره و بعد رویدادهای هر منبع با هش سازگار همیشه تو همون صف قرار میگیرن.
نکات کلیدی:
- شاردینگ معمولی مشتریها رو تو گروههای ثابت جدا میکنه، ولی خرابشدن یه شارد هنوز درصد زیادی از مشتریها رو درگیر میکنه
- تو شافلشاردینگ هر مستأجر یه ترکیب تصادفی و تقریباً منحصربهفرد از ورکرها میگیره و بدون خرید سختافزار بیشتر، شعاع آسیب رو کم میکنه
- تو یه مثال با ۶ ورکر، احتمال همپوشانی کامل بین دو مستأجر از ۳۳٪ به ۶.۶۷٪ میرسه
- این تکنیک رو میشه رو محدودیت نرخ درخواست و صف پیام هم پیاده کرد؛ نسخهی بازگشتیش ترتیب رویدادها رو هم حفظ میکنه




