Load balancing چیست؟

فناوری Load balancing یا  متعادل نمودن بار ترافیکی یکی از عوامل پایه در تبادل اطلاعات در فضای مجازی امروزی به شمار می رود. اما این تکنولوژی متاسفانه در حال حاضر در نظر اکثر افراد ناآشنا بوده و در بسیاری از موارد نیز به عنوان یک اصل در مهندسی شبکه در نظر گرفته نمی شود.برای بهره مندی از تمامی امکانات و مزیت های این فناوری پرسود، متخصصان شبکه و فناوری اطلاعات باید از تمامی مفاهیم پایه ای و جزئی آن اطلاع کسب کنند. در این مقاله قصد داریم تا با نگاهی دقیق تر به تکنیک Load balancing  شما را نیز قادر به بهره مندی بیشتری از این فناوری نماییم

Load balancing در ابتدا در فرم سخت افزارهای متعادل کننده بار ترافیکی بر پایه شبکه، نقش خود را در دنیای فناوری اطلاعات آغاز کرد و هم اکنون یکی از اجزای حیاتی در متدهای Application Delivery Controller (ADC) می باشد. پس از استفاده ابتدایی از Load balancing در شبکه ها، دومین مصرف قابل توجه آن ها به عنوان دستگاه های پیشرفته تر Load balancer تحت شبکه بود که در واقع نقش پدر متدهای ADC امروزه را بازی می کردند. از آن جا که این دستگاه ها به صورت مستقل و خارج از سرور برنامه ها (Application server) قادر به کار بودند، می توانستند با استفاده از تکنیک های Straightforward شبکه، وظیفه تقسیم بار را به درستی انجام دهند. این دستگاه ها در اصل، آدرسی مجازی از سرورهای مورد نظر را به دنیای خارجی نمایش می دادند، با اینکار، زمانی که کاربران تقاضای ارتباط با سرور را ارسال می کردند، می توانستند به صورت هوشمند و خودکار از طریق بهترین و کم ترافیک ترین مسیر موجود به سرور مربوطه خود متصل شوند. در این عملیات سرورهای NAT یا Network address translation نیز نقش حیاتی را ایفا می نمایند.

تصویر 1 : عوامل تشکیل دهنده یک Load balancing تحت شبکه

تصویر ۱ : عوامل تشکیل دهنده یک Load balancing تحت شبکه

برخی از لغت های رایج در اصطلاحات Load balancing

Node, Host, Member, Server

اکثر دستگاه های Load balancer مفاهیمی از جمله Node، Host، Member یا Server را در خود جای داده اند که البته معنی لغوی هریک از آن ها با کاربرد آن در این تکنولوژی متفاوت است. در مجموع می توان گفت که تمامی این دستگاه ها سعی در بیان دو مفهوم کلی دارند. مورد اول که معمولا به عنوان Server یا Node نامیده شده و به معنای یک سرور فیزیکی که دریافت کننده ترافیک از Load balancer است، اشاره می کند. این مفهوم با آدرس IP آن سرور نیز برابر بوده که در غیاب Load balancer نیز، نام سرور به این IP ترجمه می شود. در این مقاله علاوه بر اصطلاحات فوق ممکن است این سرور را Host نیز بنامیم.

دومین مفهوم Member است که متاسفانه به اشتباه توسط برخی از افراد Node هم تلقی می شود. یک عضو یا member معمولا تعریف دقیقتری از Server یا Node را دارا بوده و شامل یک پورت TCP نیز می گردد که یک برنامه توسط آن ارتباط خود را با شبکه برقرار کرده و اطلاعات را دریافت می کند. برای مثال یک سرور با نام www.example.com را فرض کنیم که نام آن به IP آدرس ۱۷۲٫۱۶٫۱٫۱۰ ترجمه می شود، این سرور بیان کننده مفهوم Server یا Node می باشد. این سرور می تواند دارای برنامه تحت وبی باشد که بر روی پورت ۸۰ اجرا شده و در واقع عضو یا Member آدرس ۱۷۲٫۱۶٫۱٫۱۰ است. بنابراین Member شامل تعریفی از پورت یکی از برنامه ها به انضمام IP آدرس سرور فیزیکی می باشد. در ادامه این مقاله ممکن است این مفهوم را به عنوان Service نیز درنظر بگیریم.

