Load Balancing چیست؟
Load Balancing یک روش و سیستم توزیع درخواستها بین چندین سرور است که با هدف افزایش عملکرد، مقیاسپذیری، دسترسپذیری و قابلیت اطمینان در یک شبکه یا برنامه به کار میرود. این سیستم بهعنوان واسطهای بین کلاینتها و سرورها عمل کرده و با استفاده از الگوریتمهای مختلف توزیع بار، درخواستهای ورودی را بهصورت بهینه بین سرورهای موجود پخش میکند.

Load Balancerها چگونه کار میکنند؟
Load Balancerها بهعنوان یک نقطه ورود مرکزی در شبکه، درخواستهای کلاینتها را دریافت کرده و بر اساس الگوریتمهای توزیع بار، آنها را به یکی از سرورهای پسزمینه هدایت میکنند.
- دریافت درخواستهای ورودی
هنگامی که یک کلاینت درخواست خود را ارسال میکند، درخواست ابتدا به Load Balancer میرسد.
- بررسی سلامت سرورها
پیش از ارسال درخواستها به سرورها، Load Balancer باید اطمینان حاصل کند که سرورها سالم و آماده پاسخگویی هستند. اگر سروری از کار بیفتد، Load Balancer بهصورت خودکار آن را از لیست سرورهای فعال حذف کرده و درخواست جدیدی به آن ارسال نمیکند.
- انتخاب سرور
پس از بررسی سلامت سرورها، Load Balancer باید تصمیم بگیرد که درخواست را به کدام سرور ارسال کند. این فرآیند بر اساس الگوریتمهای توزیع بار انجام میشود.
- ارسال درخواست به سرور
پس از انتخاب سرور مناسب، Load Balancer درخواست را به آن ارسال میکند. دو روش اصلی برای ارسال درخواستها وجود دارد:
NAT-based Load Balancing (Network Address Translation)
در این روش، Load Balancer آدرس IP مقصد را تغییر داده و درخواست را مستقیماً به سرور مناسب ارسال میکند. این روش معمولاً در لایه ۴ استفاده میشود.
Proxy-based Load Balancing
در این روش، Load Balancer بهعنوان یک واسط عمل کرده و درخواست را از طرف کلاینت به سرور ارسال میکند. این روش معمولاً در لایه ۷ کاربرد دارد.
- بازگرداندن پاسخ به کلاینت
پس از پردازش درخواست توسط سرور، پاسخ به Load Balancer ارسال شده و سپس به کلاینت بازگردانده میشود. اگر Load Balancer در لایه ۷ کار کند، میتواند Cache را فعال کند تا درخواستهای پرتکرار سریعتر پردازش شوند.اگر در لایه ۴ کار کند، تنها ترافیک را از سرور دریافت کرده و بدون پردازش اضافه، مستقیماً به کلاینت ارسال میکند.
الگوریتمهای توزیع بار در Load balancer
الگوریتمهای توزیع بار در Load Balancer مشخص میکنند که درخواستهای ورودی چگونه بین سرورهای موجود توزیع شوند. این الگوریتمها بسته به نیازهای شبکه، نوع سرویس و میزان بار سرورها متفاوت هستند. در ادامه، رایجترین الگوریتمهای توزیع بار را بررسی میکنیم:
- Round Robin
در این الگوریتم، درخواستها به صورت متوالی بین سرورها توزیع میشوند. برای مثال، اگر ۳ سرور داشته باشیم، درخواست اول به سرور ۱، درخواست دوم به سرور ۲ و درخواست سوم به سرور ۳ ارسال میشود، سپس این چرخه تکرار میشود.
مزیت : ساده و مناسب برای سیستمهایی که سرورها قدرت پردازشی یکسان دارند.
- Weighted Round Robin
مشابه Round Robin اما در این الگوریتم، به هر سرور یک وزن مشخص اختصاص داده میشود. سروری که قدرت پردازشی بیشتری دارد، درخواستهای بیشتری دریافت میکند.
مزیت: بهینهتر برای سرورهایی با قدرت سختافزاری متفاوت.
- Least Connections
در این روش، درخواست جدید به سروری ارسال میشود که در لحظه کمترین تعداد اتصال فعال را داشته باشد.
مزیت: مناسب برای سرورهایی با بار پردازشی متغیر و جلوگیری از فشار بیش از حد روی یک سرور خاص.
- Weighted Least Connections
این روش مشابه Least Connections است، اما علاوه بر تعداد اتصالات فعال، وزن سرورها نیز در تصمیمگیری لحاظ میشود.
مزیت: توزیع متعادلتر بار برای سرورهای قدرتمندتر یا ضعیفتر.
- Least Response Time
در این الگوریتم، درخواست جدید به سروری ارسال میشود که کمترین زمان پاسخگویی را دارد. این زمان شامل مدت زمان پردازش درخواست قبلی و سرعت پاسخ سرور میشود.
مزیت: بهبود تجربه کاربری در سرویسهایی که زمان پاسخگویی اهمیت بالایی دارد.
- IP Hash
در این روش، از آدرس IP کلاینت، مقدار Hash محاسبه شده و بر اساس آن، درخواست همیشه به یک سرور مشخص هدایت میشود.
مزیت: مناسب برای سرویسهایی که نیاز به حفظ اتصال کاربران به یک سرور خاص دارند (مانند ورود کاربران به حساب کاربری).
- Consistent Hashing
یک نسخه پیشرفتهتر از IP Hash است که در آن، هنگام افزودن یا حذف شدن یک سرور، تغییرات در توزیع بار به حداقل میرسد.
مزیت: ایدهآل برای سیستمهای توزیعشده و پایگاههای داده کشینگ مانند Redis یا Memcached.
- Random
در این روش، درخواستها به صورت تصادفی به یکی از سرورها ارسال میشوند.
مزیت: ساده، اما کمتر بهینه، در مقایسه با روشهای دیگر.
- Least Bandwidth
در این الگوریتم، درخواست به سروری ارسال میشود که کمترین میزان پهنای باند مصرفی را دارد.
- Least Pending Requests
در این روش، درخواستها به سروری ارسال میشوند که کمترین تعداد درخواست در انتظار پردازش را دارد.
مزیت: کاهش زمان انتظار کاربران در سرویسهایی با حجم پردازش سنگین.
مزایای استفاده از Load balancerها
Load Balancer ها یکی از اجزای کلیدی زیرساختهای مقیاسپذیر و پایدار هستند که باعث بهبود عملکرد، دسترسپذیری و امنیت سیستمهای تحت شبکه میشوند. در ادامه، مهمترین مزایای استفاده از Load Balancer ها را بررسی میکنیم:

