سرویس 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 و UDPTCP و UDP
PortPort ورودی Load Balancer که کاربر به آن وصل می‌شود80
Target PortPort که 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 (حفظ می‌شود)
درخواست از داخل VPCIP مبدأ اصلی، مثلاً IP ماشین فرستنده (حفظ می‌شود)
Health CheckHealth check IP در همان Subnet (نه Load Balancer IP)
Hairpin: اتصال از داخل همان Upstream به Load Balancer IPLoad 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>