ممکن است از خود بپرسید که دلیل این همه پیچیدگی در تعاریف چیست؟ زیرا متمایز نمودن سرور فیزیکی و سرویس های کاربردی اجرا شده بر روی آن، به Load balancer اجازه می دهد تا به جای ارتباط با سخت افزار سرور، به صورت مستقیم با برنامه های اجرا شده بر روی سرور که هوشمند تر نیز هستند، متصل شود. برای مثال ممکن است که سروری با آدرس ۱۷۲٫۱۶٫۱٫۱۰ دارای سرویس های کاربری متعددی مانند FTP, 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 از سرویس های مختلف اشاره می کنند که هر یک از آن ها می تواند در یک یا چند سرور فیزیکی قرار داشته باشند.

تصویر 2 : Load balancing تشکیل شده از مفاهیمی مانند Virtual server، Cluster، Service و Host می باشد.

تصویر ۲ : Load balancing تشکیل شده از مفاهیمی مانند Virtual server، Cluster، Service و Host می باشد.

گرچه ممکن است تصویر ۲ نمایش دهنده نحوه چیدمان یک Load balancing واقعی نباشد، اما به خوبی موارد حیاتی و ساختاری این پردازش را به تصویر کشیده است.

 

مبانی Load balancing یا تقسیم بار در شبکه

در این قسمت قصد داریم تا یک تراکنش ساده Load balancing را مورد بررسی قرار دهیم. همانطور که در تصاویر بالا نیز مشاهده کردید، Load balancer معمولا بین یک Client و Host قرار می گیرد. که در چنین شرایطی Host ارایه دهنده سرویسی بوده و Client نیز قصد استفاده از آن سرویس را دارد. البته همانند سایر موارد، این شرایط به عنوان یک قانون ثابت وجود ندارد، اما می توان آن را به عنوان یک نمونه عملی مناسب در نظر گرفت. فرض می کنیم که Load balancer به نحوی تنظیم شده که با یک سرور مجازی ارتباط داشته باشد که این سرور به Cluster دیگری تشکیل شده از دو سرویس اشاره می کند. در این سناریو، دارا بودن یک مسیر برگشت به Load balancer از سرور Host رایج است، زیرا با این کار ترافیک اطلاعات در راه برگشت به Client نیز پردازش می شوند.

بنابر گفته های پیشین، یک تراکنش ساده load balancing به شرح زیر می باشد :

۱ – یک Client سعی به برقراری ارتباط با سرور از طریق Load balancer می نماید.

۲ – Load balancer ارتباط را تقبل کرده و بعد از تصمیم گیری در مورد اینکه کدام یک از سرورها برای دریافت ترافیک مناسب تر است، آدرس IP مقصد (و در برخی از موارد پورت) را در هدر بسته دریافتی مطابق با سرور و سرویس انتخابی تغییر می دهد. قابل ذکر است که IP مبدا Client تغییری پیدا نمی کند.

۳ – Host یا سرور، ترافیک دریافتی خود را تقبل کرده و پس از پردازش اطلاعات، در خواست را به مبدا اصلی خود یعنی Client از طریق مسیر پیش فرض یعنی Load balancer پس می فرستد.

۴ – Load balancer بسته در حال بازگشت از سرور را از بین ترافیک جدا کرده و اکنون آدرس IP مبدا (و همچنین پورت) را در هدر بسته، مطابق با آدرس IP و پورت Virtual server تغییر داده و مجددا بسته را به سمت Client ارسال می کند.

۵ – Client بسته را دریافت می کند و عملیات پردازش ادامه می یابد.

تصویر 3 : نمونه ای از یک تراکنش ساده Load balancing

تصویر ۳ : نمونه ای از یک تراکنش ساده Load balancing