- افزایش عملکرد: توزیع هوشمند درخواستها بین سرورها از بار اضافی بر روی یک سرور خاص جلوگیری میکند و موجب بهینهسازی زمان پاسخگویی میشود.
- افزایش مقیاس پذیری: Load Balancer ها امکان افزایش یا کاهش تعداد سرورها را بدون اختلال در سرویس فراهم میکنند. در شرایطی که تراقیک افزایش پیدا میکند، میتوان سرورهای جدیدی را اضافه کرد و Load Balancer به طور خودکار آنها را در فرایند توزیع بار لحاظ میکند.
- افزایش دسترسپذیری و پایداری: اگر یکی از سرورها خراب شود، Load Balancer به طور خودکار درخواستها را به سرورهای سالم هدایت میکند و به این ترتیب از قطع شدن سرویس جلوگیری میشود.
- بهبود امنیت: برخی از Load Balancerها دارای امکانات امنیتی داخلی هستند که به محافظت از سرورها و جلوگیری از حملات سایبری کمک میکنند.
- بهینهسازی مصرف منابع سرورها: استفاده از Load Balancer ها باعث میشود که تمام سرورها به صورت متعادل از منابع خود استفاده کنند و هیچ سروری دچار مصرف بیش از حد پردازنده یا حافظه نشود.
- توزیع جغرافیایی درخواستها: در سیستمهایی که چندین دیتاسنتر در نقاط مختلف جهان دارند، Load Balancer میتواند کاربران را به نزدیکترین دیتاسنتر هدایت کند تا سرعت و کیفیت سرویس افزایش یابد.
- Session Persistence: برخی از برنامهها نیاز دارند که کاربران همواره به یک سرور مشخص متصل بمانند (مثل بازیهای چند نفره). Load Balancer ها، میتوانند این قابلیت را از طریق Session Persistence مدیریت کنند.
انواع Load balancerها
Load Balancerها، بر اساس روش پیادهسازی و لایهای که در آن فعالیت میکنند به چند دسته تقسیم میشوند. در ادامه، بر اساس این دو معیار، انواع آنها را بررسی میکنیم:
انواع Load Balancerها بر اساس روش پیادهسازی
- سختافزاری (Hardware Load Balancer)
این نوع Load Balancerها بهصورت دستگاههای فیزیکی اختصاصی ساخته شدهاند و دارای پردازندههای قدرتمند و قابلیتهای امنیتی داخلی هستند. سرعت پردازش بالایی دارند، اما هزینه خرید و نگهداری آنها زیاد است.
- نرمافزاری (Software Load Balancer)
این نوع Load Balancerها بهصورت برنامههای نرمافزاری هستند و روی سرورها یا ماشینهای مجازی نصب میشوند. این مدل نسبت به مدلهای سختافزاری، انعطافپذیری بیشتری در اجرا دارد.
- ابری (Cloud-based Load Balancer)
این Load Balancerها بهصورت سرویسهای ابری ارائه میشوند و برای سرویسهای مقیاسپذیر و توزیعشده مناسب هستند. هزینه این مدلها معمولاً بر اساس میزان استفاده از آنها مشخص میشود.
انواع Load Balancerها بر اساس لایه عملیاتی
- Load Balancerلایه ۴ (Layer 4 – Transport Layer)
این نوع Load Balancerها فقط بر اساس آدرس IP و شماره پورت تصمیم میگیرند و به محتوای درخواستها توجهی ندارند. این مدل سرعت بالایی دارد، اما قدرت تشخیص نوع محتوا را ندارد.
- Load Balancer لایه ۷ (Layer 7 – Application Layer)
در این روش، توزیع بار بر اساس محتوای درخواستها انجام میشود و Load Balancerها میتوانند هوشمندانهتر برای هدایت درخواستها تصمیم بگیرند.
چالشهای استفاده از Load Balancer
- پیچیدگی در پیکربندی اولیه
- پیادهسازی Session Persistence
- پیاده سازی مکانیزمهای Failover و Health check
- مقیاس پذیری در شرایط بار بالا
- نیاز به مانیتورینگ و پایش دقیق
- محافظت در برابر حملات احتمالی
- ناسازگاری یا عدم یکپارچگی با برخی اپلیکیشنها
در مقاله مانیتورینگ Load Balancerها به صورت جامع در مورد مانیتورینگ این فناوری صحبت شده است و به قابلیتهای پلتفرم مانیتورینگ معین در مانیتورینگ این دسته از فناوریها پرداخته شده است.