لود بالانسینگ (Load balancing) چیست؟
لود بالانسینگ (Load balancing) یک راهکار سختافزاری یا نرمافزاری یا ترکیبی از آنها است که ترافیک ورودی را بین چندین سرور با منابع آن تقسیم میکند تا عملکرد و قابلیت اطمینان یک سرویس یا برنامه را بهبود بخشد. با پیچیدهتر شدن زیرساختهای نرمافزاری سازمانها، متعادلکنندههای بار (Load Balancers) برای بهبود تجربه کاربری، تضمین عملکرد برنامهها و جلوگیری از قطعی سرویسدهی، به ابزاری حیاتی تبدیل شدهاند. این مقاله مفهوم و نحوه عملکرد لود بالانسینگ، انواع و الگوریتمهای آن را توضیح میدهد و همچنین به مزایا و معایب کلیدی آن میپردازد.
لود بالانسینگ یا تقسیم بار چیست؟
لود بالانسینگ روشی است که در آن حجم کار محاسباتی بین دو یا چند کامپیوتر تقسیم میشود. در اینترنت، لود بالانسینگ یا تقسیم بار اغلب برای توزیع ترافیک شبکه بین چندین سرور به کار میرود. این کار باعث کاهش فشار روی هر سرور یا شبکه و در نتیجه کارایی بیشتر آنها میشود. در نهایت، این امر سرعت عملکرد را بالا برده و تأخیر را کاهش میدهد. لود بالانسینگ برای عملکرد درست اکثر برنامههای مبتنی بر اینترنت ضروری است.
برای درک بهتر، اتوبانی را فرض کنید که دارای ۳ لاین است، اگر ۲ لاین بسته باشد و ماشینها فقط از یک لاین بتوانند عبور کنند، قطعا مدت زیادی طول خواهد کشید و ترافیک خواهد شد. اما اگر هر سه لاین باز باشد، زمان عبور ماشینها تا ۳ برابر افزایش خواهد یافت.
Load Balancing یا تقسیم بار هم همین کار را در شبکه انجام میدهد. با تقسیم درخواستهای کاربران بین چندین سرور، زمان انتظار کاربران به میزان قابل توجهی کاهش پیدا میکند. نتیجهی این کار، تجربهی کاربری بهتر خواهد بود.
لود بالانسینگ (Load balancing) چگونه انجام میشود؟
لود بالانسینگ توسط ابزاری به نام لود بالانسر (Load Balancer) یا متعادلکننده بار انجام میشود. این ابزار میتواند متعادل کننده بار سختافزاری یا نرمافزاری باشد. متعادلکننده بار سختافزاری نیاز به نصب یک دستگاه مخصوص دارد، اما متعادلکننده بار نرمافزاری میتواند روی یک سرور، ماشین مجازی یا حتی در محیط ابری هم اجرا شود. همچنین، شبکههای توزیع محتوا (CDN) هم معمولا قابلیتهای موازنهسازی بار را دارند.
وقتی درخواستی از سوی کاربر فرستاده میشود، متعادلکننده بار یا لود بالانسر، آن را به یک سرور مشخص اختصاص میدهد و این کار برای هر درخواست تکرار میشود. لود بالانسرها با استفاده از الگوریتمهای مختلفی مشخص میکنند که هر درخواست باید توسط کدام سرور پردازش شود. در ادامه این الگوریتمها را بررسی میکنیم.
آشنایی کامل با الگوریتمهای لود بالانسینگ
همانطور که گفتیم، الگوریتمها در تعیین سرور برای پردازش درخواستها نقش دارند. این الگوریتمها به دو دسته اصلی تقسیم میشوند: ثابت (Static) و پویا (Dynamic).
الگوریتمهای لود بالانسینگ ثابت
الگوریتمهای لود بالانسینگ ثابت، حجم کار را بدون در نظر گرفتن وضعیت لحظهای سیستم توزیع میکنند. یعنی، چنین متعادلکننده باری نمیداند کدام سرورها کند کار میکنند یا کدامها بیکار هستند. در عوض، کارها را بر اساس برنامهای از پیش تعیینشده تقسیم میکند. راهاندازی الگوریتمهای ثابت راحتتر است ولی احتمال ناکارآمدی وجود دارد.
برگردیم به مثال اتوبان! فرض کنید یک مامور راهنمایی و رانندگی در ابتدای راه است که وظیفهی تقسیم ماشینها را بین خطوط دارد. این مامور بدون اینکه توجه کند چه تعداد ماشین در هر خط وجود دارد، به ترتیب هر ماشین را به یک خط میفرستد.
اگر همهچیز عادی باشد مشکلی نیست و این روند به خوبی کار میکند. اما اگر در یک لاین تصادفی اتفا بیفتد، همه چیز در آن خط بهم میریزد.
الگوریتم لود بالانسینگ ثابت هم همین ریسک را دارد و ممکن است بعضی از سرورها بیش از حد شلوغ شوند. در زیر برخی از رایجترین الگوریتمهای ثابت را معرفی کردهایم:
- Round Robin: در این الگوریتم، ترافیک به صورت نوبتبندیشده و به شکل مساوی بین همهی سرورهای موجود در یک گروه توزیع میشود. این نوبتبندی میتواند به صورت تصادفی یا بر اساس یک ترتیب از پیش تعیینشده انجام شود.
- Weighted Round Robin: این الگوریتم با در نظر گرفتن توانایی سرورها، به آنها وزن اختصاص میدهد. سرورهایی که وزن بیشتری دارند، سهم بیشتری از درخواستهای کاربر را دریافت میکنند. به عنوان مثال، سرور قدرتمندتری که توانایی پردازش بالاتری دارد، وزن بیشتری دریافت میکند و در نتیجه درخواستهای بیشتری را نسبت به سرورهای ضعیفتر مدیریت میکند.
- Least Connection: هدف این الگوریتم، برقراری تعادل در میزان کاری است که سرورها انجام میدهند. بدین منظور، درخواستهای کاربران به سروری فرستاده میشود که در حال حاضر کمترین اتصال فعال را دارد.
- IP Hash: در این الگوریتم، سرور مقصد بر اساس آدرس IP کاربر انتخاب میشود. این روش تضمین میکند که درخواستهای ارسالی از یک کاربر خاص، همیشه به یک سرور مشخص هدایت شوند. این موضوع میتواند برای حفظ session کاربر در وبسایتها مفید باشد.
الگوریتمهای لود بالانسینگ پویا
الگوریتمهای لود بالانسینگ پویا، در نظر گرفتن وضعیت لحظهای هر سرور را در اولویت قرار میدهند. این وضعیت شامل میزان در دسترس بودن، حجم کاری در حال پردازش و سلامت کلی سرور میشود. این الگوریتمها میتوانند ترافیک را از سرورهای پرکار یا کند به سمت سرورهای کمکار هدایت کنند تا تقسیم بار همواره متعادل و کارآمد باشد. با این حال، راهاندازی لود بالانسینگ پویا کمی پیچیدهتر است. عوامل مختلفی روی در دسترس بودن سرور تاثیر میگذارند، از جمله سلامت و ظرفیت کلی هر سرور، حجم وظایف در حال توزیع و موارد دیگر.
برمیگردیم به مثال اتوبان! این بار فرض کنید که مامور راهنمایی و رانندگی، با دقت بیشتری کار خود را انجام میدهد. او به هر لاین نگاه میکند و تعداد ماشینها، سرعت آنها و نوع ماشین (سواری یا سنگین) را بررسی میکند و تصمیم میگیرد که ماشین بعدی در خطی قرار بگیرد که سریعتر پیش میرود. با این روش، تجربه بهتری برای همهی ماشینها رقم میخورد. اما، این روش برای مامور راهنمایی و رانندگی هم پیچیدگی و زحمت بیشتری دارد چون باید دائما هر لاین را زیر نظر داشته باشد و تصمیم بگیرد.
بنابراین، با الگوریتمهای پویا کار الگوریتم بیشتر خواهد شد اما خبری از شلوغی و ترافیک سرور نخواهد بود.
برخی از رایجترین الگوریتمهای پویا عبارتند از:
- Least Connection: این الگوریتم مشابه الگوریتم ایستا با همین نام عمل میکند. با این تفاوت که در اینجا، در زمان ارسال درخواست، سروری با کمترین تعداد اتصال «فعال» انتخاب میشود. این روش به توزیع عادلانهی کار در بین سرورها در لحظه کمک میکند.
- Round Robin with Weighted Response Time: در این روش، به سرورها بر اساس زمان پاسخگویی آنها وزن اختصاص داده میشود. سرورهایی که زمان پاسخدهی کوتاهتری دارند، وزن بیشتری دریافت میکنند و احتمال بیشتری دارد که درخواستهای کاربر را بپذیرند. بدین ترتیب، سرورهای سریعتر بار بیشتری از درخواستها را مدیریت میکنند و در نتیجه کارایی کلی سیستم افزایش مییابد.
- Least Bandwidth: این الگوریتم، درخواستها را به سرورهایی هدایت میکند که اخیرا کمترین میزان پهنای باند را مصرف کردهاند. این روش تضمین میکند که سرورهای با پهنای باند بیشتر، توانایی مدیریت درخواستهای بیشتری را داشته باشند و از بارگذاری بیش از حد روی سرورهای کمتوانتر جلوگیری میشود.
- Resource-based: این الگوریتم، بار را بر اساس منابع در دسترس روی هر سرور در یک زمان خاص توزیع میکند. روی هر سرور، نرمافزاری به نام agent نصب شده است که میزان استفاده از پردازنده و رم را اندازهگیری میکند. لود بالانسر قبل از ارسال ترافیک به سرور، وضعیت آن را از طریق این agent بررسی میکند. این روش باعث میشود تا سرورهایی با منابع بیشتر، بخش بیشتری از بار را بر عهده بگیرند.
حوزه های پرکاربرد در لود بالانسینگ
لود بالانسینگ اغلب برای برنامههای تحت وب استفاده میشود. لود بالانسینگ نرمافزاری و ابری به توزیع یکنواخت ترافیک اینترنت بین سرورهایی که در میزبانی برنامه نقش دارند، کمک میکند. بعضی از محصولات لود بالانسینگ ابری میتوانند ترافیک اینترنت را بین سرورهایی که در سراسر جهان پراکنده هستند، توزیع کنند. به این فرایند، لود بالانسینگ سرور جهانی یا GSLB (مخفف Global Server Load Balancing) گفته میشود.
تقسیم بار فقط برای وبسایتها کاربرد ندارد، بلکه به طور رایج در شبکههای محلی بزرگ هم استفاده میشود. مثلا شبکههای داخل یک دیتاسنتر یا یک مجتمع اداری بزرگ یا دیتاسنتر ابری.
در گذشته، برای این کار از سختافزارهای خاصی مانند کنترلکننده توزیع برنامه یا ADC (مخفف Application Delivery Controller) یا یک دستگاه اختصاصی برای تقسیم بار استفاده میکردند. اما حالا از نرمافزارهای لود بالانسینگ هم برای این منظور استفاده میشود.
لود بالانسینگ ابری چیست؟
لود بالانسینگ ابری فرایندی است که به توزیع یکنواخت حجم بار بین منابع پردازشی در یک محیط محاسبات ابری کمک میکند. این روش همچنین ترافیک شبکهای که به این منابع دسترسی پیدا میکند را به دقت متعادل میکند. سرویس لود بالانسینگ ابری، یک سرویس مدیریتشده، توزیعشده و مبتنی بر نرمافزار است. این سرویس قادر است از پروتکلهای مختلفی مانند TCP ،SSL و UDP پشتیبانی کند.
تقسیم بار ابری به شرکتها کمک میکند تا نسبت به فناوریهای قدیمی تقسیم بار، به سطوح عملکرد بالاتری با هزینههای پایینتر دست یابند. این کار باعث میشود تا سرعت پاسخگویی به درخواستها افزایش پیدا کند، از بروز ترافیک و کندی در سیستم جلوگیری شود و در نهایت، عملکرد کلی سیستم در محیط ابری بهبود یابد.
لود بالانسینگ ابری چگونه کار میکند؟
لود بالانسینگ ابری به سازمانها این امکان را میدهد تا با مسیریابی ترافیک ورودی بین چندین سرور، شبکه یا منابع دیگر، نیازهای کاری را برآورده کنند. این کار همزمان باعث بهبود عملکرد برنامه و محافظت در برابر اختلالات در سرویسدهی میشود. همچنین لود بالانسینگ ابری این امکان را فراهم میکند که حجم کاری بین دو یا چند منطقه جغرافیایی مختلف تقسیم شود.
بر خلاف لود بالانسینگ در سرور، که ترافیک را بین گروهی از سرورهای یک دیتاسنتر تقسیم میکند، لود بالانسینگ ابری معمولاً حجم کاری را بین سرورهای یک محیط ابری که توسط یک ارائهدهنده سرویس ابری مدیریت میشود، تقسیم میکند.
لود بالانسینگ ابری عمدتا با رویکردی مبتنی بر نرمافزار، ترافیک شبکه را بین منابع مختلف تقسیم میکند. این روش در مقایسه با لود بالانسینگ سختافزاری که بیشتر در مراکز داده سازمانی رایج است، برتری دارد. در لود بالانسینگ ابری، یک متعادلکننده بار (load balancer) ترافیک ورودی را دریافت کرده و بر اساس یک سیاست از پیش تعیینشده، آن درخواستها را به سمت سرورهای فعال هدایت میکند. همچنین، این سرویس تقسیم بار وضعیت سلامت هر سرور را پایش میکند تا اطمینان حاصل شود که آن منابع کاملا قابل استفاده هستند.
ویژگیهای لود بالانسینگ ابری
لود بالانسینگ ابری ویژگیهای مختلفی را ارائه میدهد که عبارتند از:
- آدرس آیپی انیکست (Single anycast IP address): لود بالانسینگ ابری از راهکاری به نام Anycast استفاده میکند. در این روش، یک آدرس IP واحد میتواند بین سرورهای مختلف به اشتراک گذاشته شود. این آدرس IP یک نمای بیرونی دارد که به شکل یک سرور واحد دیده میشود اما درخواستها را به سرورهای واقعی که در نقاط مختلف دنیا قرار دارند، هدایت میکند. چنین راهکاری به بازیابی ناشی از سانحه (Disaster Recovery) و نیز اطمینان از دسترسی همیشگی کمک میکند؛ چون اگر یک یا حتی چند سرور از دسترس خارج شوند، همچنان سرورهایی در دیگر نقاط جغرافیایی در دسترس هستند و میتوانند سرویسدهی به کاربر را ادامه دهند.
- تقسیم یکنواخت بار کاری (Workforce distribution): لود بالانسینگ ابری، ترافیک ورودی را بین چندین سرور یا منابع دیگر تقسیم میکند. این کار مانع از بارگذاری بیش از حد روی یک سرور خاص شده و عملکرد کلی سیستم را بهبود میبخشد.
- مقیاسپذیری خودکار (Seamless autoscaling): لود بالانسینگ ابری با قابلیت مقیاسپذیری خودکار، مدیریت ترافیکهای ناگهانی را آسان میکند. این سیستم میتواند با هدایت ترافیک به مناطق مختلف دنیا، افزایش ناگهانی و غیرمنتظره ترافیک را به صورت هوشمندانه مدیریت کند. مزیت دیگر مقیاسپذیری خودکار، حذف نیاز به گرمکردن اولیه (pre-warming) سرورها است. به این معنی که سیستم میتواند به سرعت از حالت بدون ترافیک به حالت ترافیک کامل تغییر ظرفیت دهد و نیازی نیست منتظر بماند تا ظرفیت ترافیک یک سرور به مرور پُر شود.
- مدیریت گواهینامه (Certificate management): بسیاری از سرویسهای لود بالانسینگ ابری، مدیریت یکپارچه گواهینامه را ارائه میدهند. این قابلیت، فرایند مدیریت گواهینامههای امنیتی SSL/TLS را برای برقراری اتصالات ایمن سادهتر میکند.
- نظارت و تحلیل (Monitoring and analytics): تقسیم بار ابری ابزارهای تحلیل و نظارت لحظهای را در اختیار شما قرار میدهد. با کمک این ابزارها، میتوانید عملکرد سرورها و نحوهی تقسیم ترافیک را پیگیری کنید و بر اساس دادههای به دست آمده، تنظیمات لازم را برای عملکرد بهینه سیستم انجام دهید.
مزایا و معایب استفاده از لود بالانسینگ
زماني که میخواهید از لود بالانسرها در شبکهی کامپیوتری خود استفاده کنید، درک کردن مزایا و معایب آنها اهمیت زیادی خواهد داشت. در اين بخش، ما به ليستي از مزایا و معایب مختلف لود بالانسرها اشاره میكنيم.
مزایای تقسیم بار (Load balancing)
با استفاده از دستگاه یا نرمافزار لود بالانسینگ، مزایای زیر حاصل میشود:
بهبود زمان در دسترس بودن (Uptime)
خراب شدن سرور یا Downtime آن میتواند باعث قطعی جدی در برنامه شود و در نتیجه دسترسی به آن را به طور کامل قطع کند. متعادلکننده بار با تشخیص خودکار مشکلات سرور و هدایت ترافیک به سرورهای در دسترس، مقاومت کل مجموعه سیستمها در برابر خرابی را بهبود میبخشد. این قابلیت اطمینان میدهد که حتی در صورت نیاز به تعمیر یا ارتقاء سرور، برنامه شما همچنان در دسترس کاربران باقی میماند. فرآیند تعمیر یا ارتقاء را میتوان با هدایت مجدد ترافیک به یک سرور جایگزین، بدون ایجاد هیچگونه اختلالی انجام داد.
به طور خلاصه، متعادلکننده بار به عنوان یک سوئیچ هوشمند عمل میکند و اطمینان میدهد که برنامه شما حتی در زمان وقوع مشکلات فنی، برای کاربران در دسترس باقی میماند.
مقیاس پذیری مطمئن برنامه ها
لود بالانسر مثل یک مدیر ترافیک هوشمند عمل میکند و کار تقسیم ترافیک شبکه بین چندین سرور را برعهده دارد. با لود بالانسینگ، دیگر نگران شلوغی بیش از حد روی یک سرور خاص نخواهید بود. این باعث میشود برنامههای شما بتوانند به راحتی از پس صدها هزار درخواست کاربر بر بیایند. متعادلکننده بار حتی میتواند با استفاده از الگوریتمهای پویا، پیشبینی ترافیک را انجام دهد و به شما این امکان را بدهد که در صورت نیاز، سرورها را اضافه یا کم کنید.
بهبود عملکرد شبکه و برنامه
لود بالانسرها با کاهش تأخیر شبکه و بهبود زمان پاسخ، کارایی برنامه را افزایش میدهند. آنها حجم کاری را به طور متناسب بین سرورها توزیع میکنند تا هر سرور بتواند با حداکثر ظرفیت کار کند. همچنین میتوانید توزیعکنندههای بار را برای هدایت مجدد درخواستهای کاربران به سرورهای نزدیکتر از نظر جغرافیایی پیکربندی کنید؛ که این امر به طور چشمگیری تأخیر برنامه را کاهش میدهد.
محافظت از برنامهها در برابر حملات شبکهای
لود بالانسرهای امروزی با داشتن پروتکلهای امنیتی شبکه داخلی، لایه حفاظتی دیگری را برای برنامههای وب ارائه میدهند. آنها ابزار مفیدی برای مبارزه با حملات دیداس (DDoS) یا محرومسازی از سرویس هستند؛ جایی که مهاجمین با ارسال درخواستهای همزمان بیشمار، برنامه یا سیستم را تحت فشار قرار داده و باعث خرابی سرور میشوند. حتی اگر نتوانید از چنین حملهای جلوگیری کنید، اما میتوانید به طور خودکار ترافیک مهاجم را برای کاهش تأثیر آن، به سرورهای پشتیبان مختلف هدایت کنید.
بیشتر بخوانید: حمله DDoS چیست؟
با پیکربندی مناسب، لود بالانسرها ترافیک را از طریق مجموعهای از فایروالهای بهم پیوسته برای امنیت بیشتر هدایت میکنند. متعادلکنندههای بار همچنین میتوانند ترافیک را کنترل کرده و بلافاصله محتوای مخرب را مسدود کنند.
ارائه تجربه کاربری (UX) بهتر
متعادلکننده بار برای شرکتهایی که وبسایتهای پربازدید یا اپلیکیشنهای پرمخاطب دارند، میتواند تجربه کاربری (UX) را به طور قابل توجهی بهبود ببخشد. متعادلکننده بار با بهینهسازی مصرف منابع، انتقال دادهها و زمان پاسخگویی باعث میشود بهترین سرویس ممکن به کاربران نهایی ارائه شود. در محیطهای با ترافیک بالا، لود بالانسر اجرای روان و دقیق درخواستهای کاربران را تضمین میکند و این یعنی کاربران مجبور نیستند با برنامهها یا منابع کند و بیپاسخ دست و پنجه نرم كنند.
افزایش انعطافپذیری عملیات IT
استفاده از چندین سرور که با متعادلکننده بار مدیریت میشوند، به مدیران IT انعطافپذیری بیشتری در کنترل ترافیک وبسایت میدهد. به عنوان مثال، آنها میتوانند بدون اینکه بر در دسترس بودن وبسایت تأثیری بگذارند، اقدام به نگهداری سرورها کنند. با داشتن یک سیستم نگهداری برنامهریزی شده، حداقل یک سرور همیشه در دسترس خواهد بود تا در زمان از دسترس خارج بودن سایر سرورها برای نگهداری، بار را به دوش بکشد. در محیط DevOps، جایی که تغییرات در برنامهها به صورت مکرر و روتین انجام میشود، متعادلکنندههای بار کار تیم عملیات را بسیار راحتتر میکنند.
اشتراک گذاری بار رمزگشایی SSL با سرور
در وبسایتهایی که از گواهی SSL استفاده میکنند، سرورها مسئولیت اضافهای برعهده دارند. درخواستها و همچنین هرگونه اطلاعات مرتبط با آنها، هنگام ارسال به یک وبسایت SSL، با رمزگذاری محافظت میشوند. سرورها این اطلاعات رمزگذاری شده را دریافت میکنند و وظیفه دارند قبل از شروع پردازش، آنها را رمزگشایی کنند. این کار زمان و قدرت پردازشی زیادی را مصرف میکند.
لود بالانسرها در چنین شرایطی بسیار مهم هستند. آنها قبل از ارسال اطلاعات به سرور وب، دادهها را رمزگشایی میکنند. این کار باعث میشود سرور بتواند به طور کامل روی ارزیابی ورودی و ارسال اطلاعات مرتبط تمرکز کند. در نتیجه، منابع پردازشی سرور حفظ شده و میتوان از آنها برای کارهای دیگر به نحو بهتری استفاده کرد.
معایب تقسیم بار (Load balancing)
درست است که متعادلکنندههای بار (Load Balancers) مزایای زیادی دارند و بدون آنها، با مصرف ناکارآمد منابع و عملکرد ضعیف برنامهها مواجه خواهید شد. اما در عین حال، اهمیت دارد که به چالشهایی که ممکن است هنگام استفاده از لود بالانسرها با آنها روبرو شوید نیز توجه داشته باشید.
محدودیتهای جغرافیایی در برخی الگوریتمهای لود بالانسینگ
برخی الگوریتمهای لود بالانسینگ برای مناطق بسیار کوچک طراحی شدهاند. این الگوریتمها مشکلاتی مانند قطع ارتباطات، متوقف شدن دسترسی به شبکه، فاصله افتادن بین اجزای توزیع شده و جدایی کاربر از منابع درخواستی را در نظر نمیگیرند. همچنین، نودهایی که در مکانهای دورافتاده قرار دارند، چالش بزرگی برای این الگوریتمها ایجاد میکنند، زیرا این پروتکلها برای کار در چنین محیطهایی ساخته نشدهاند.
احتمال تک نقطه خرابی (Single Point of Failure)
برخی از پروتکلهای لود بالانسینگ برای مدیریت نودهای پراکنده مناسب نیستند. این پروتکلها به یک گره مرکزی برای تصمیمگیری در مورد تقسیم ترافیک تکیه میکنند. در صورتی که گره مرکزی به هر دلیلی (هرچند بعید) از کار بیفتد، کل محیط محاسباتی با مشکل مواجه میشود. برای غلبه بر این چالش، راهحل این است که چندین گره در سیستم توزیع بار پیکربندی شوند تا بتوانند ترافیک را مدیریت و در مورد مسیریابی تصمیم بگیرند. به این ترتیب، اگر یک گره از کار بیفتد، گرههای دیگر همچنان به کار خود ادامه میدهند و از بروز اختلال گسترده جلوگیری میشود.
همگامسازی با پیشرفتهای تکنولوژی
با روی کار آمدن سرویس ابری با دسترسی در لحظه، اینترنت اشیاء (IoT)، اپلیکیشنهای موبایل با پهنای باند بالا و بلاکچین، انتظارات کاربران از برنامههای آنلاین به طور کامل تغییر کرده است. یک متعادلکننده بار قابل اعتماد باید بتواند خود را با نیازهای در حال تغییر مشتریان، توان پردازشی، ظرفیت ذخیرهسازی و عملکردهای سیستمی وفق دهد. با این حال، به روز رسانی مداوم الگوریتمهای لود بالانسینگ میتواند یک چالش باشد.
تاخیر ناشی از الگوریتمهای پیچیده
الگوریتمهای تقسیم بار، مثل خیلی از ابزارهای دیگر، یک تیغ دولبه هستند؛ یعنی در کنار مزایا، معایبی هم دارند. پیچیدگی الگوریتمهای خاص میتواند بر کارایی کلی یک سیستم تأثیر بگذارد. این پیچیدگی ممکن است منجر به تغییرات کوچک اما مهمی در تحمل خطا، زمان انتقال داده و سرعت پاسخگویی شود. صرفنظر از حجم کاری سرور، الگوریتمهای توزیع بار باید به گونهای تنظیم شوند که بهترین عملکرد ممکن را برای سیستم به ارمغان بیاورند.
بررسی انواع لود بالانسینگ
با توجه به اینکه متعادلکننده بار برای هدایت ترافیک، چه چیزی از درخواست کاربر بررسی میکند، میتوانیم لود بالانسینگ را به چند دسته تقسیم کنیم.
لود بالانسینگ اپلیکیشن
در برنامههای کاربردی مدرن، مزارع سرور متعددی وجود دارد که هر مزرعه شامل مجموعهای از سرورهای اختصاصی برای یک برنامه خاص است. برای هدایت ترافیک، متعادلکننده بار برنامه، محتوای درخواستها را تجزیه و تحلیل میکند. به عنوان مثال، فرض کنید یک فروشگاه اینترنتی دارید. متعادلکننده بار برنامه، درخواستهای مشاهده محصولات را به سمت سرورهایی هدایت میکند که شامل تصاویر و ویدیوها هستند، اما نیازی به برقراری اتصالات مداوم ندارند. از طرف دیگر، درخواستهای مربوط به سبد خرید به سمت سرورهایی هدایت میشوند که بتوانند اتصالات متعددی را تحمل کنند و جزئیات سبد خرید را برای مدت طولانیتری ذخیره کنند.
لود بالانسینگ شبکه
متعادلکننده بار شبکه (Network Load Balancer) مثل یک مدیر ترافیک هوشمند عمل میکند. این متعادلکنندهها با بررسی آدرسهای IP و سایر اطلاعات شبکه، ترافیک را به بهترین شکل ممکن هدایت میکنند. آنها میتوانند مبدأ ترافیک برنامه را ردیابی کنند و آدرس IP ثابتی را به چندین سرور اختصاص دهند. متعادلکنندههای بار شبکه، تقاضای سرور را از طریق الگوریتمهای توزیع بار ایستا و پویا، که در بخشهای قبلی توضیح داده شد، مدیریت میکنند.
لود بالانسینگ جهانی
لود بالانسینگ جهانی یا سراسری سرور (Global Server Load Balancing) روی چندین سرور پراکنده در نقاط مختلف جهان انجام میشود. برای مثال، یک شرکت ممکن است سرورهایی در چندین مرکز داده در کشورهای مختلف و همچنین روی سرویسهای ابری که توسط شرکتهای ثالث مدیریت میشوند، داشته باشد. در چنین شرایطی، از متعادلکنندهای بار محلی برای مدیریت بار برنامه در یک منطقه یا ناحیه خاص استفاده میشود. این لود بالانسرها با هدایت ترافیک به یک سرور محلی، تأخیر را کاهش میدهند. اما در صورت خرابی سرور، ممکن است نیاز به هدایت مجدد ترافیک به سایتها یا سرورهای موجود در یک منطقه دیگر باشد، و اینجاست که لود بالانسینگ جهانی وارد عمل میشود. یکی از کاربردهای CDN، استفاده از لود بالانسینگ برای توزیع ترافیک شبکه بین سرورهایی در نقاط جغرافیایی مختلف است.
بیشتر بخوانید: CDN چیست؟
لود بالانسینگ DNS
در لود بالانسینگ DNS، شما دامنه خود را برای مسیریابی درخواستهای شبکه در یک مجموعه از منابع روی دامنهتان پیکربندی میکنید. یک دامنه میتواند به یک وبسایت، یک سیستم ایمیل، یک سرور پرینتر یا سرویس دیگری که از طریق اینترنت در دسترس قرار میگیرد، اشاره داشته باشد. لود بالانسینگ DNS برای حفظ در دسترس بودن برنامه و متعادل کردن ترافیک شبکه در یک مجموعه منابع تقسیم شده در سطح جهانی مفید است.
انواع تکنولوژیهای لود بالانسینگ
متعادلکنندههای بار در یک دستهبندی دیگر و بهطور کلی دو نوع دارند:
متعادلکننده بار سختافزاری
متعادلکننده بار سختافزاری یک ابزار فیزیکی است که به طور ایمن میتواند چندین گیگابایت ترافیک را بین صدها سرور مختلف پردازش و هدایت مجدد کند. شما میتوانید این لود بالانسر را در دیتاسنتر خود جایگذاری کنید و چندین متعادلکننده بار مجازی بسازید، یا حتی به صورت دستی آن را مدیریت کنید.
متعادلکننده بار نرمافزاری
متعادلکننده بار نرمافزاری (Software-based load balancer) برنامههایی هستند که تمام قابلیتهای تقسیم بار را انجام میدهند. این متعادلکنندهها را میتوان روی هر سروری نصب کرد یا از طریق یک سرویس ثالث مدیریت کرد. برخی از سیستمهای شبکه ممکن است از قابلیتهای لود بالانسینگ نرمافزاری داخلی خود بهرهمند باشند.
مقایسه لود بالانسر نرمافزاری و سختافزاری
متعادلکنندههای بار سختافزاری از سختافزاهایی بهره میبرندکه به طور ویژه برای این کار طراحی شدهاند. به همین دلیل کارایی بالایی را ارائه میدهند و توانایی مدیریت ترافیک به صورت قابل اعتماد را دارند. این لود بالانسرها نیاز به نصب در کنار تجهیزات زیرساخت دارند.
با این حال نیازمند سرمایهگذاری اولیه، پیکربندی و نگهداری مستمر هستند. همچنین، ممکن است از ظرفیت کامل آنها استفاده نکنید، به خصوص اگر فقط برای مدیریت ترافیک اوج خریداری شده باشند. اگر حجم ترافیک به طور ناگهانی از ظرفیت فعلی دستگاه فراتر رود، تا زمانی که بتوانید یک متعادلکننده بار دیگر خریداری و راهاندازی کنید، بر کاربران تأثیر منفی خواهد گذاشت.
در مقابل، متعادلکنندههای بار نرمافزاری بسیار انعطافپذیرتر هستند و میتوان از آنها در محیطهای ابری یا مجازی استفاده کرد. علاوه بر این به راحتی میتوان ظرفیت آنها را افزایش یا کاهش داد. همچنین هزینه راهاندازی، مدیریت و استفاده از آنها در طول زمان کمتر است.
البته لودبالانسرهای نرمافزاری هم فاقد نقاط ضعف نیستند. کارایی آنها به سختافزار سروری که روی آن نصب میشوند وابسته است. علاوه بر این برخی از لودبالانسرهای نرمافزاری، میزان بالایی از منابع را مصرف میکنند.
لود بالانسرها چه نوع ترافیکی را میتوانند مدیریت کنند؟
ترافیکی که یک لودبالانسر مدیریت میکند، معمولا در مدل شبکه OSI، به دو دسته تقسیم میشود:
- ترافیک لایه انتقال یا لایه ۴ (Transport Layer)
- ترافیک لایه اپلیکیشن یا لایه ۷ (Application Layer)
درون این لایهها، ترافیک از پروتکلهای مختلفی استفاده میکند. برخی از شناختهشدهترین پروتکلها عبارتند از:
TCP/IP (پروتکل کنترل انتقال / پروتکل اینترنت): این پروتکل در لایه انتقال شبکه قرار دارد و نحوه شکستن اطلاعات به بستههای کوچکتر، ارسال آنها بین دستگاهها و اطمینان از رسیدن صحیح این بستهها را تعریف میکند. به عبارت دیگر، TCP/IP تضمین میکند که اطلاعات به ترتیب صحیح و بدون خطا به مقصد برسند.
HTTP (پروتکل انتقال ابرمتن): این پروتکل در لایه اپلیکیشن قرار دارد و نحوهی برقراری ارتباط بین مرورگرهای وب و سرورها را مشخص میکند. چندین نسخه از HTTP وجود دارد که مهمترین آنها HTTP/2 ،HTTP/1.1 و HTTP/3 هستند. هر نسخه تلاش میکند تا مشکلات نسخههای قبلی را حل کند. جدیدترین نسخه، یعنی HTTP/3، مفهوم جریان را به پروتکل حمل و نقل جدیدتری به نام QUIC (که در ادامه توضیح داده میشود) منتقل کرده است.
UDP (پروتکل دیتاگرام کاربر): این پروتکل نیز در لایه انتقال شبکه قرار دارد، اما برخلاف TCP، برقراری اتصال دائمیِ پیش از ارسال داده را الزامی نمیداند. UDP سبک و سریعتر از TCP است، اما قابلیتهایی مانند تصحیح خطا یا ارسال مجدد بستههای از دسترفته را ندارد.
QUIC (اتصالات سریع اینترنت بر بستر UDP): این پروتکل حمل و نقل جدید، روی پروتکل UDP ساخته شده است. QUIC با ترکیب ویژگیهای مثبت TCP و UDP، امکان انتقال اطلاعات به صورت قابل اعتماد، مرتب و ایمن را فراهم میکند و در عین حال تأخیر را کاهش داده و عملکرد را بهبود میبخشد.
برخی پروتکلهای دیگر مدیریت شده توسط لود بالانسرها شامل موارد زیر هستند:
- DNS (مخفف Domain Name System)
- SIP (مخفف Session Initiation Protocol)
- RTSP (مخفف Real-Time Streaming Protocol)
- RADIUS (مخففف Remote Authentication Dial-In User Service)
سخن پایانی
لود بالانسرها، یکی از ارکان ضروری شبکههای سازمانی، ابری و دیتاسنترها هستند. آنها باعث استفاده کارآمد از منابع شبکه، بهبود تجربه کاربری و کاهش قطعی سرویسها میشوند. بدون نرمافزار یا سختافزار لود بالانسینگ، به احتمال زیاد عملکرد برنامهها با مشکل مواجه خواهد شد و حتی امنیت سیستمها ممکن است با مخاطراتی مواجه شود.
بطور کلی، لود بالانسینگ یک ابزار ضروری برای هر شبکه مرتبط با برنامهها یا وبسایتهای با ترافیک بالا است. با استفاده از لود بالانسینگ میتوانید کارایی، قابلیت اطمینان، امنیت و مقیاسپذیری برنامهها و وبسایتهای خود را افزایش دهید.