این یک مثال بسیار ساده از این پردازش بود که البته دارای نکات کلیدی نیز می باشد که قابل توجه هستند.  نکته اول اینکه، در نظر Client، او درخواست های خود را تنها به یک Virtual server ارسال کرده و پاسخ آن ها را نیز فقط از همان سرور دریافت کند. نکته دوم، وجود سرویس NAT در این سناریو می باشد. زمانی که Load balancer آدرس IP مقصد را در بسته ارسالی از Client با IP سرور انتخابی خود برای دریافت اطلاعات تغییر می دهد، NAT عمل کرده و آدرس ها را به صورت متناسب ترجمه می کند. همچنین زمانی که بسته در حال بازگشت به Clientاست،NAT مجددا دست به کار شده و آدرس IP را به صورت مناسب تغییر می دهد تا کلاینت متوجه تغییر IP نشود.

نحوه تصمیم گیری برای انتخاب سرور در Load balancing

معمولا در این مرحله دو سوال اصلی وجود دارد؟ سوال ابتدایی اینکه، Load balancer چگونه سرور مناسب را برای دریافت بسته Client انتخاب می کند؟ و سوال دوم این که اگر سرور انتخابی Load balancer دچار مشکل شده باشد، چه اتفاقی خواهد افتاد؟

ابتدا سوال دوم را مورد بررسی قرار می دهیم. در حالت پیش فرض، در صورتی که سرور انتخاب شده دچار مشکل شده باشد و پاسخ گوی درخواست های Client  نباشد، ارتباط پس از گذشت مدت مشخصی به پایان رسیده و قطع خواهد شد. در چنین حالتی Client نیز از خرابی سرور مطلع خواهد شد که طبعا هیچ سازمانی از چنین وضعیتی خشنود نخواهد شد. به همین دلیل اکثر دستگاه های Load balancer معتبر دارای تکنولوژی مانیتورینگ وضعیت Health سرور ها نیز هستند که با استفاده از آن قادرند تا قبل از انتخاب هر سرور و ارسال درخواست ها به آن، از وضعیت کارکرد آن مطلع شوند و درخواست ها را تنها به سرورهای سالم ارسال نمایند.

سطوح مختلفی از مانیتورینگ وضعیت سلامت سرورها وجود دارند که هر یک از آن ها به صورت مجزا به موارد خاصی از سرور تمرکز دارند. مبتدی ترین سرویس های مانیتورینگ، در بازه های زمانی مشخص به سادگی سرورهای مورد نظر خود را Ping نموده و در صورتی که پاسخی از سمت سرور دریافت نکنند، آن را Down  شده در نظر گرفته و دیگر درخواست های خود را به آن ارسال نمی کنند.

اما متاسفانه در برخی از اوقات حتی با اینکه سرور به درخواست PING پاسخ می دهد، اما سرویس های اجرا شده بر روی آن به درستی کار نمی کنند. بنابراین برای اطلاع دقیق از کارکرد سرور، نیاز به سطوح بالاتری از مانیتورینگ وجود دارد. چنین سطوح بالاتری از مانیتورینگ نه تنها باعث به وجود آمدن اعتماد بیشتری نسبت به نتایج بدست آمده از مانیتورینگ می شوند، بلکه Load balancer نیز این امکان را می یابد تا بین سرویس های مختلف روی یک Host  تمایز قائل شود. بنابراین Load balancer  تشخیص می دهد، با اینکه ممکن است یکی از سرویس های یک سرور از دسترس خارج شده باشد، اما سایر سرویس های آن قابل اعتماد بوده و می توانند به درخواست ها به درستی پاسخ دهند. این امر به تقسیم بار ترافیک در شبکه کمک بسزایی می کند.

