در این مقاله به بررسی تعادل بار و یا همان Load Balancing پرداخته می شود.
Load در واقع به معنی میزان منابع مصرف شده Host , Server و یا سیستم میزبان می باشد که این منابع می توانند منابع سخت افزاری مانند پردازنده و رم سرور و یا منابع شبکه ای مانند پهنای باند و همچنین منابع نرم افزاری مانند وب سرور باشند. هر یک از این موارد دارای توان مشخصی هستند که دریافت درخواست های بیش از حد توان، موجب عدم توانایی در پاسخ گویی به درخواست ها می شود که میزان فشار موجود بر روی این منابع با مفهوم Load مشخص می گردد.
Balance به معنی به تعادل رساندن میزان مصرف منابع سرور با مدیریت درخواست ها می باشد، پس همانطور که مشخص شد برای راه اندازی مفهوم تعادل بار، حداقل نیاز به دو سرور مجزا خواهد بود که در این شرایط سرویس دیگری که با نام Load Balancer شناخته می شود می تواند درخواست هایی که به سرور ارسال می شود را مدیریت نماید.
که با انجام این عمل از بروز Single Point Failure جلوگیری می شود.
با راه اندازی این متد زمانی که درگیری سرور ها و مصرف منابع Application بالا می رود، میتوان به راحتی برحسب نیاز، سرورهای جدید را به Server Pool اضافه کرد. به محض اضافه شدن سرور های جدید Request ها و ترافیک ها برروی آن ها نیز توضیع خواهد شد.
Load Balancing به کمک یک سرویس با هویت Load Balancer و حداقل دو سرور میزبان انجام می گردد. که نحوه میزبانی سنتی در شکل بالا نمایش داده شده است که به صورت مستقیم و تنها با یک سرور میزبانی می شود.
روش کار در تعادل بار به این صورت می باشد که درخواست هایی مشابه باز کردن یک Web Application و یا مشاهده یک سایت از سمت کاربران ابتدا توسط Load Balancer دریافت می شود و سپس هر یک از این درخواست ها با توجه به میزان بار (Load) و تعداد سرورها، برای آنها ارسال می گردد که این امر باعث می شود که حتی در مواردی که درخواست های بسیار زیادی به سمت یک سایت یا Web Application ارسال می گردد، به صورت متعادل بین سرورهای میزبان تقسیم شوند و دیگر شاهد قطعی و کندی سرورها نخواهیم بود.
زمانی که یک Application Server غیر قابل دسترس می شود، Load balancer تمامی درخواست های مربوط به Application را به یکی دیگر از سرورهای فعال ارجاع می دهد.
برای اینکه حالت های پیشرفته تری از تعادل بار را داشته باشیم و مطمئن شویم که درخواست های کاربران به درستی به Application هایی که در سرورها نصب شدند می رسد، Load Balancer ها از مکانیزمی به نام ADC که مخفف Application Delivery Controller می باشد، استفاده می کنند که باعث بالا رفتن کارایی، امنیت و انعطاف پذیری در سرویس دهی application های تحت وب درون سرورها می شود. در واقع ADC فقط یک Load Balancer نیست، این مکانیزم می تواند پلتفرمی برای اطمینان از دریافت شدن و رسیدن بسته های اطلاعاتی در شبکه ها، بالا بردن سرویس های تحت وب در application های تحت وب و موبایل و همچنین امن ترین و مطمئن ترین روش، جهت دسترس پذیری سرویس ها در نقاط جغرافیایی مختلف را فراهم می کند، در ADC محل قرار گیری سرور و زمان و نحوه دسترسی تفاوت زیادی در نحوه سرویس دهی نخواهند داشت.
لازم به ذکر است که ایجاد حالت Load Balancing به دو صورت نرم افزاری و سخت افزاری امکان پذیر می باشد که در حالت سخت افزاری بازدهی بهتری حاصل خواهد شد.
برای مثال در حالت نرم افزاری می توان به قابلیت (NLB (Network Load Balancing و در حالت سخت افزاری می توان دو برند معروف (ACE (Application Control Engine از سوی شرکت سیسکو و F5 را نام برد.
در مقابل نرم افزار های Load Balancing بر روی تمام سیستم ها قابل اجرا است. به این ترتیب هزینه استفاده از آن کمتر و نسبت به گسترش پروژه منعطف تر می باشد. برای مثال NGINX Plus یکی از نرم افزار هایی می باشد که برای این امر استفاده می شود.
یکی از قدیمی ترین روش ها برای توزیع و توازن بار بر روی سرورها می باشد که در آن برای چندین سرور از یک نام ( A Record) و چندین IP استفاده می شود که به صورت Round-Robin انجام می گردد.
یکی از روش های ساده برای ایجاد حالت تعادل بار، به صورت موقعیت فیزیکی سرور ها در شبکه های WAN می باشد. در این روش درخواست های کاربران با تکنیک های Routing به نزدیک ترین سرور به لحاظ موقیت جغرافیایی ارسال می گردد. در این روش یک IP یکسان از نقاط مختلف توسط روترها اعلان و درنتیجه درخواست کاربران به آدرسی ارسال می گردد که به لحاظ Metric ی به آن نزدیکتر است.
توازن بار توسط خود سرورها انجام می گردد که در یک کلاستر نرم افزاری خاص راه اندازی شده و با الگوریتم های متفاوت عمل Load-Balancing را انجام می دهد. Microsoft NLB و Microsoft CLB نمونه ای از این حالت می باشند.
توازن و توزیع بار بر روی سرور ها می تواند بر اساس مشخصات شبکه ای نیز انجام گیرد. در این روش از یک سخت افزار برای ایجاد حالت ها و الگوریتم های Load Balancing استفاده می شود که نسبت به روش های دیگر دارای میزان بازدهی بالاتری می باشد. برای مثال می توان از سخت افزار ACE و یا F5 استفاده نمود. امروزه Network Based Load Balancing به صورت مجازی (Virtual Appliance) بر روی سرور های UCS شرکت سیسکو راه اندازی می شود که نمونه ای از آن Citrix NetScaler 1000v می باشد.
هدایت ترافیک بر اساس داده های دریافتی از لایه های Transport و Network مانند ادرس IP و پورت های TCP.
این نوع Load Balancing بسیار پیشرفته تر و قدرتمند تر از لایه چهارم می باشد و به عنوان Content Switching یا جابجایی محتوا هم عنوان می شود که تصمیم های مسیریابی درخواست ها را بر اساس پروتکل های لایه هفتم و خواص این پروتکل ها انجام می دهد، برای مثال از طریق HTTP Header، آدرس URL و Session ID ای SSL و حتی داده های مربوط به HTML، تقسیم داده ها و درخواست ها بر روی سرورها انجام می شود.
پیشرفته ترین نوع تعادل بار هست که ترکیبی از قابلیت های لایه چهارم و لایه هفتم می باشد و امکاناتی به Load Balancer می دهد که حتی سرورهایی که در مناطق جغرافیایی متفاوت قرار دارند را نیز بتوان درLoad Balancer قرار داد و درخواست ها را برایشان ارسال کرد.
هر Virtual Server دارای مجموعه Cluster اختصاصی از سرویس ها می باشد که این مجموعه تشکیل دهنده لیستی از امکانات Host ها می باشد. به علاوه فناوری مانیتورینگ سلامتی سرورها، لیست مذکور را به نحوی ویرایش کرده که تنها Host های در دسترس و آماده به پاسخ گویی در آن وجود داشته داشته باشند. Load balancer با استفاده از این لیست، Host مورد نظر خود را برای ارسال ارتباط جدید انتخاب می کند.
البته انتخاب دقیق هر یک از سرورها، بسته به الگوریتم هر Load balancer و Cluster متفاوت می باشد. یکی از ساده ترین این الگوریتم ها، Round-robin نام دارد. در این نوع از الگوریتم، Load balancer به سادگی از ابتدای لیست مذکور کار خود را آغاز کرده و اولین درخواست را به اولین سرور موجود در لیست ارسال می کند و سپس درخواست بعدی را به سرور دوم ارجاع می دهد.
این روند ادامه خواهد داشت تا Load balancer به انتهای لیست برسد و سپس مجددا به ابتدای لیست بازگشته و دوباره درخواست ها را به اولین سرور در لیست و به ترتیب بعدی ارسال خواهد کرد. این الگوریتم بسیار ساده و قابل پیش بینی می باشد که در آن میزان بار و حجم تمامی درخواست ها مشابه یا یکسان فرض می شود که البته این فرضیه همیشه صحیح نیست. الگوریتم های پیشرفته تر، آیتم های دیگری همچون تعداد ارتباطات فعلی سرور، راندمان هر سرور و حتی میزان پاسخ گویی در دنیای واقعی برای ترافیک فعلی را برای انتخاب بهترین Host در نظر می گیرند.
در این حالت سرویسی که کمترین ارتباط و استفاده مورد نظر را دارد مورد استفاده قرار خواهد گرفت.
در این روش لیستی به صورت گردشی از مجموعه سرویس ها در گردش خواهد بود و در زمان دریافت درخواست بر اساس لیست به آن درخواست پاسخ می دهد و سپس آن سرویس را به اخر لیست ارسال خواهد کرد و سرویس های دیگر را به مراتب بالاتر ارتقا خواهد داد.
در این حالت سرویسی انتخاب خواهد شد که زیاد شلوغ نبوده و زمان پاسخگویی آن بالا باشد.
در این حالت میزان آزاد بودن پهنای باند مبنای انتخاب سرویس خواهد بود.
در این حالت سرویس انتخابی، سرویسی خواهد بود که کمترین بسته دریافتی را داشته باشد.
در این حالت سرویسی انتخاب خواهد شد که دارای کمترین تراکنش جاری باشد .
استفاده از تعادل بار برای انتخاب بهترین سرویس در دسترس برای ارسال درخواست کاربران، تنها نیمی از راه می باشد. پس از برقراری ارتباط، Load balancer باید همواره رد ترافیک ارسالی از کاربر را حفظ کرده و سایر درخواست های او را نیز به همان سرور قبلی load balance نماید.
در واقع دو مشکل کلی پس از Load balance شدن ارتباط کاربر با سرور همچنان بر سر راه باقی می ماند: