سرویس Load Balancer ستون، ترافیک ورودی به برنامههای شما را به صورت هوشمند بین چند ماشین مجازی (Upstream) توزیع میکند. هدف این سرویس، افزایش دسترسیپذیری (Availability)، حذف نقطه واحد خرابی (Single Point of Failure) و فراهم کردن امکان مقیاسپذیری افقی (Horizontal Scaling) برای برنامههای شماست.
Load Balancer چیست؟
در معماریهای سنتی، ارتباط کلاینتها با سرور به صورت یکبه-یک (One-to-One) است؛ یعنی کاربر مستقیماً به یک ماشین متصل میشود. در این حالت، اگر آن ماشین با خرابی مواجه شود، سرویس شما کاملاً از دسترس خارج خواهد شد.

اما در معماری یکبه-چند (One-to-Many)، از Load Balancer به عنوان یک نقطه ورود واحد (Single Entry Point) استفاده میشود و درخواستها بین چندین Upstream توزیع میشود. این ساختار مزایای زیر را دارد:
- توزیع متوازن بار: از تمرکز ترافیک و Overload شدن یک سرور خاص جلوگیری میکند.
- پایداری بالا (High Availability): در صورت خرابی یکی از Upstreamها، Load Balancer آن را از چرخه خارج کرده و کاربران را به Upstreamهای سالم هدایت میکند.
- گسترشپذیری افقی(Scalability): هر زمان که ترافیک شما افزایش یابد، میتوانید بدون اختلال، Upstreamهای جدیدی را برای پاسخگویی به بار اضافه کنید.
کاربردها
این سرویس در لایه ۴ شبکه (Transport Layer) عمل میکند و هدایت ترافیک را صرفاً بر اساس IP و Port انجام میدهد.
نکته مهم
در حال حاضر تنها پروتکلهای پشتیبانیشده در این نسخه TCP و UDP میباشند. پروتکلهای HTTP/HTTPS (لایه ۷) پشتیبانی نمیشوند.
این سرویس برای سناریوهای زیر ایدهآل است:
- وبسایتها و وباپلیکیشنهایی که میخواهند ترافیک را بین چند وبسرور توزیع کنند.
- APIها و میکروسرویسهایی که نیاز به توزیع درخواست بین چندین Instance دارند.
- دیتابیسها و سرویسهای مبتنی بر TCP برای مدیریت و توزیع Connectionها.
اجزای اصلی سرویس
۱. Network
Load Balancer و Upstreamها حتماً باید در یک VPC و یک Subnet مشترک قرار داشته باشند.
۲. Load Balancer
Load Balancer نقطه ورود ترافیک به سرویس است. Load Balancer میتواند با دو نوع IP ایجاد شود که بسته به کاربرد خود باید آن را انتخاب کنید:
- Private IP (داخلی): فقط از داخل Subnet قابل دسترسی است.
- External IP (خارجی): از طریق اینترنت عمومی قابل دسترسی است.
۳. Service
هر Load Balancer میتواند یک یا چند Service داشته باشد که مشخص میکند Load Balancer روی چه Port ورودی گوش دهد و ترافیک را به چه Port در سمت Upstream بفرستد.
| فیلد | مقدار / توضیح | نمونه |
|---|---|---|
| Protocol | در حال حاضر فقط TCP و UDP | TCP و UDP |
| Port | Port ورودی Load Balancer که کاربر به آن وصل میشود | 80 |
| Target Port | Port که Service شما روی Upstream به آن گوش میدهد | 8080 |
۴. Upstream
ماشینهای مجازی یا سرورهایی هستند که برنامه شما روی آنها در حال اجراست و ترافیک بین آنها توزیع میشود.
۵. Health Check
Load Balancer به صورت دورهای سلامت ماشینهای Upstream را بررسی میکند. اگر Upstreamای پاسخگو نباشد، موقتاً از چرخه خارج شده و پس از بهبود وضعیت، دوباره ترافیک دریافت میکند.
| تنظیمات | توضیح |
|---|---|
| Interval | فاصله زمانی بین هر بررسی (به ثانیه) |
| Timeout | حداکثر زمان انتظار برای دریافت پاسخ از Upstream (به ثانیه) |
| Success Threshold | تعداد بررسیهای موفق متوالی برای سالم شناختن Upstream و بازگشت به چرخه |
| Failure Threshold | تعداد بررسیهای ناموفق متوالی برای ناسالم شناختن Upstream و خروج از چرخه |
الگوریتم توزیع ترافیک و وضعیت IPها
اتصالهای TCP بر اساس IP و Port مبدأ (Source) بین Upstreamها توزیع میشوند. تا زمانی که یک اتصال برقرار باشد، ترافیک کاربر به همان Upstream ارسال میشود. این رفتار پایداری کانکشنهای طولانیمدت TCP را تضمین میکند.
در این سرویس، Load Balancer بهصورت پیشفرض Source IP اصلی درخواست را حفظ میکند؛ یعنی ترافیک کاربران معمولاً با Client Origin IP به Upstream میرسد، نه با Load Balancer IP. استثناها در جدول زیر آمده است:
| سناریو | Source IP که در Upstream دیده میشود |
|---|---|
| درخواست از اینترنت | Client IP (حفظ میشود) |
| درخواست از داخل VPC | IP مبدأ اصلی، مثلاً IP ماشین فرستنده (حفظ میشود) |
| Health Check | Health check IP در همان Subnet (نه Load Balancer IP) |
| Hairpin: اتصال از داخل همان Upstream به Load Balancer IP | Load Balancer IP (SNAT) |
نکات مهم و الزامات فنی
-
محدودیت Subnet: سرورهای Upstream و Load Balancer باید حتماً در یک Subnet باشند.
-
عدم پردازش در لایه اپلیکیشن: Load Balancer لایه ۴ است؛ بنابراین قابلیتهایی مثل خواندن هدرهای HTTP، سشناسپلیتر یا مدیریت گواهی SSL (در لایه ۷) را در این نسخه انجام نمیدهد.
-
رفتار Hairpinning: اگر Upstream بخواهد از داخل خود به Load Balancer IP متصل شود و ترافیک دوباره به همان Upstream برگردد، به دلیل مکانیزم Hairpinning، IP فرستنده به Load Balancer IP تبدیل (SNAT) میشود تا پاسخها بهدرستی از مسیر Load Balancer برگردند.
-
چرخه عمر External IP: در صورتی که یک External IP رزرو شده (Reserved) را به Load Balancer متصل کرده باشید، با حذف Load Balancer، آن External IP آزاد نخواهد شد و برای جلوگیری از هزینههای اضافی باید به صورت دستی آن را از پنل آزاد کنید.
-
روش صحیح تست اتصال: از آنجا که بررسی سلامت در لایه ۴ انجام میشود، ابزارهای ping (به دلیل استفاده از پروتکل ICMP) و curl (به دلیل کار در لایه ۷) برای تست Load Balancer مناسب نیستند. برای تست دستی، از ابزار nc (Netcat) استفاده کنید.
-
TCP
nc -zv <Load-Balancer-IP> <Load-Balancer-Port> -
UDP
nc -uzv <Load-Balancer-IP> <Load-Balancer-Port>
-
