اگر به دنیای زیرساخت وب قدم گذاشتهاید، احتمالاً نام لود بالانسینگ (Load Balancing) یا تقسیم بار به گوشتان خورده است. این مفهوم مانند پلیس راهنمایی و رانندگی اینترنت عمل میکند و مطمئن میشود که درخواستهای دادهای به مقصد صحیح خود برسند بدون اینکه ترافیک ایجاد شود. در این مقاله، به بررسی چند تکنیک محبوب لود بالانسینگ میپردازیم و به شما نشان میدهیم که چگونه میتوانید آنها را با استفاده از NGINX راهاندازی کنید.
1. لود بالانسینگ راند رابین (Round Robin)
زمان استفاده: مناسب برای توزیع یکنواخت درخواستها هنگامی که سرورها تقریباً مشابه هستند.
چیست؟ این روش شبیه گرفتن نوبت است. هر سرور به ترتیب یک درخواست دریافت میکند. این تکنیک ساده و در مواقعی که سرورها از قدرت مشابهی برخوردارند، بسیار مؤثر است.
نکته منفی: تفاوت در بار کاری یا ظرفیت سرورها را در نظر نمیگیرد، که ممکن است منجر به عملکرد نامتوازن شود.
نحوه تنظیم در NGINX:
upstream backend {
server server1.example.com;
server server2.example.com;
server server3.example.com;
}
2. لود بالانسینگ کمترین تعداد اتصال (Least Connection)
زمان استفاده: عالی برای مواقعی که برخی سرورها نسبت به بقیه مشغولتر هستند.
چیست؟ درخواستها به سروری ارسال میشوند که کمترین تعداد اتصال فعال را دارد. شبیه انتخاب کوتاهترین صف در فروشگاه است.
نکته منفی: اگر برخی سرورها کندتر یا کمظرفیتتر باشند، ممکن است همچنان تعداد اتصالات بیشتری دریافت کنند.
نحوه تنظیم در NGINX:
upstream backend {
least_conn;
server server1.example.com;
server server2.example.com;
server server3.example.com;
}
3. لود بالانسینگ راند رابین وزندار (Weighted Round Robin)
زمان استفاده: زمانی که سرورها قدرت متفاوتی دارند.
چیست؟ مشابه راند رابین، اما میتوانید به برخی سرورها بر اساس ظرفیتشان نوبتهای بیشتری اختصاص دهید.
نکته منفی: نیاز به پیکربندی دستی و تنظیم وزنها دارد که میتواند پیچیده باشد و نیاز به بهروزرسانی مداوم دارد.
نحوه تنظیم در NGINX:
upstream backend {
server server1.example.com weight=3;
server server2.example.com weight=1;
server server3.example.com weight=2;
}
4. لود بالانسینگ کمترین تعداد اتصال وزندار (Weighted Least Connection)
زمان استفاده: بهترین گزینه برای محیطهای ترکیبی با بارهای کاری و ظرفیتهای متغیر.
چیست؟ ترکیبی از روش کمترین اتصال و راند رابین وزنی.
نکته منفی: مانند راند رابین وزنی، به پیکربندی و نظارت دقیق نیاز دارد تا وزنها به درستی تنظیم شوند.
نحوه تنظیم در NGINX:
upstream backend {
least_conn;
server server1.example.com weight=3;
server server2.example.com weight=1;
server server3.example.com weight=2;
}
5. لود بالانسینگ IP هش (IP Hash)
زمان استفاده: مناسب برای زمانی که میخواهید کاربران به یک سرور مشخص متصل بمانند.
چیست؟ از آدرس IP کاربر استفاده میکند تا تصمیم بگیرد درخواست به کدام سرور ارسال شود و اتصال پایدار ایجاد کند.
نکته منفی: میتواند منجر به توزیع نامتعادل شود اگر تعداد زیادی کاربر از محدوده IP مشابه استفاده کنند. همچنین مدیریت خرابی سرورها بهخوبی انجام نمیشود.
نحوه تنظیم در NGINX:
upstream backend {
ip_hash;
server server1.example.com;
server server2.example.com;
server server3.example.com;
}
6. لود بالانسینگ کمترین زمان پاسخدهی (Least Response Time)
زمان استفاده: مناسب برای زمانی که سرعت اولویت دارد.
چیست؟ درخواستها را به سروری ارسال میکند که سریعتر پاسخ میدهد. البته این قابلیت بهصورت پیشفرض در NGINX پشتیبانی نمیشود و نیاز به استفاده از ماژولهای شخص ثالث مانند Nginx Upstream Fair Module دارد.
نکته منفی: نیاز به نظارت و استفاده از ماژولهای شخص ثالث دارد که ممکن است پیچیدگی و نقاط ضعف بیشتری ایجاد کند.
7. لود بالانسینگ تصادفی (Random)
زمان استفاده: مناسب برای تست یا زمانی که میخواهید تنوع ایجاد کنید.
چیست؟ سرورها را بهصورت تصادفی برای هر درخواست انتخاب میکند. برای این روش نیز به ماژول شخص ثالث مانند Nginx Random Load Balancer Module نیاز دارید.
نکته منفی: میتواند منجر به توزیع نامتعادل بار شود و برای محیطهای تولیدی که عملکرد حیاتی است، مناسب نیست.
8. لود بالانسینگ کمترین پهنای باند (Least Bandwidth)
زمان استفاده: زمانی که استفاده از پهنای باند بین سرورها نابرابر است.
چیست؟ ترافیک را به سروری هدایت میکند که کمترین پهنای باند را استفاده کرده است. این روش نیاز به تنظیمات سفارشی مانند اسکریپتهای خاص یا ابزارهای نظارتی دارد.
نکته منفی: نیازمند نظارت و تنظیمات سفارشی است که میتواند پیچیده و منابعبر باشد.
ترفندهای دیگر لود بالانسینگ
- بر اساس مکان جغرافیایی: ترافیک را بر اساس موقعیت کاربران هدایت میکند و برای کاهش تأخیر مناسب است.
- هشینگ پایدار (Consistent Hashing): درخواستها را به همان سرور هدایت میکند، حتی اگر مجموعه سرورها تغییر کند. برای سیستمهای کشینگ ایدهآل است.
- لود بالانسینگ سفارشی: آن را با اسکریپتهای سفارشی یا استفاده از Lua در NGINX مطابق نیازهای خود طراحی کنید.
نتیجهگیری
انتخاب استراتژی مناسب لود بالانسینگ بستگی به نیازهای برنامه شما دارد. NGINX بسیار انعطافپذیر است و میتواند بسیاری از این استراتژیها را اجرا کند. چه از روشهای داخلی و چه از ماژولهای شخص ثالث استفاده کنید، راهحلی برای نیازهای شما وجود دارد. فقط مراقب نقاط ضعف احتمالی باشید و برنامهریزی مناسبی داشته باشید.