Load Balancer

به این فکر کردین وبسایت ها یا اپلیکیشن‌هایی که ترافیک بالایی دارن چطوری زیر بار اینهمه درخواست همچنان stable می‌مونن؟ این اپلیکیشن‌ها از تکنیک‌های مختلفی تو قسمت‌های مختلف یه سیستم استفاده می‌کنن تا بتونن به حجم بالای درخواست ها جواب بدن و یکی از مهترین این تکنیک‌ها استفاده از Load Balancerهاست که قراره تو این نوشته کوتاه باهاش آشنا بشیم.

اول بگیم Load Balancer چیه؟

لود بالانسر یه دستگاه سخت‌افزاری یا یه نرافزار هست که ترافیک‌های ورودی یه شبکه یا یه اپلیکیشن رو بین چند سرور پخش می‌کنه و هدف اصلیش بالا بردن سطح performance، reliability و availability یه اپلیکیشن یا یه وبسایت هست و این کار رو با پخش کردن لود درخواست های به اپلیکیشن بین چند سرور یه صورت مساوی و یا با یه الگوریتم مشخص انجام میده که بار همه درخواست ها روی دوش یه سرور نباشه که نتونه جوابگوی درخواست ها باشه.

به تصویر بالا نگاه کنید، فرض کنید ما سه تا کپی از سرورمون داریم که قراره به ریکوئست های کاربرا جواب بدن، همونطور که می بینین یه Load Balancer این وسط قرار داده شده که ریکوئست‌ها اول به اون لودبالانسر ارسال میشن و این لود بالانسر درخواست ها رو به صورت مساوی بین سرورها تقسیم می کنه تا لود بین همه تقسیم شه تا همه کاربرا یا یه پرفورمنس خوب جواب درخواست‌هاشون رو بگیرن.

لودبالانسر چطوری کار می‌کنه؟

خب پس کار یه لود بالانسر اینه که ترافیک ورودی رو بین سرورها تقسیم کنه، ولی چطوری این کارو میکنه؟ لودبالانسرها از الگوریتم‌های مختلفی برای این کار استفاده می‌کنن که انتخاب این الگریتم‌ها بسته به نیاز اپلیکیشن می‌تونه متفاوت باشه، اگه بخواییم بعضی از این الگوریتم‌ها رو نام ببریم میتونیم به round-robin، least connections و IP hash اشاره کنیم.

  • الگوریتم round-robin: این روشن ریکوئست های دریافتی با همون الگوریتم معروف راندرابین که تو درس سیستم‌های عامل و یا طراحی الگوریتم آشنا شدیم بین سرورها پخش می‌کنه.
  • الگوریتم Least Connection: این روش ریکوئست‌های دریافتی رو با توجه به اینکه کدوم سرور کمترین تعداد کانکشن فعال داره، بین سرورها پخش می‌کنه.
  • الگوریتم IP Hash: تو این روش ریکوئست‌ها با توجه به IP کلاینت بین سرورها پخش می‌شن.


نکته: لود بالانسرها از یه مکانیزمی به اسم health check استفاده می‌کنن تا سرورهایی رو که با مشکل روبه‌رو شدن شناسایی کنن و تا موقعی که به حالت عادی برنگشتن از دور خارج میکنن و ریکوئستی رو به سمتشون ارسال نمی‌کنن.

انواع لودبالانسرها

لودبالانسرها رو میتونی به سه دسته کلی سخت‌افزاری، نرم‌افزاری و ابری تقسیم کنیم.

لودبالانسرهای سخت‌افزاری

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

لودبالانسرهای نرم‌افزاری

لودبالانسرهای نرم‌افزاری که احتمالا ما بیشتر تاحالا باهاشون سروکار داشتیم روی سخت افزارهای استاندارد یا ماشین‌های مجازی نصب میشن که خیلی سولوشن‌های انعطاف پذیر و ارزونتری نسبت به سخت‌افزاری‌ها هستن. برای مثال می تونیم به موارد زیر اشاره کنیم:

  • Nginx
  • HA Proxy
  • Apache HTTP Server

لودبالانسرهای ابری

این نوع از لودبالانسرها که توسط شرکت‌هایی که سروریس‌های ابری ارائه میدن ارائه میشه که خیلی انعطاف پذیر و scalable هستن و به راحتی با سرویس‌های دیگه اون شرکت مچ می‌شن و میشه با کمترین کانفیک ممکن ازشون استفاده کرد. برای مثال میشه سرویس‌های زیر رو نام برد:

  • AWS Elastic Load Balancing (ELB)
  • Microsoft Azure Load Balancer
  • Google Cloud Load Balancing

چرا باید از لودبالانسرها استفاده کنیم؟

به مواردی زیادی میشه برای چرایی استفاده از لود بالانسرها اشاره کرد ولی به طوری کلی میشه به موارد زیر به عنوان مهم‌ترین ها اشاره کرد:

  • برای Distribute Load: برای تقسیم ترافیک بین سرورها و جلوگیری از overload شدن سرور و جلوگیری یا پایین آوردن downtime.
  • برای Scalability: با استفاده از لود بالانسرها scale کرد سرور خیلی راحت میشه، چون فقط کافیه یه سرور جدید رو به load balancer معرفی کنیم تا در چرخه قرار بگیره.
  • برای High Availability: از اونجایی که لودبالانسرها از مکانیزم health check برای شناسایی سرورهای معیوب استفاده می‌کنن، سیستم رو به صورت کامل available نگه میدارن و درخواست ها رو به سمت سرور معیوب نمی‌فرستن.
  • برای Security: لودبالانسرها همچنین ویژگی‌های امنیتی مثل DDoS Protection و SSL رو در اختیارمون قرار میدن تا امنیت سیستم رو بالا ببریم.

در پایان مثل همیشه اینکه اگه نوشته رو دوست داشتید با دوستان به اشتراک بزارید که هم بهشون کمک کنه و هم انرژی بشه برای من که ادامه بدم :)

و اینکه میتونید منو با آی‌دی mehdi_zarepour تو توییتر پیدا کنید، نوشته‌های جدید رو اونجا توییت میکنم.