با توضیحات فوق، مجددا به سوال نخستین باز می گردیم که Load balancer چگونه تصمیم به انتخاب سرور مناسب می گیرد؟ هر Virtual Server دارای مجموعه Cluster اختصاصی از سرویس ها می باشد که این مجموعه تشکیل دهنده لیستی از امکانات Host ها می باشد. به علاوه فناوری مانیتورینگ سلامتی سرورها، لیست مذکور را به نحوی ویرایش کرده که تنها Host های در دسترس و آماده به پاسخ گویی در آن وجود داشته داشته باشند. Load balancer با استفاده از این لیست، Host مورد نظر خود را برای ارسال ارتباط جدید انتخاب می کند. البته انتخاب دقیق هر یک از سرورها، بسته به الگوریتم هر Load balancer و Cluster متفاوت می باشد. یکی از ساده ترین این الگوریتم ها، Round-robin نام دارد. در این نوع از الگوریتم، Load balancer به سادگی از ابتدای لیست مذکور کار خود را آغاز کرده و اولین درخواست را به اولین سرور موجود در لیست ارسال می کند و سپس درخواست بعدی را به سرور دوم ارجاع می دهد. این روند ادامه خواهد داشت تا Load balancer به انتهای لیست برسد، و سپس مجددا به ابتدای لیست بازگشته و  دوباره درخواست ها را به اولین سرور در لیست و به ترتیب بعدی ارسال خواهد کرد. این الگوریتم بسیار ساده و قابل پیش بینی می باشد که در آن میزان بار و حجم تمامی درخواست ها مشابه یا یکسان فرض می شود که البته این فرضیه همیشه صحیح نیست. الگوریتم های پیشرفته تر، آیتم های دیگری همچون تعداد ارتباطات فعلی سرور، راندمان هر سرور، و حتی میزان پاسخ گویی در دنیای واقعی برای ترافیک فعلی را برای انتخاب بهترین Host در نظر می گیرند.

سیستم های Load balancing پیشرفته همچنین قادرند تا اطلاعات بدست آمده از مانیتونیگ سلامتی سرور ها را با الگوریتم های خود ترکیب کرده تا در نهایت به درک کاملی برای تصمیم گیری دست یابند. برای مثال فرض کنید یکی از Host ها میزبانی چندین سرویس مهم را بر عهده دارد که تمامی آن سرویس ها برای پاسخ به درخواست کاربران ضروری می باشد. یکی از رایج ترین نمونه های این چنینی، سرور های e-commerce می باشند که یک سرور ارایه دهنده سرویس HTTP استاندارد (برروی پورت ۸۰) و همچنین سرویس HTTPS (برروی پورت ۴۴۳) می باشد. در بسیاری از مواقع برای مواردی از جمله امنیت، ممکن است مایل نباشید تا در صورت از دسترس خارج شدن یکی از این سرویس ها، درخواست کاربر به سرور مذکور ارسال شود. در واقع در صورتی که سرویس HTTPS در سرور با مشکل مواجه شود، Load balancer باید سرویس HTTP را هم از دسترس خارج شده در نظر بگیرد . این قابلیت در سناریوهای مشابه HTTP از اهمیت بسیار بالایی برخوردار می باشد.

استفاده از Load balancing برای انتخاب بهترین سرویس در دسترس برای ارسال درخواست کاربران، تنها نیمی از راه می باشد. پس از برقراری ارتباط، Load balancer باید همواره رد ترافیک ارسالی از کاربر را حفظ کرده و سایر درخواست های او را نیز به همان سرور قبلی load balance  نماید. در واقع دو مشکل کلی پس از Load balance شدن ارتباط کاربر با سرور همچنان بر سر راه باقی می ماند :  نگهداری ارتباط (Connection maintenance) و تداوم (Persistence)

نگهداری ارتباط (Connection Maintenance)

در صورتی که کاربر قصد استفاده از ارتباطات TCP بلند مدتی مانند Telnet, FTP و … را داشته باشد که نباید به صورت ناگهانی قطع شوند، آنگاه Load balancer باید اطمینان حاصل کند که درخواست ها و بسته های ارسالی پیاپی کاربر به یک سرور یکسان رسیده و اشتباها به سرویس ها و Host های در دسترس دیگر ارسال نشوند. این امر نگهداری ارتباط یا Connection Maintenance نام دارد و دارای دو نکته اساسی می باشد : ۱ – توانایی حفظ مسیر ارتباط باز فعلی و سرویس Host متعلق به آن .  ۲- قابلیت مانیتور ارتباط مذکور تا با بسته شدن اتصال، جدول Connection ها نیز بروز شده و Load balancer از قطع ارتباط آگاه شود.

تداوم (Persistence)

