علیرضا نقدی پور
علیرضا نقدی پور
خواندن ۴ دقیقه·۱ سال پیش

سیستم دیزاین: Load Balancers

سلام رفقا،
شرایطی را در نظر بگیرید، که وبسایتی داریم و درحال محبوبیت هست، ترافیک سایت هم افزایش پیدا میکنه و بار روی تک سرور ما افزایش پیدا میکنه و سایت برای کاربران ما کند می شود. برای برآوردن درخواست‌های این حجم بالای داده و بهبود پاسخ صحیح به صورت سریع و قابل اعتماد، نیاز به scale سرور داریم. این کار را می توانیم با افزایش سرورهای بیشتر به شبکه و توزیع ریکوست ها بین این سرورها، انجام بدیم.

اما... چه کسی تصمیم میگیره که کدام ریکوست به کدام سروره بره...؟!


بله... درست حدس زدید، پاسخ لود بالانسر هست!


لود بالانسر چی هست؟ (Load Balancer)


لود بالانسر به عنوان پلیس ترافیک عمل میکنه و مقابل سرورهای ما میشینه و ریکوست های دریافتی از سمت مشتری را بین سرورهای تعریف شده، توزیع میکنه و تضمین میکنه که هیچ سروری بیش از حد کار نکنه که باعث کاهش عملکرد سیستم ما شود.

در تصویر زیر(1-1) نحوه کار لود بالانسر را می بینید:


1-1 عکس از کتاب system design interview
1-1 عکس از کتاب system design interview


در تصویر بالا (1-1) ، کاربران از طریق ip عمومی به طور مستقیم به لود بالانسر ما وصل میشن. در این سیستم سرورهای ما بصورت مستقیم توسط مشتری غیر قابل دسترسی هستند و از ip خصوصی برای ارتباط سرورها با همدیگر استفاده می شود. ip های خصوصی فقط بین سرورهای یک شبکه داخلی در دسترس هست و از طریق اینترنت غیرقابل دسترسی هست. لود بالانسر از طریق ip خصوصی با سرورهای ما ارتباط برقرار می کند.


مزایای لود بالانسر

  • طبق تصویر (1-1) اگر سرور 1 آفلاین شود، تمام ترافیک به سرور 2 هدایت می شود. این از آفلاین شدن وب سایت جلوگیری می کند. ما همچنین یک سرور سالم جدید را به مجموعه سرورهامون اضافه میکنیم تا بار را بالانس(متعادل) کنیم. و باعث افزایش availability و reliability سیستم می شود.
  • اگر ترافیک وب سایت به سرعت رشد کند و دو سرور برای مدیریت ترافیک کافی نباشد، لود بالانسر می تواند این مشکل را مدیریت کند. شما فقط باید سرورهای بیشتری را به مجموعه سرورهاتون اضافه کنید، و لود بالانسر به طور خودکار شروع به ارسال ریکوست به آنها می کند.


الگوریتم های لود بالانسر

الگوریتم های مختلف load baancer مزایای مختلفی دارند. انتخاب روش توزیع بار بستگی به نیاز شما دارد:

1- Round Robin

در الگوریتم Round Robin، درخواست‌ها به صورت مرتب به ترتیب روی سرورهای مختلف توزیع می‌شوند. به عبارت دیگر، هر درخواست به یک سرور ارسال می‌شود و سپس درخواست بعدی به سرور بعدی در لیست توزیع می‌شود. وقتی که به آخرین سرور در لیست رسید، توزیع دوباره از ابتدا آغاز می‌شود. این روند تکرار می‌شود و درخواست‌ها به صورت یک دوره (cycle) توزیع می‌شوند.


2- Least Connections

در الگوریتم Least Connections، برای هر سرور، تعداد ارتباطات فعلی با کلاینت‌ها بررسی می‌شود. سپس درخواست جدید به آن سرور ارسال می‌شود که کمترین تعداد ارتباط فعلی را دارد. به عبارت دیگر، درخواست به سروری ارسال می‌شود که کمترین بار فعلی را دارد.


3 - Weighted Round Robin (WRR)

در الگوریتم WRR، هر سرور با یک وزن مشخص می‌شود. وزن بیانگر نسبت توزیع بار است که برای هر سرور تعیین می‌شود. به عنوان مثال، اگر دو سرور با وزن‌های ۲ و ۳ داشته باشیم، به ازای هر دو بار از سرور اول، سه بار از سرور دوم توزیع می‌شود.


4 - IP Hash

در الگوریتم IP Hash، برای هر درخواست از یک کلاینت، آدرس IP کلاینت به یک تابع هش می‌دهد. نتیجه هش، به عنوان شاخص توزیع، مورد استفاده قرار می‌گیرد. بر اساس این شاخص، درخواست به یکی از منابع موجود در سیستم توزیع می‌شود. به عبارت دیگر، کلاینت‌هایی که آدرس IP یکسانی دارند، همیشه به یک منبع خاص توزیع می‌شوند.


5 - Least Time

در الگوریتم Least Time، زمان پاسخ دهی به درخواست‌ها اندازه‌گیری می‌شود. هر منبع یا سرویس به طور مداوم بررسی می‌شود و زمان پاسخ دهی فعلی آن محاسبه می‌شود. سپس درخواست جدید به منبع با کمترین زمان پاسخ دهی ارسال می‌شود. به عبارت دیگر، درخواست به منبعی ارسال می‌شود که زمان پاسخ دهی کمتری نسبت به منابع دیگر دارد.



5 تا از الگوریتم های اصلی توزیع بار را تو این مقاله توضیح دادم و بستگی به نیازتون میتونید از الگوریتم های دیگه هم استفاده کنید.

امیدوارم این مطلب براتون مفید بوده باشه و اگه حمایت کنید هر هفته یک مطلب در مورد سیستم دیزاین میزارم، موفق باشید.

References:

  • system design interview book
  • https://www.nginx.com/resources/glossary/load-balancing/
  • chatGPT :)
لود بالانسرسیستم دیزایننرم افزاروب سایت
مهندس نرم افزار
شاید از این پست‌ها خوشتان بیاید