تعادل بار (Load Balancing)
در این مقاله به بررسی تعادل بار و یا همان Load Balancing پرداخته می شود.
Load در واقع به معنی میزان منابع مصرف شده Host , Server و یا سیستم میزبان می باشد که این منابع می توانند منابع سخت افزاری مانند پردازنده و رم سرور و یا منابع شبکه ای مانند پهنای باند و همچنین منابع نرم افزاری مانند وب سرور باشند. هر یک از این موارد دارای توان مشخصی هستند که دریافت درخواست های بیش از حد توان، موجب عدم توانایی در پاسخ گویی به درخواست ها می شود که میزان فشار موجود بر روی این منابع با مفهوم Load مشخص می گردد.
Balance به معنی به تعادل رساندن میزان مصرف منابع سرور با مدیریت درخواست ها می باشد، پس همانطور که مشخص شد برای راه اندازی مفهوم تعادل بار، حداقل نیاز به دو سرور مجزا خواهد بود که در این شرایط سرویس دیگری که با نام Load Balancer شناخته می شود می تواند درخواست هایی که به سرور ارسال می شود را مدیریت نماید.
که با انجام این عمل از بروز Single Point Failure جلوگیری می شود.
با راه اندازی این متد زمانی که درگیری سرور ها و مصرف منابع Application بالا می رود، میتوان به راحتی برحسب نیاز، سرورهای جدید را به Server Pool اضافه کرد. به محض اضافه شدن سرور های جدید Request ها و ترافیک ها برروی آن ها نیز توضیع خواهد شد.
Load Balancing به کمک یک سرویس با هویت Load Balancer و حداقل دو سرور میزبان انجام می گردد. که نحوه میزبانی سنتی در شکل بالا نمایش داده شده است که به صورت مستقیم و تنها با یک سرور میزبانی می شود.
وظایف Load Balancer
- توزیع درخواست های Client و یا ترافیک شبکه به صورت موثر بین سرورها
- اطمینان از پایداری سرویس، کیفیت و اعتماد، با فرستادن درخواست Client به سمت سرورهای فعال و در دسترس
- ارائه انعطاف پذیری در حذف و یا اضافه کردن سرور در صورت نیاز
نحوه انجام Load Balancing
روش کار در تعادل بار به این صورت می باشد که درخواست هایی مشابه باز کردن یک 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 یکی از نرم افزار هایی می باشد که برای این امر استفاده می شود.
Server Load-Balancing را می توان به روش های متفاوتی در شبکه پیاده سازی نمود که در ادامه نمونه ای از آنها آورده شده است:
- DNS-Based Load balancing
یکی از قدیمی ترین روش ها برای توزیع و توازن بار بر روی سرورها می باشد که در آن برای چندین سرور از یک نام ( A Record) و چندین IP استفاده می شود که به صورت Round-Robin انجام می گردد.
- IP Anycast
یکی از روش های ساده برای ایجاد حالت تعادل بار، به صورت موقعیت فیزیکی سرور ها در شبکه های WAN می باشد. در این روش درخواست های کاربران با تکنیک های Routing به نزدیک ترین سرور به لحاظ موقیت جغرافیایی ارسال می گردد. در این روش یک IP یکسان از نقاط مختلف توسط روترها اعلان و درنتیجه درخواست کاربران به آدرسی ارسال می گردد که به لحاظ Metric ی به آن نزدیکتر است.
- Server-based load-balancing
توازن بار توسط خود سرورها انجام می گردد که در یک کلاستر نرم افزاری خاص راه اندازی شده و با الگوریتم های متفاوت عمل Load-Balancing را انجام می دهد. Microsoft NLB و Microsoft CLB نمونه ای از این حالت می باشند.
- Network-based load-balancing
توازن و توزیع بار بر روی سرور ها می تواند بر اساس مشخصات شبکه ای نیز انجام گیرد. در این روش از یک سخت افزار برای ایجاد حالت ها و الگوریتم های Load Balancing استفاده می شود که نسبت به روش های دیگر دارای میزان بازدهی بالاتری می باشد. برای مثال می توان از سخت افزار ACE و یا F5 استفاده نمود. امروزه Network Based Load Balancing به صورت مجازی (Virtual Appliance) بر روی سرور های UCS شرکت سیسکو راه اندازی می شود که نمونه ای از آن Citrix NetScaler 1000v می باشد.
Load Balance لایه 4
هدایت ترافیک بر اساس داده های دریافتی از لایه های Transport و Network مانند ادرس IP و پورت های TCP.
Load Balance لایه 7
این نوع Load Balancing بسیار پیشرفته تر و قدرتمند تر از لایه چهارم می باشد و به عنوان Content Switching یا جابجایی محتوا هم عنوان می شود که تصمیم های مسیریابی درخواست ها را بر اساس پروتکل های لایه هفتم و خواص این پروتکل ها انجام می دهد، برای مثال از طریق HTTP Header، آدرس URL و Session ID ای SSL و حتی داده های مربوط به HTML، تقسیم داده ها و درخواست ها بر روی سرورها انجام می شود.
(Global server load balancing (GSLB
پیشرفته ترین نوع تعادل بار هست که ترکیبی از قابلیت های لایه چهارم و لایه هفتم می باشد و امکاناتی به Load Balancer می دهد که حتی سرورهایی که در مناطق جغرافیایی متفاوت قرار دارند را نیز بتوان درLoad Balancer قرار داد و درخواست ها را برایشان ارسال کرد.
نحوه تصمیم گیری برای انتخاب سرور مناسب
هر Virtual Server دارای مجموعه Cluster اختصاصی از سرویس ها می باشد که این مجموعه تشکیل دهنده لیستی از امکانات Host ها می باشد. به علاوه فناوری مانیتورینگ سلامتی سرورها، لیست مذکور را به نحوی ویرایش کرده که تنها Host های در دسترس و آماده به پاسخ گویی در آن وجود داشته داشته باشند. Load balancer با استفاده از این لیست، Host مورد نظر خود را برای ارسال ارتباط جدید انتخاب می کند.
البته انتخاب دقیق هر یک از سرورها، بسته به الگوریتم هر Load balancer و Cluster متفاوت می باشد. یکی از ساده ترین این الگوریتم ها، Round-robin نام دارد. در این نوع از الگوریتم، Load balancer به سادگی از ابتدای لیست مذکور کار خود را آغاز کرده و اولین درخواست را به اولین سرور موجود در لیست ارسال می کند و سپس درخواست بعدی را به سرور دوم ارجاع می دهد.
این روند ادامه خواهد داشت تا Load balancer به انتهای لیست برسد و سپس مجددا به ابتدای لیست بازگشته و دوباره درخواست ها را به اولین سرور در لیست و به ترتیب بعدی ارسال خواهد کرد. این الگوریتم بسیار ساده و قابل پیش بینی می باشد که در آن میزان بار و حجم تمامی درخواست ها مشابه یا یکسان فرض می شود که البته این فرضیه همیشه صحیح نیست. الگوریتم های پیشرفته تر، آیتم های دیگری همچون تعداد ارتباطات فعلی سرور، راندمان هر سرور و حتی میزان پاسخ گویی در دنیای واقعی برای ترافیک فعلی را برای انتخاب بهترین Host در نظر می گیرند.
الگوریتم های مورد استفاده در Load Balance
- The Least Connection Method
در این حالت سرویسی که کمترین ارتباط و استفاده مورد نظر را دارد مورد استفاده قرار خواهد گرفت.
- The Round Robin Method
در این روش لیستی به صورت گردشی از مجموعه سرویس ها در گردش خواهد بود و در زمان دریافت درخواست بر اساس لیست به آن درخواست پاسخ می دهد و سپس آن سرویس را به اخر لیست ارسال خواهد کرد و سرویس های دیگر را به مراتب بالاتر ارتقا خواهد داد.
- The Least Response Time Method
در این حالت سرویسی انتخاب خواهد شد که زیاد شلوغ نبوده و زمان پاسخگویی آن بالا باشد.
- The Least Bandwidth Method
در این حالت میزان آزاد بودن پهنای باند مبنای انتخاب سرویس خواهد بود.
- The Least Packets Method
در این حالت سرویس انتخابی، سرویسی خواهد بود که کمترین بسته دریافتی را داشته باشد.
- The Custom Load Method
در این حالت سرویسی انتخاب خواهد شد که دارای کمترین تراکنش جاری باشد .
استفاده از تعادل بار برای انتخاب بهترین سرویس در دسترس برای ارسال درخواست کاربران، تنها نیمی از راه می باشد. پس از برقراری ارتباط، Load balancer باید همواره رد ترافیک ارسالی از کاربر را حفظ کرده و سایر درخواست های او را نیز به همان سرور قبلی load balance نماید.
در واقع دو مشکل کلی پس از Load balance شدن ارتباط کاربر با سرور همچنان بر سر راه باقی می ماند:
- نگهداری ارتباط (Connection maintenance)
- تداوم (Persistence)
روند تراکنش load balancing
- Client سعی به برقراری ارتباط با سرور از طریق Load balancer می نماید.
- Load balancer ارتباط را تقبل کرده و بعد از تصمیم گیری در مورد اینکه کدام یک از سرورها برای دریافت ترافیک مناسب تر است، آدرس IP مقصد (و در برخی از موارد پورت) را در هدر بسته دریافتی مطابق با سرور و سرویس انتخابی تغییر می دهد. قابل ذکر است که IP مبدا تغییری پیدا نمی کند.
- Host یا سرور، ترافیک دریافتی خود را تقبل و پس از پردازش اطلاعات، در خواست را به مبدا اصلی یعنی Client از طریق مسیر پیش فرض یعنی Load balancer پس می فرستد.
- Load balancer، بسته در حال بازگشت از سرور را از ترافیک جدا کرده و اکنون آدرس IP مبدا (و همچنین پورت) را در هدر بسته، مطابق با آدرس IP و پورت Virtual server تغییر داده و مجددا بسته را به سمت Client ارسال می کند.
- Client بسته را دریافت می کند و عملیات پردازش ادامه می یابد.
چند نکته
- در نظر Client، او درخواست های خود را تنها به یک Virtual server ارسال کرده و پاسخ آن ها را نیز فقط از همان سرور دریافت می کند.
- وجود سرویس NAT. زمانی که Load balancer آدرس IP مقصد در بسته ارسالی از سمت Client را با IP سرور انتخابی خود برای دریافت اطلاعات تغییر می دهد، NAT عملیات خود را آغاز می کند و آدرس ها را به صورت متناسب ترجمه می کند.
- همچنین زمانی که بسته در حال بازگشت به سمت Client می باشد،NAT مجددا دست به کار شده و آدرس IP را به صورت مناسب تغییر می دهد تا کلاینت متوجه تغییر IP نشود.