در دسترس بودن برنامهها هرگز به اندازه امروز جدی گرفته نشده است، زمانی که از برنامهها برای چیزی فراتر از ارتباط استفاده میکنیم، چه شخصی و چه حرفهای و زمانی که برنامهها در کار هستند.
برنامه هایی که دائما آنلاین نیستند یا ناپایدار هستند، کاربران و ارتباط خود را از دست می دهند و در نهایت منسوخ می شوند. در یک لحظه اتفاق افتاد. از آنجایی که اینترنت هرگز نمیخوابد و 24 ساعت شبانهروز و 7 روز هفته کار میکند، همین ایده باید در مورد برنامهها نیز صدق کند.
مقیاس پذیری برای انجام این کار و اطمینان از در دسترس بودن برنامه بسیار مهم است. تعادل بار یکی از مهمترین مولفه ها در اطمینان از در دسترس بودن است. بسیاری از مردم هنوز معتقدند که تعادل بار را می توان با یک اسکریپت ساده انجام داد.
به هر حال، این چنین نیست. این به تنهایی دسترسی به برنامه ها را در سراسر جهان - در هر زمان و از هر دستگاهی فراهم می کند.
در این پست، نگاهی عمیق به تعادل بار، الگوریتمهای آن و نحوه ارتباط آن با میکروسرویسها و موارد دیگر خواهیم داشت. شروع کنیم!
تعادل بار چیست؟
با افزایش تقاضا برای یک وب سایت یا برنامه تجاری، یک سرور به زودی قادر به مدیریت کل بار نخواهد بود. سازمان ها حجم کار را روی سرورهای متعددی توزیع می کنند تا تقاضا را برآورده کنند. این روش که به "تعادل بار" معروف است، از بارگیری بیش از حد یک سرور جلوگیری می کند که می تواند باعث کند شدن، حذف درخواست ها یا حتی خرابی آن شود.
تعادل بار ترافیک شبکه را به طور مساوی توزیع می کند تا از خرابی ناشی از اضافه بار منابع جلوگیری کند. برنامه ها، وب سایت ها، پایگاه های داده و سایر منابع کامپیوتری عملکرد بهتری دارند و با استفاده از این روش بیشتر در دسترس هستند. همچنین به پردازش مناسب و به موقع درخواست های کاربران کمک می کند.
از دیدگاه کاربر، تعادل بار به عنوان یک واسطه نامرئی بین مشتری و مجموعه ای از سرورها عمل می کند و اطمینان می دهد که درخواست های اتصال حذف نمی شوند. اگر تقاضا بدون تعادل بار خیلی زیاد شود، برنامه ها، وب سایت ها، پایگاه های داده و خدمات آنلاین به احتمال زیاد از بین می روند.
صدها هزار درخواست کاربر را می توان همزمان به یک وب سایت پر بازدید ارسال کرد. برای پر کردن صحیح صفحات وب با محتوای درخواستی، مانند متن، تصاویر، ویدئو و پخش صدا، به چندین سرور نیاز است. متعادل سازی بار معمولاً در مزارع سرورهای وب سایت با ترافیک بالا و همچنین سرورهای DNS، پایگاه های داده و سایت های پروتکل انتقال فایل (FTP) استفاده می شود.
اگر یک سرور بیش از حد بارگذاری شود، ممکن است عملکرد ضعیفی داشته باشد یا حتی از کار بیفتد. متعادل کننده های بار با توزیع یکنواخت درخواست های کاربر در میان مجموعه ای از سرورها، احتمال خرابی را کاهش می دهند. اگر یکی از سرورهای گروه خراب شود، ترافیک به سرورهای دیگر گروه منتقل می شود. یک متعادل کننده بار به طور خودکار سرورهای جدید را در فرآیند توزیع ترافیک هنگامی که به مجموعه سرور اضافه می شوند اضافه می کند.
تعادل بار چگونه کار می کند؟
به صورت زیر عمل می کند:
- هنگامی که یک کلاینت درخواستی را دریافت می کند، مانند یک مرورگر یا یک برنامه، سعی می کند با سرور ارتباط برقرار کند.
- هنگامی که یک متعادل کننده بار درخواستی را دریافت می کند، آن را بر اساس الگوهای تعیین شده توسط الگوریتم (یا مزرعه) به یکی از سرورهای یک گروه سرور هدایت می کند.
- سرور درخواست اتصال را دریافت می کند و از طریق بار متعادل کننده به مشتری پاسخ می دهد.
- هنگامی که متعادل کننده بار پاسخ را دریافت می کند، آدرس IP مشتری را با آدرس IP سرور انتخاب شده مطابقت می دهد. پس از آن، پاسخ با بسته ارسال می شود.
- تخلیه SSL فرآیند رمزگشایی داده ها با استفاده از پروتکل رمزگذاری لایه سوکت امنیتی است تا سرورها مجبور به انجام این کار نباشند.
- این روند تا پایان جلسه تکرار می شود.
روش های تعادل بار
برای انتخاب اینکه کدام یک از سرورهای یک مزرعه سرور درخواست بعدی را دریافت کند، هر تکنیک متعادل کننده بار از مجموعه ای از معیارها استفاده می کند. پنج روش معمول برای متعادل کردن بار وجود دارد:
- انجام مسابقه بنوبت: این رویکرد پیش فرض است و همانطور که به نظر می رسد کار می کند. متعادل کننده بار درخواست ها را در یک الگوی چرخشی توزیع می کند، از اولین سرور در گروه شروع می شود و به پایین ادامه می یابد، جایی که منتظر می ماند تا دوباره فراخوانی شود. این روش تضمین می کند که هر سرور تقریباً همان تعداد اتصال را مدیریت می کند.
- دور رابین وزن دار: این رویکرد به هر سرور یک وزن (یا اولویت) اختصاص می دهد که به طور کلی با ظرفیت آن متناسب است. هر چه یک سرور درخواست های بیشتری دریافت کند، وزن آن بیشتر می شود. به عنوان مثال، سروری با ارزش وزنی دو، دو برابر سروری با وزن یک درخواست دریافت می کند.
- جلسه چسبناک: این رویکرد که به عنوان ماندگاری جلسه نیز شناخته می شود، مشتریان و سرورهای خاصی را در طول یک جلسه به هم متصل می کند. برای ایجاد پیوند، متعادل کننده بار از یک کوکی یا آدرس IP کاربر برای شناسایی ویژگی کاربر استفاده می کند. پس از برقراری ارتباط، درخواست های کاربر تا پایان جلسه به همان سرور هدایت می شود. این کار منابع شبکه را بهینه می کند و در عین حال تجربه کاربر را نیز بهبود می بخشد.
- حداقل اتصالات: این استراتژی فرض می کند که همه درخواست ها منجر به بار مساوی سرور می شوند. در نتیجه سروری با کمترین تعداد درخواست درخواست بعدی را دریافت می کند.
- هش IP: این الگوریتم یک کلید هش منحصر به فرد را بر اساس آدرس IP مبدا و مقصد مشتری و سرور ایجاد می کند. کلید برای مسیریابی درخواست استفاده می شود و اجازه می دهد تا اتصال از دست رفته با همان سرور از سر گرفته شود.
سخت افزار در مقابل نرم افزار Load Balancers
متعادل کننده بار سخت افزاری
سخت افزار فیزیکی، مانند دستگاه، متعادل کننده بار سخت افزاری را تشکیل می دهد. این مسیرها را بسته به عواملی مانند تعداد اتصالات موجود، استفاده از پردازنده و عملکرد سرور به سرورها هدایت می کند. متعادلکنندههای بار سختافزار دارای سیستمافزار اختصاصی هستند که باید با در دسترس قرار گرفتن نسخههای جدید و رفعهای امنیتی، نگهداری و بهروزرسانی شوند.
متعادلکنندههای بار سختافزار اغلب عملکرد و کنترل بالاتر و همچنین طیف وسیعتری از قابلیتها مانند احراز هویت Kerberos و شتاب سختافزار SSL را ارائه میکنند، اما نیاز به سطحی از تخصص مدیریت و نگهداری دارند. از آنجایی که بار متعادل کننده های سخت افزاری نسبت به بار متعادل کننده های نرم افزاری انعطاف پذیری و مقیاس پذیری کمتری دارند، تمایل به تامین بیش از حد بار متعادل کننده های سخت افزاری وجود دارد.
نرم افزار Load Balancer
تنظیم کننده بار نرم افزاری معمولاً نسبت به همتایان سخت افزاری خود آسان تر است. آنها همچنین مقرون به صرفه تر و سازگارتر هستند، و به خوبی با محیط های توسعه نرم افزار کار می کنند. روش نرم افزاری به شما این امکان را می دهد که متعادل کننده بار را مطابق با نیازهای دقیق محیط خود سفارشی کنید. افزایش انعطاف پذیری ممکن است به قیمت زمان اضافی صرف شده برای تنظیم بار متعادل کننده تمام شود.
متعادلکنندههای نرمافزار نسبت به سختافزارها، که رویکرد بستهتری دارند، انعطافپذیری بیشتری برای انجام تغییرات و بهروزرسانیها به شما ارائه میدهند. ماشین های مجازی از پیش بسته بندی شده می توانند به عنوان متعادل کننده بار نرم افزاری (VM) استفاده شوند. ماشینهای مجازی مقداری در زمان تنظیم صرفهجویی میکنند، اما ممکن است همه عملکردهای موجود در همتایان سختافزاری خود را نداشته باشند.
اجرای متعادل بار ساده
ما از کتابخانه Spring Cloud استفاده خواهیم کرد ساخت اپلیکیشن ها که به طور متعادل به برنامه های دیگر متصل می شوند. در حین پردازش درخواستهای سرویس از راه دور، میتوانیم به راحتی با استفاده از هر تکنیکی که دوست داریم، تعادل بار ایجاد کنیم. کد زیر را به عنوان نمونه در نظر بگیرید. ما با یک برنامه کاربردی سرور اصلی شروع می کنیم.
سرور فقط یک نقطه پایانی HTTP خواهد داشت و در چندین نمونه کار می کند. سپس یک برنامه مشتری میسازیم که از Load Balancer برای توزیع درخواستها در چندین نمونه سرور استفاده میکند.
سرور
ما با یک پایه شروع می کنیم چکمه بهاری برنامه برای سرور نمونه ما:
برای شروع، یک متغیر قابل تنظیم به نام instance_ID را تزریق می کنیم. این به ما کمک می کند تا بین نمونه های متعددی که در حال کار هستند تمایز قائل شویم. پس از آن، یک نقطه پایانی HTTP GET ایجاد می کنیم که یک پیام و شناسه نمونه را برمی گرداند.
نمونه پیشفرض با ID 1 روی پورت 8080 کار میکند. برای راهاندازی نمونه دوم فقط باید چند پارامتر برنامه اضافه کنیم:
مشتری
حالا بیایید نگاهی به کد مشتری بیندازیم. اینجاست که Load Balancer وارد می شود، بنابراین بیایید با ترکیب آن در برنامه خود شروع کنیم:
به دنبال آن، ما پیاده سازی ServiceInstanceListSupplier را توسعه می دهیم. این یکی از مهم ترین رابط ها در Load Balancer است. مشخص می کند که چگونه نمونه های سرویس قابل دسترسی را پیدا کنیم.
ما دو نمونه جداگانه از سرور نمونه خود را در برنامه نمونه خود کدگذاری سختی می کنیم. آنها بر روی یک سیستم اجرا می شوند اما از پورت های جداگانه استفاده می کنند:
اکنون یک کلاس LoadBalancerConfiguration ایجاد کنید:
این کلاس تنها یک هدف دارد: یک سازنده WebClient با بار متعادل برای درخواست از راه دور ایجاد می کند. حاشیه نویسی ما از یک نام ساختگی برای سرویس استفاده می کند.
این به این دلیل است که ما به احتمال زیاد نام هاست و پورت های دقیقی را برای اجرای نمونه ها از قبل نمی دانیم. در نتیجه، ما از یک نام ساختگی بهعنوان مکاننما استفاده میکنیم، و چارچوب زمانی که نمونهای در حال اجرا را انتخاب میکند، جایگزین اطلاعات واقعی میشود.
در مرحله بعد، بیایید یک کلاس Configuration بسازیم که برای نمونه سازی عرضه نمونه سرویس ما استفاده می شود. توجه داشته باشید که ما از همان نام مستعار قبلی استفاده می کنیم:
اکنون می توانیم اپلیکیشن مشتری واقعی را بسازیم. بیایید 10 پرس و جو را با استفاده از WebClient Bean قبلی به سرور نمونه ارسال کنیم:
از خروجی میتوانیم ببینیم که در حال متعادلسازی بار بین دو نمونه جداگانه هستیم:
Load Balancing در میکروسرویس ها
معماری میکروسرویس توسط چندین شرکت، مانند نتفلیکس و آمازون، برای توسعه برنامههای کاربردی تجاری به عنوان مجموعهای از خدمات بدون اتصال استفاده میشود. مقیاس بیش از حد و تحویل مداوم برای برنامه های کاربردی پیچیده تنها دو دلیل برای حرکت به این معماری توزیع شده و بدون اتصال است.
تیمهای این شرکتها استراتژیهای Agile و DevOps را برای تولید سریعتر و با نرخ شکست کمتر نسبت به روشهای سنتی اجرا کردهاند. با این حال، شما باید بین پیچیدگی معماری توزیع شده و خواسته های برنامه، مقیاس مورد نیاز و محدودیت های زمان عرضه به بازار تعادل ایجاد کنید.
برای سالهای متمادی، کنترلکنندههای تحویل برنامه (ADC) برای برآوردن الزامات سطح سرویس برای برنامههای کاربردی شرکتی که در محل یا در فضای ابری میزبانی میشوند، حیاتی بودهاند. مشتری که با یک برنامه کاربردی مبتنی بر میکروسرویس درگیر است، برای رشد مستقل مشتری و میکروسرویس ها، نیازی به اطلاع از مواردی ندارد که آن را ارائه می دهند.
این دقیقاً جداسازی ارائه شده توسط یک پروکسی معکوس یا یک متعادل کننده بار است. مجدداً، تعادل بار راه حلی است برای اطمینان از اینکه میکروسرویس ها می توانند تقاضا، امنیت و در دسترس بودن را مدیریت کنند.
هنگامی که تعادل بار سنتی شمال-جنوب را بین برنامه های مبتنی بر مشتری و میکروسرویس ها با استقرار شرق-غرب برای مقیاس پذیری افقی ترکیب می کنید، افزایش قابل توجهی دریافت می کنید. هدف حفظ محیط ایمن و تنظیم شده مورد نیاز فناوری اطلاعات بدون به خطر انداختن چابکی توسعه است اتوماسیون DevOps مورد نیاز است.
مزایا
تعادل بار با بهبود استفاده از منابع، تحویل داده ها و زمان پاسخگویی برای وب سایت ها و برنامه های پربازدید و همچنین پایگاه های داده ای که تعداد زیادی درخواست را دریافت می کنند، مزایای مختلفی را ارائه می دهد. تعادل بار تضمین می کند که درخواست های کاربر به سرعت و به درستی در سناریوهای پر ترافیک انجام می شود.
آنها کاربران را از تشدید برخورد با برنامه ها و منابع کند نجات می دهند. تعادل بار همچنین به جلوگیری از خرابی و ساده کردن امنیت کمک می کند و خطر از دست رفتن بهره وری و درآمد را برای شرکت شما کاهش می دهد.
- تعادل بار، علاوه بر مدیریت ترافیک تا بازده بهینه، انعطافپذیری را برای افزودن و حذف سرورها طبق تقاضا فراهم میکند. از آنجایی که ترافیک در حین نگهداری به سرورهای دیگر هدایت می شود، انجام تعمیر و نگهداری سرور بدون ایجاد اختلال در کاربران نیز امکان پذیر است.
- تعادل بار با تقسیم ترافیک بین مجموعه ای از سرورها، افزونگی داخلی را فراهم می کند. در صورت خرابی یکی از سرورها، میتوانید بلافاصله بار را به سرورهای دیگر هدایت کنید و تأثیر آن را بر روی کاربران به حداقل برسانید.
- اگر استفاده از یک برنامه یا وب سایت افزایش یابد، ترافیک افزایش یافته ممکن است عملکرد آن را کاهش دهد، اگر به طور موثر مدیریت نشود. با تعادل بار، می توانید یک سرور واقعی یا مجازی اضافه کنید تا بدون ایجاد اختلال در خدمات، تقاضا را برآورده کنید. متعادل کننده بار سرورهای جدید را به محض اینکه آنلاین می شوند شناسایی می کند و بدون زحمت آنها را در عملیات ادغام می کند. این روش به انتقال یک وب سایت از یک سرور پر بار به یک سرور جدید ترجیح داده می شود، که اغلب شامل مدتی از کار افتادگی است.
نتیجه
تعادل بار یک جزء حیاتی از سیستم های امروزی و مقاوم در برابر خطا است. ما میتوانیم به سادگی برنامههایی بسازیم که درخواستها را با استفاده از روشهای مختلف متعادلسازی بار، در چندین نمونه سرویس توزیع میکنند. کسب و کارها باید از سیستم های پیچیده IT پشتیبانی کنند تا بتوانند برنامه های کاربردی را به صورت ایمن ارائه دهند.
پیکربندی، استقرار و نگهداری میکروسرویس های متقابل دامنه ممکن است مستعد خطا، پرهزینه و زمان بر باشد. فناوری اطلاعات باید از بهترین شیوهها و فنآوریهای اتوماسیون، دید، تجزیه و تحلیل و هماهنگسازی استفاده کند که با فرآیندهای چابک و DevOps سازگار باشد تا راهاندازی و نگهداری این میکروسرویسها را آسانتر کند.
پاسخ دهید