کاربران ممکن است به صورت بسیار رایجی برای انجام یک کار مشخص، از چندین ارتباط کوتاه مدت TCP از جمله HTTP استفاده کنند. در برخی موارد همانند مرور وب به صورت استاندارد، دریافت هر یک از درخواست های کاربر توسط سرورهای مختلف از اهمیتی برخوردار نیست و مشکلی در روند کاری وی ایجاد نمی کند. اما در برخی دیگر از موارد مانند استفاده از XML ها، e-commerce، سبد های خرید، HTTPS  و … بسیار حیاتی است که تمامی درخواست های ارسال شده از یک کاربر فقط توسط سرویس یک Host ثابت در Back-end پاسخ داده شد و بسته های انتقالی بین سرورهای دیگر Load balance نشوند. این مفهوم تداوم در اتصال یا وابستگی به سرور نامیده می شود. راه های مختلفی برای حفظ تداوم در ارتباطات وجود دارند.برای مثال در اکثر تراکنش های HTTP مدرن امروزی، سرور مربوطه می تواند درخواست “Keep-alive” را برای ارتباطات خاص خود دهد.با اینکار، ارتباطات پیاپی کوتاه، تبدیل به یک ارتباط با عمر بلندتر می شوند و همانند سایر درخواست ها بین سرور و کاربر جابجا می شوند. با وجود مفید بودن چنین روش هایی برای حفظ تداوم در ارتباطات کوتاه، نگاه داشتن تعداد زیادی از ارتباطات با عمر طولانی تر باعث مصرف بسیار زیادی از منابع سرورها و به طبع کندی سرعت می شوند. از این رو Load balancer ها از مکانیزم های دیگری برای ایجاد و حفظ تداوم ارتباطات استفاده می کنند.

یکی از ساده ترین روش های حفظ تداوم در چنین ارتباطاتی، ذخیره آدرس منبع می باشد. در این روش می توان به سادگی با ذخیره آدرس IP منبع بسته ارسالی و Host پاسخ دهنده به آن ، تمامی تراکنش های بعد از آن را نیز به همان Host  هدایت نمود. این روش همچنین راه مناسبی برای Load balance ارتباطات وابسته به Application  می باشد، زیرا به راحتی می توان شماره پورت برنامه مربوطه را نیز در بسته های ارسالی و دریافتی حفظ نمود.

اما با گسترش استفاده از نرم افزارهای Proxy در بین کاربران و همچنین سازمان های بزرگ، این روش حفظ تداوم در عمل بلا استفاده شده است. زیرا Proxy server ها می توانند بسیاری از کاربران را در پس یک IP واحد مخفی سازند که این امر باعث می شود درخواست های هیچ یک از آن ها نیز Load balance نشود. لذا تکنولوژی های پیشرفته Load balancing امروزی قادرند تا بسته ها (Packet) دریافتی از هر کاربر را شکافته و جداول Persistence خود را با توجه به محتویات آن ها بروز نمایند. این امر این دستگاه ها را قادر می سازد تا به اطلاعات با ارزشی از جمله نام کاربری و پسورد هر کاربر هم برای حفظ تداوم اتصال او با سرور دسترسی داشته باشند.

—————————————————————————————–

منبع : f5.com

شما ممکن است علاقه داشته باشید:

8 تفکر بر روی “Load balancing چیست؟”

  1. ناصر میرزایی گفت:

    سلام پایان نامه ی من تو زمینه ی load balancing هستش یک سری اطلاعات تو این زمینه نیاز دارم . میتونم رو کمکتون حساب کنم لطفاً جواب بدید.
    با تشکر

  2. خورشاهی گفت:

    با سلام
    ممنون میشم اگه منابع معتبر و جدید در این زمینه را برایم ایمیل کنید
    و یا پایان نامه
    با تشکر از مطلب جامع و خوب شما

    • سجاد بختیاری گفت:

      دوست گرامی متاسفاته امکان ایمیل مطالب وجود ندارد. می توانید مطالب را در بلاگ جستجو نموده و یا منتظر مطالب جدید تر در آینده باشید.

  3. سلام گفت:

    سلام
    ممنون
    پیاده سازی لطفا ؟

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شبکه های مجازی ما

دسته بندی ها