Load balancing چیست و Load balancer چگونه کار می کند؟
در شرکت های بزرگ که دارای چندین سرور هستند، امکان دارد بار ترافیک تنها بر روی یک سرور باشد و سرورهای دیگر فعالیت زیادی نداشته باشند. در چنین شرایطی راه حل استفاده از load balancer است. اصطلاحی که برای این تکنولوژی استفاده می شود لود بالانسینگ نام دارد. حتما از خود می پرسید Load balancing چیست ؟ عجله نکنید با ما همراه باشید تا به تعریف Load balancing برسید.
Load balancing چیست ؟
همانطور که در بالا بطور مختصر اشاره شد، فناوری Load balancing یا متعادل نمودن بار ترافیکی ، یکی از عوامل پایه در تبادل اطلاعات در فضای مجازی امروزی به شمار می رود. اما این تکنولوژی متاسفانه در حال حاضر در نظر اکثر افراد ناآشنا بوده و در بسیاری از موارد نیز به عنوان یک اصل در مهندسی شبکه در نظر گرفته نمی شود.
در اصلاح لود بالانسینگ load به معنی بار یا میزان فشار روی منابع و balance به معنی به تعادل رساندن میزان مصرف این بار است.
در این مقاله از گروه تولید محتوای ایران هاست ( ارائه دهندهی سرور مجازی کانادا ) قصد داریم تا با نگاهی دقیق تر به تکنیک Load balancing شما را نیز قادر به بهره مندی بیشتری از این فناوری نماییم.
load balancer چیست و چگونه کار می کند؟
اگر بخواهیم به این پرسش پاسخ دهیم که لود بالانسر چیست ؟ باید ابتدا از تاریخچه Load balancing بگوییم.
Load balancing در ابتدا در فرم سخت افزارهای متعادل کننده بار ترافیکی بر پایه شبکه، نقش خود را در دنیای فناوری اطلاعات آغاز کرد و هم اکنون یکی از اجزای حیاتی در متدهای Application Delivery Controller (ADC) می باشد.
پس از استفاده ابتدایی از Load balancing در شبکه ها، دومین مصرف قابل توجه آن ها به عنوان دستگاه های پیشرفته تر، لود بالانسر تحت شبکه بود که در واقع نقش پدر متدهای ADC امروزه را بازی می کردند. از آن جا که این دستگاه ها به صورت مستقل و خارج از سرور برنامه ها (Application server) قادر به کار بودند، می توانستند با استفاده از تکنیک های Straightforward شبکه، وظیفه تقسیم بار را به درستی انجام دهند.
این دستگاه ها در اصل، آدرسی مجازی از سرورهای مورد نظر را به دنیای خارجی نمایش می دادند و با اینکار، زمانی که کاربران تقاضای ارتباط با سرور را ارسال می کردند، می توانستند به صورت هوشمند و خودکار از طریق بهترین و کم ترافیک ترین مسیر موجود به سرور مربوطه خود متصل شوند. در این عملیات سرورهای NAT یا Network address translation نیز نقش حیاتی را ایفا می نمایند.
اهمیت لود بالانسینگ در چیست؟
هدف اصلی از به تعدل رساندن بار ترافیکی جلوگیری از بارگیری بیش از حد هر سرور و احتمالاً خرابی آن است. به عبارت دیگر ، load balancing دسترسی به سرویس را بهبود می بخشد و به جلوگیری از خرابی کمک می کند.
اصطلاحات رایج در Load balancing چیست؟
حال که میدانید لود بالانسر چیست، به معرفی برخی از اصطلاحات رایج در فناوری لود بالانسینگ خواهیم پرداخت:
Node, Host, Member, Server
لود بالانسر مفاهیمی همانند زیر را در خود جای داده اند که البته معنی لغوی هریک از آن ها با کاربرد آن در این تکنولوژی متفاوت است.
- load balancer Member
- load balancer Host
- load balancer Node
- load balancer Server
در مجموع می توان گفت که تمامی این دستگاه ها سعی در بیان دو مفهوم کلی دارند.
۱- load balancer Server یا load balancer Node
load balancer Server یا load balancer Node به معنای یک سرور فیزیکی که دریافت کننده ترافیک Load balancer را اشاره می کند. این مفهوم با آدرس IP آن سرور نیز برابر بوده که در غیاب لود بالانسر نیز، نام سرور به این IP ترجمه می شود. در این مقاله علاوه بر اصطلاحات فوق ممکن است این سرور را load balancer Host نیز بنامیم.
۲- load balancer Member
load balancer Member متاسفانه به اشتباه توسط برخی از افراد Node هم تلقی می شود. یک عضو یا member معمولا تعریف دقیقتری از Server یا Node را دارا بوده و شامل یک پورت TCP نیز می گردد که یک برنامه توسط آن ارتباط خود را با شبکه برقرار کرده و اطلاعات را دریافت می کند.
برای مثال یک سرور با نام www.example.com را فرض کنیم که نام آن به IP آدرس ۱۷۲.۱۶.۱.۱۰ ترجمه می شود، این سرور بیان کننده مفهوم Server یا Node می باشد. این سرور می تواند دارای برنامه تحت وبی باشد که بر روی پورت ۸۰ اجرا شده و در واقع عضو یا Member آدرس ۱۷۲.۱۶.۱.۱۰ است. بنابراین Member شامل تعریفی از پورت یکی از برنامه ها به انضمام IP آدرس سرور فیزیکی می باشد. در ادامه این مقاله ممکن است این مفهوم را به عنوان Service نیز درنظر بگیریم.
دلایل انواع گوناگون تعاریف load balancer چیست ؟
متمایز نمودن سرور فیزیکی و سرویس های کاربردی اجرا شده بر روی آن، به لود بالانسر اجازه می دهد تا به جای ارتباط با سخت افزار سرور، به صورت مستقیم با برنامه های اجرا شده بر روی سرور که هوشمند تر نیز هستند، متصل شود. برای مثال ممکن است که سروری با آدرس ۱۷۲.۱۶.۱.۱۰ دارای سرویس های کاربری متعددی مانند پروتکل انتقال فایل, HTTP, DNS و … باشد. با تعریف هر یک از این سرویس ها به صورت منحصر بفرد (یعنی به ترتیب ۱۷۲.۱۶.۱.۱۰:۲۱، ۱۷۲.۱۶.۱.۱۰:۸۰، ۱۷۲.۱۶.۱.۱۰:۵۳ برای هریک از ۳ پروتکل فوق الذکر)، Load balancer میتواند برای هر یک از آن ها پردازش مستقلی برای تقسیم ترافیک و مانیتورینگ را ارایه دهد.
Cluster, Farm, Pool
عملیات Load balancing به طور خلاصه به سازمان ها و شرکت ها اجازه می دهد تا ترافیک اطلاعاتی ورودی به مجموعه خود را بین چند مقصد back-end تقسیم کرده و از انباشه شدن تمام بار بر روی یک سرور جلوگیری کنند. کلمات Cluster, Pool و یا Farm به معنای مجموعه ای از چند سرویس مشابه بر روی یک یا تعدادی از Host ها می باشند.
برای مثال مجموعه تمام سرویس هایی که به سازمان مورد نظر، قابلیت ارایه خدمات پردازش Web page ها را می دهد، Cluster صفحات وب نامیده می شود. همچنین تمامی سرویس هایی که خدمات تجارت الکترونیک را برای سازمان فراهم می سازند، Cluster به نام E-commerce نامیده می شود. نکته کلیدی در Cluster ها این است که دارای سرویس هایی مشابه هستند که نحوه کار با تمام آن ها به صورت واحد راحت تر از تنظیم تک تک آن ها است. به شما پیشنهاد می شود برای کسب اطلاعات در حوزه کلاستر چیست مقاله ما را مطالعه نمایید.
Virtual Server
هرچند که هنوز اختلافاتی بر سر نحوه استفاده دقیق از لغت Server یا Virtual (سرور یا سرور مجازی) وجود دارد، اما این امر از اهمیت بالایی برخوردار است که همواره دقت کنیم که همانند لغت Service، Virtual Server نیز باید به همراه پورت برنامه مورد نظر و همچنین IP سرور فیزیکی استفاده شود.
با جمع بندی تمامی مفاهیم فوق با یکدیگر، می توانیم نکات اولیه ای را در مفهوم کلی Load balancing در دست داشته باشیم. Load balancer ها در واقع Virtual server ها را به دنیای بیرونی ارایه می کنند. Virtual server ها (سرورهای مجازی) به مجموعه Cluster از سرویس های مختلف اشاره می کنند که هر یک از آن ها می تواند در یک یا چند سرور فیزیکی قرار داشته باشند.
انواع load balancing
- Load Balancing L4: توزیع ترافیک در شبکه با استفاده از پروتکلهای لایه چهارم
- Load Balancing L7: توزیع ترافیک در شبکه با استفاده از پروتکلهای لایه هفتم
- Global Server Load Balancing یا GSLB: توزیع ترافیک شبکه بین سرورها از ترکیب پروتکلهای لایه چهارم و لایه هفتم
مبانی Load balancing یا تقسیم بار در شبکه
پس از اینکه با مفهوم Load balancing آشنا شدید، در این قسمت قصد داریم تا یک تراکنش ساده Load balancing را مورد بررسی قرار دهیم. همانطور که در تصاویر بالا نیز مشاهده کردید، Load balancer معمولا بین یک Client و Host قرار می گیرد. که در چنین شرایطی Host ارایه دهنده سرویس بوده و Client نیز قصد استفاده از آن سرویس را دارد.
البته همانند سایر موارد، این شرایط به عنوان یک قانون ثابت وجود ندارد، اما می توان آن را به عنوان یک نمونه عملی مناسب در نظر گرفت. فرض می کنیم که لود بالانسر به نحوی تنظیم شده که با یک سرور مجازی ارتباط داشته باشد که این سرور به Cluster دیگری تشکیل شده از دو سرویس اشاره می کند. در این سناریو، دارا بودن یک مسیر برگشت به لود بالانسر از سرور Host رایج است، زیرا با این کار ترافیک اطلاعات در راه برگشت به Client نیز پردازش می شوند.
مراحل تراکنش load balancing یا متعادل نمودن بار ترافیکی
بنابر گفته های پیشین، یک تراکنش ساده load balancing به شرح زیر می باشد :
- یک Client سعی به برقراری ارتباط با سرور از طریق Load balancer می نماید.
- Load balancers ارتباط را تقبل کرده و بعد از تصمیم گیری در مورد اینکه کدام یک از سرورها برای دریافت ترافیک مناسب تر است، آدرس IP مقصد (و در برخی از موارد پورت) را در هدر بسته دریافتی مطابق با سرور و سرویس انتخابی تغییر می دهد. قابل ذکر است که IP مبدا Client تغییری پیدا نمی کند.
- Host یا سرور، ترافیک دریافتی خود را تقبل کرده و پس از پردازش اطلاعات، در خواست را به مبدا اصلی خود یعنی Client از طریق مسیر پیش فرض یعنی لود بالانسر پس می فرستد.
- لود بالانسر بسته در حال بازگشت از سرور را از بین ترافیک جدا کرده و اکنون آدرس IP مبدا (و همچنین پورت) را در هدر بسته، مطابق با آدرس IP و پورت Virtual server تغییر داده و مجددا بسته را به سمت Client ارسال می کند.
- Client بسته را دریافت می کند و عملیات پردازش ادامه می یابد.
این یک مثال بسیار ساده از این پردازش بود که البته دارای نکات کلیدی نیز می باشد که قابل توجه هستند.
نکته اول اینکه، در نظر Client، او درخواست های خود را تنها به یک Virtual server ارسال کرده و پاسخ آن ها را نیز فقط از همان سرور دریافت کند.
نکته دوم، وجود سرویس NAT در این سناریو می باشد. زمانی که Load balancer آدرس IP مقصد را در بسته ارسالی از Client با IP سرور انتخابی خود برای دریافت اطلاعات تغییر می دهد، NAT عمل کرده و آدرس ها را به صورت متناسب ترجمه می کند. همچنین زمانی که بسته در حال بازگشت به Clientاست،NAT مجددا دست به کار شده و آدرس IP را به صورت مناسب تغییر می دهد تا کلاینت متوجه تغییر IP نشود.
[irp posts=”۶۴۸۹″ name=”NAT چیست و چگونه کار می کند؟”]
نحوه تصمیم گیری برای انتخاب سرور در Load balancing
معمولا در این مرحله دو سوال اصلی وجود دارد؟ سوال ابتدایی اینکه، لود بالانسر چگونه سرور مناسب را برای دریافت بسته Client انتخاب می کند؟ و سوال دوم این که اگر سرور انتخابی لود بالانسر دچار مشکل شده باشد، چه اتفاقی خواهد افتاد؟
اگر سرور انتخابی لود بالانسر دچار مشکل شده باشد، چه اتفاقی خواهد افتاد؟
ابتدا سوال دوم را مورد بررسی قرار می دهیم. در حالت پیش فرض، در صورتی که سرور انتخاب شده دچار مشکل شده باشد و پاسخ گوی درخواست های Client نباشد، ارتباط پس از گذشت مدت مشخصی به پایان رسیده و قطع خواهد شد.
در چنین حالتی Client نیز از خرابی سرور مطلع خواهد شد که طبعا هیچ سازمانی از چنین وضعیتی خشنود نخواهد شد. به همین دلیل اکثر دستگاه های لود بالانسر معتبر دارای تکنولوژی مانیتورینگ وضعیت Health سرور ها نیز هستند که با استفاده از آن قادرند تا قبل از انتخاب هر سرور و ارسال درخواست ها به آن، از وضعیت کارکرد آن مطلع شوند و درخواست ها را تنها به سرورهای سالم ارسال نمایند.
سطوح مختلفی از مانیتورینگ وضعیت سلامت سرورها وجود دارند که هر یک از آن ها به صورت مجزا به موارد خاصی از سرور تمرکز دارند. مبتدی ترین سرویس های مانیتورینگ، در بازه های زمانی مشخص به سادگی سرورهای مورد نظر خود را Ping نموده و در صورتی که پاسخی از سمت سرور دریافت نکنند، آن را Down شده در نظر گرفته و دیگر درخواست های خود را به آن ارسال نمی کنند.
اما متاسفانه در برخی از اوقات حتی با اینکه سرور به درخواست PING پاسخ می دهد، اما سرویس های اجرا شده بر روی آن به درستی کار نمی کنند. بنابراین برای اطلاع دقیق از کارکرد سرور، نیاز به سطوح بالاتری از مانیتورینگ وجود دارد. چنین سطوحی از مانیتورینگ نه تنها باعث به وجود آمدن اعتماد بیشتری نسبت به نتایج بدست آمده از مانیتورینگ می شوند، بلکه Load balancers نیز این امکان را می یابد تا بین سرویس های مختلف روی یک Host تمایز قائل شود.
بنابراین Load balancer تشخیص می دهد، با اینکه ممکن است یکی از سرویس های یک سرور از دسترس خارج شده باشد، اما سایر سرویس های آن قابل اعتماد بوده و می توانند به درخواست ها به درستی پاسخ دهند. این امر به تقسیم بار ترافیک در شبکه کمک بسزایی می کند.
نحوه تصمیم گیری در انتخاب سرور در Load balancing چیست ؟
هر Virtual Server دارای مجموعه Cluster اختصاصی از سرویس ها می باشد که این مجموعه تشکیل دهنده لیستی از امکانات Host ها می باشد. به علاوه فناوری مانیتورینگ سلامتی سرورها، لیست مذکور را به نحوی ویرایش کرده که تنها Host های در دسترس و آماده به پاسخ گویی در آن وجود داشته داشته باشند. Load balancer با استفاده از این لیست، Host مورد نظر خود را برای ارسال ارتباط جدید انتخاب می کند.
البته انتخاب دقیق هر یک از سرورها، بسته به الگوریتم هر Load balancer و Cluster متفاوت می باشد. یکی از ساده ترین این الگوریتم ها، Round-robin نام دارد. در این نوع از الگوریتم، لود بالانسر به سادگی از ابتدای لیست مذکور کار خود را آغاز کرده و اولین درخواست را به اولین سرور موجود در لیست ارسال می کند و سپس درخواست بعدی را به سرور دوم ارجاع می دهد.
این روند ادامه خواهد داشت تا Load balancer به انتهای لیست برسد، و سپس مجددا به ابتدای لیست بازگشته و دوباره درخواست ها را به اولین سرور در لیست و به ترتیب بعدی ارسال خواهد کرد. این الگوریتم بسیار ساده و قابل پیش بینی می باشد که در آن میزان بار و حجم تمامی درخواست ها مشابه یا یکسان فرض می شود که البته این فرضیه همیشه صحیح نیست.
الگوریتم های پیشرفته تر، آیتم های دیگری همچون تعداد ارتباطات فعلی سرور، راندمان هر سرور، و حتی میزان پاسخ گویی در دنیای واقعی برای ترافیک فعلی را برای انتخاب بهترین Host در نظر می گیرند.
سیستم های Load balancing پیشرفته همچنین قادرند تا اطلاعات بدست آمده از مانیتونیگ سلامتی سرور ها را با الگوریتم های خود ترکیب کرده تا در نهایت به درک کاملی برای تصمیم گیری دست یابند. برای مثال فرض کنید یکی از Host ها میزبانی چندین سرویس مهم را بر عهده دارد که تمامی آن سرویس ها برای پاسخ به درخواست کاربران ضروری می باشد.
یکی از رایج ترین نمونه های این چنینی، سرور های e-commerce می باشند که یک سرور ارایه دهنده سرویس HTTP استاندارد (برروی پورت ۸۰) و همچنین سرویس HTTPS (برروی پورت ۴۴۳) می باشد. در بسیاری از مواقع برای مواردی از جمله امنیت، ممکن است مایل نباشید تا در صورت از دسترس خارج شدن یکی از این سرویس ها، درخواست کاربر به سرور مذکور ارسال شود.
در واقع در صورتی که سرویس HTTPS در سرور با مشکل مواجه شود، Load balancer باید سرویس HTTP را هم از دسترس خارج شده در نظر بگیرد . این قابلیت در سناریوهای مشابه HTTP از اهمیت بسیار بالایی برخوردار می باشد.
مشکلات load balance چیست؟
استفاده از Load balancing برای انتخاب بهترین سرویس در دسترس برای ارسال درخواست کاربران، تنها نیمی از راه می باشد. پس از برقراری ارتباط، Load balancer باید همواره رد ترافیک ارسالی از کاربر را حفظ کرده و سایر درخواست های او را نیز به همان سرور قبلی load balance نماید. در واقع دو مشکل کلی پس از Load balance شدن ارتباط کاربر با سرور همچنان بر سر راه باقی می ماند : نگهداری ارتباط (Connection maintenance) و تداوم (Persistence)
نگهداری ارتباط (Connection Maintenance)
در صورتی که کاربر قصد استفاده از ارتباطات TCP بلند مدتی مانند Telnet, FTP و … را داشته باشد که نباید به صورت ناگهانی قطع شوند، آنگاه Load balancer باید اطمینان حاصل کند که درخواست ها و بسته های ارسالی پیاپی کاربر به یک سرور یکسان رسیده و اشتباها به سرویس ها و Host های در دسترس دیگر ارسال نشوند. این امر نگهداری ارتباط یا Connection Maintenance نام دارد و دارای دو نکته اساسی می باشد:
- توانایی حفظ مسیر ارتباط باز فعلی و سرویس Host متعلق به آن
- قابلیت مانیتور ارتباط مذکور تا با بسته شدن اتصال، جدول Connection ها نیز بروز شده و لود بالانسر از قطع ارتباط آگاه شود.
تداوم (Persistence)
کاربران ممکن است به صورت بسیار رایجی برای انجام یک کار مشخص، از چندین ارتباط کوتاه مدت TCP از جمله HTTP استفاده کنند. در برخی موارد همانند مرور وب به صورت استاندارد، دریافت هر یک از درخواست های کاربر توسط سرورهای مختلف از اهمیتی برخوردار نیست و مشکلی در روند کاری وی ایجاد نمی کند.
اما در برخی دیگر از موارد مانند استفاده از XML ها، e-commerce، سبد های خرید، HTTPS و … بسیار حیاتی است که تمامی درخواست های ارسال شده از یک کاربر فقط توسط سرویس یک Host ثابت در Back-end پاسخ داده شد و بسته های انتقالی بین سرورهای دیگر Load balance نشوند. این مفهوم معنی persistance یا تداوم در اتصال یا وابستگی به سرور است.
راه های مختلفی برای حفظ تداوم در ارتباطات وجود دارند.برای مثال در اکثر تراکنش های HTTP مدرن امروزی، سرور مربوطه می تواند درخواست “Keep-alive” را برای ارتباطات خاص خود دهد.با اینکار، ارتباطات پیاپی کوتاه، تبدیل به یک ارتباط با عمر بلندتر می شوند و همانند سایر درخواست ها بین سرور و کاربر جابجا می شوند.
با وجود مفید بودن چنین روش هایی برای حفظ تداوم در ارتباطات کوتاه، نگاه داشتن تعداد زیادی از ارتباطات با عمر طولانی تر باعث مصرف بسیار زیادی از منابع سرورها و به طبع کندی سرعت می شوند. از این رو Load balancer ها از مکانیزم های دیگری برای ایجاد و حفظ تداوم ارتباطات استفاده می کنند.
روش های حفظ تداوم در load balancer ها
یکی از ساده ترین روش های حفظ تداوم در چنین ارتباطاتی، ذخیره آدرس منبع می باشد. در این روش می توان به سادگی با ذخیره آدرس IP منبع بسته ارسالی و Host پاسخ دهنده به آن ، تمامی تراکنش های بعد از آن را نیز به همان Host هدایت نمود. این روش همچنین راه مناسبی برای Load balance ارتباطات وابسته به Application می باشد، زیرا به راحتی می توان شماره پورت برنامه مربوطه را نیز در بسته های ارسالی و دریافتی حفظ نمود.
اما با گسترش استفاده از نرم افزارهای Proxy در بین کاربران و همچنین سازمان های بزرگ، این روش حفظ تداوم در عمل بلا استفاده شده است. زیرا Proxy server ها می توانند بسیاری از کاربران را در پس یک IP واحد مخفی سازند که این امر باعث می شود درخواست های هیچ یک از آن ها نیز Load balance نشود.
لذا تکنولوژی های پیشرفته Load balancing امروزی قادرند تا بسته ها (Packet) دریافتی از هر کاربر را شکافته و جداول Persistence خود را با توجه به محتویات آن ها بروز نمایند. این امر این دستگاه ها را قادر می سازد تا به اطلاعات با ارزشی از جمله نام کاربری و پسورد هر کاربر هم برای حفظ تداوم اتصال او با سرور دسترسی داشته باشند.
پیشنهاد می شود برای اشنایی با Network Load Balancing مقاله NLB چیست را بخوانید.
سلام خسته نباشید
من یکم تو فهم فرق بین Ingress و Load balancer مشکل دارم. ممنون میشم اگر کسی میتونه کمکم کنه!
سلام
ممنون
پیاده سازی لطفا ؟
با سلام، متاسفانه متوجه منظورتون نشدم.
با سلام
ممنون میشم اگه منابع معتبر و جدید در این زمینه را برایم ایمیل کنید
و یا پایان نامه
با تشکر از مطلب جامع و خوب شما
دوست گرامی متاسفاته امکان ایمیل مطالب وجود ندارد. می توانید مطالب را در بلاگ جستجو نموده و یا منتظر مطالب جدید تر در آینده باشید.
سلام پایان نامه ی من تو زمینه ی load balancing هستش یک سری اطلاعات تو این زمینه نیاز دارم . میتونم رو کمکتون حساب کنم لطفاً جواب بدید.
با تشکر
در این زمینه و زمینه های مشابه، مقالاتی در بلاگ موجود می باشد و می توانید جستجو و استفاده نمایید، امیدواریم راهگشا باشند.
مطالب خوبی در زمینه رایانش ابری در بلاگ شما بود
اما متاسفانه هیچکدام در زمینه موازنه بار نبودند
امیدواریم بتوانیم در این خصص نیز بزودی مطالبی قرار دهیم. همچنین از مطالب مفید شما بازدیدکنندگان گرامی استقبال میشود. با تشکر