Съдържание[Крия][Покажи]
Наличността на приложения никога не е била приемана толкова сериозно, колкото днес, когато използваме приложения за нещо повече от комуникация, независимо дали е лична или професионална, и когато приложенията са бизнес.
Приложенията, които не са постоянно онлайн или са нестабилни, губят своите потребители и уместност, като в крайна сметка стават остарели. Случи се светкавично. Тъй като интернет никога не спи и работи 24 часа в денонощието, 7 дни в седмицата, същата идея трябва да важи и за приложенията.
Мащабируемостта е от решаващо значение за това и за осигуряване на наличност на приложението. Балансирането на натоварването е един от най-важните компоненти за осигуряване на наличност. Много хора все още вярват, че балансирането на натоварването може да бъде постигнато с прост скрипт.
Това обаче не е така. Само той осигурява достъп до програми по целия свят - по всяко време и от всяко устройство.
В тази публикация ще разгледаме задълбочено балансирането на натоварването, неговите алгоритми и как е свързано с микроуслугите, наред с други неща. Нека да започнем!
Какво е балансиране на натоварването?
Тъй като търсенето на уебсайт или бизнес приложение нараства, един сървър скоро няма да може да се справи с цялото натоварване. Организациите разпределят натоварването върху множество сървъри, за да задоволят търсенето. Този метод, известен като „балансиране на натоварването“, предпазва един сървър от претоварване, което може да доведе до забавяне, отпадане на заявки или дори срив.
Балансирането на натоварването разпределя мрежовия трафик еднакво, за да избегне повреда поради претоварване на ресурсите. Приложения, уебсайтове, бази данни и други компютърни ресурси работят по-добре и са по-достъпни, използвайки този метод. Той също така помага за правилната и навременна обработка на заявките на потребителите.
От гледна точка на потребителя, балансирането на натоварването служи като невидим посредник между клиент и колекция от сървъри, като гарантира, че заявките за връзка не отпадат. Приложения, уебсайтове, бази данни и онлайн услуги най-вероятно биха се сринали, ако търсенето стане твърде голямо без балансиране на натоварването.
Стотици хиляди потребителски заявки могат да бъдат изпратени към един уебсайт с висок трафик едновременно. Необходими са множество сървъри, за да се попълват правилно уеб страниците с исканото съдържание, като текст, изображения, видео и аудио стрийминг. Балансирането на натоварването обикновено се използва в сървъри на уебсайтове с висок трафик, както и в DNS сървъри, бази данни и сайтове с протокол за прехвърляне на файлове (FTP).
Ако един сървър е претоварен, това може да функционира лошо или дори да се срине. Балансьорите на натоварване намаляват вероятността от прекъсване, като разпределят заявките на потребителите равномерно между колекция от сървъри. Ако един от сървърите в групата се повреди, трафикът се пренасочва към други сървъри в групата. Балансьорът на натоварване автоматично добавя нови сървъри в процеса на разпределение на трафика, когато се добавят към пула от сървъри.
Как работи балансирането на натоварването?
Той работи по следния начин:
- Когато клиент получи заявка, например чрез браузър или приложение, той се опитва да се свърже със сървъра.
- Когато балансьорът на натоварване получи заявка, той я насочва към един от сървърите в група сървъри въз основа на установени модели от алгоритъма (или фермата).
- Сървърът получава заявката за свързване и отговаря на клиента чрез балансира на натоварването.
- Когато балансьорът на натоварване получи отговора, той съпоставя IP адреса на клиента с IP адреса на избрания сървър. След това отговорът се предава с пакета.
- SSL разтоварването е процесът на декриптиране на данни с помощта на протокола за криптиране на Security Socket Layer, така че да не се налага сървърите.
- Процесът се повтаря, докато сесията приключи.
Методи за балансиране на натоварването
За да изберете кой от сървърите в сървърна ферма да получи следващата заявка, всяка техника за балансиране на натоварването използва набор от критерии. Има пет типични подхода за балансиране на натоварването:
- конференция: Това е подходът по подразбиране и работи точно както звучи. Балансьорът на натоварване разпределя заявките по ротационен модел, започвайки от първия сървър в групата и продължавайки надолу към дъното, където чака да бъде извикан отново. Този метод гарантира, че всеки сървър обработва приблизително еднакъв брой връзки.
- Претеглена кръгова система: Този подход присвоява на всеки сървър тегло (или предпочитание), което обикновено е пропорционално на неговия капацитет. Колкото повече заявки получава сървърът, толкова по-голямо е теглото. Например сървър с тегловна стойност две получава два пъти повече заявки от сървър с тегловна стойност едно.
- Залепваща сесия: Този подход, известен също като постоянство на сесията, свързва определени клиенти и сървъри за продължителността на сесията. За да установи връзката, балансьорът на натоварването използва бисквитка или IP адреса на потребителя, за да идентифицира потребителски атрибут. След като връзката бъде установена, заявките на потребителя се насочват към същия сървър, докато сесията приключи. Това оптимизира мрежовите ресурси, като същевременно подобрява потребителското изживяване.
- Най -малко връзки: Тази стратегия предполага, че всички заявки водят до еднакво натоварване на сървъра. В резултат на това сървърът с най-малък брой заявки получава следващата заявка.
- IP хеш: Този алгоритъм генерира уникален хеш ключ въз основа на изходния и целевия IP адрес на клиента и сървъра. Ключът се използва за маршрутизиране на заявката и позволява възобновяване на изгубена връзка със същия сървър.
Хардуер срещу Софтуерни средства за балансиране на натоварването
Хардуерен баланс на натоварването
Физическият хардуер, като например уред, съставлява хардуерни балансатори на натоварване. Те насочват трафика към сървърите в зависимост от фактори като броя на съществуващите връзки, използването на процесора и производителността на сървъра. Хардуерните балансиращи натоварвания имат собствен фърмуер, който трябва да се поддържа и актуализира, когато станат налични нови версии и корекции за сигурност.
Хардуерните балансиращи натоварвания често осигуряват по-висока производителност и контрол, както и по-широк набор от възможности като Kerberos удостоверяване и SSL хардуерно ускорение, но изискват известно ниво на опит в управлението и поддръжката. Тъй като хардуерните балансьори на натоварване са по-малко гъвкави и мащабируеми от софтуерните балансатори на натоварване, има склонност към прекомерно предоставяне на хардуерни балансиращи устройства за натоварване.
Софтуер за балансиране на натоварването
Софтуерните балансиращи натоварвания обикновено са по-лесни за настройка от хардуерните им колеги. Те също така са по-рентабилни и адаптивни и работят добре със среди за разработка на софтуер. Софтуерният метод ви позволява да персонализирате балансира на натоварването според точните изисквания на вашата среда. Повишената гъвкавост може да дойде за сметка на допълнително време, прекарано в настройка на балансира на натоварването.
Софтуерните балансьори ви предоставят по-голяма гъвкавост при извършване на модификации и актуализации от хардуерните, които имат по-затворен подход. Предварително опакованите виртуални машини могат да се използват като софтуерни балансатори на натоварване (VM). Виртуалните машини ще ви спестят известно време за настройка, но може да не разполагат с цялата функционалност, налична в техните хардуерни колеги.
Просто внедряване на балансиране на натоварването
Ще използваме библиотеката Spring Cloud за изграждане на приложения които се свързват с други приложения по балансиран начин. Докато обработваме заявки за отдалечени услуги, можем лесно да изградим балансиране на натоварването, използвайки каквато техника ни харесва. Разгледайте следния код като пример. Ще започнем с основно сървърно приложение.
Сървърът ще има само една HTTP крайна точка и ще работи в няколко случая. След това ще изградим клиентско приложение, което използва Load Balancer за разпространение на заявки в няколко сървърни инстанции.
Сървър
Започваме с основно Пролетен ботуш приложение за нашия примерен сървър:
За да започнем, инжектираме персонализирана променлива, наречена instance_ID. Това ни помага да правим разлика между многобройни екземпляри, които работят. След това създаваме единична HTTP GET крайна точка, която връща съобщение и ID на екземпляр.
Инстанцията по подразбиране с идентификатор 1 ще работи на порт 8080. Трябва само да добавим няколко програмни параметра, за да стартираме втора инстанция:
Удовлетвореност
Нека сега да разгледаме клиентския код. Тук идва Load Balancer, така че нека започнем, като го включим в нашето приложение:
След това разработваме реализация на ServiceInstanceListSupplier. Това е един от най-важните интерфейси в Load Balancer. Той определя как намираме достъпни екземпляри на услугата.
Ще кодираме твърдо два отделни екземпляра на нашия примерен сървър в нашето примерно приложение. Те работят на същата система, но използват отделни портове:
Създайте клас LoadBalancerConfiguration сега:
Този клас има само една цел: създава балансиран по натоварване конструктор на WebClient за извършване на отдалечени заявки. Нашата анотация използва измислено име за услугата.
Това се дължи на факта, че най-вероятно няма да знаем точните имена на хостове и портове за стартиране на инстанции преди време. В резултат на това използваме измислено име като заместител и рамката ще замени действителната информация, когато избере работещ екземпляр.
След това нека направим клас Configuration, който ще се използва за инстанциране на доставката на нашия екземпляр на услугата. Обърнете внимание, че използваме същия псевдоним като преди:
Вече можем да изградим истинското клиентско приложение. Нека изпратим 10 заявки към примерния сървър, използвайки WebClient bean от по-рано:
От изхода можем да видим, че балансираме натоварването между два отделни екземпляра:
Балансиране на натоварването в микроуслуги
Микросервизната архитектура се използва от няколко компании, като Netflix и Amazon, за разработване на бизнес приложения като набор от слабо свързани услуги. Свръхмащабната и непрекъсната доставка за сложни приложения са само две от причините за преминаване към тази разпределена, слабо свързана архитектура.
Екипите на тези предприятия са приложили Agile и DevOps стратегии, за да произвеждат приложения по-бързо и с по-нисък процент на отказ от традиционните методи. Въпреки това, трябва да постигнете баланс между сложността на разпределената архитектура и изискванията на приложението, изискванията за мащаб и ограниченията във времето за пускане на пазара.
В продължение на толкова много години контролерите за доставка на приложения (ADC) са били от решаващо значение за покриване на изискванията на ниво услуга за корпоративни приложения, хоствани на място или в облака. Клиент, който се ангажира с приложение, базирано на микроуслуги, не трябва да знае за екземплярите, които го предоставят, за да развие независимо клиента и микроуслугите.
Това е именно отделянето, осигурено от обратен прокси или балансьор на натоварване. Отново, балансирането на натоварването е решението за гарантиране, че микроуслугите могат да се справят с търсенето, сигурността и наличността.
Когато комбинирате традиционното балансиране на натоварването север-юг между приложения, базирани на клиент и микроуслуги, с внедряване на изток-запад за хоризонтална мащабируемост, получавате значителен тласък. Целта е да се поддържа безопасната и регулирана среда, изисквана от ИТ, без да се жертва гъвкавостта на разработката или DevOps автоматизация изисквания.
Ползи
Балансирането на натоварването предоставя различни предимства чрез подобряване на използването на ресурсите, доставката на данни и времето за реакция за уебсайтове и приложения с голям трафик, както и бази данни, които получават голям брой заявки. Балансирането на натоварването гарантира, че заявките на потребителите се изпълняват бързо и правилно в сценарии с висок трафик.
Те спестяват на потребителите влошаването на работата с бавни програми и ресурси. Балансирането на натоварването също помага да се избегнат прекъсвания и да се опрости сигурността, намалявайки риска от загуба на производителност и приходи за вашата компания.
- Балансирането на натоварването осигурява гъвкавост за добавяне и премахване на сървъри, както изисква търсенето, в допълнение към управлението на трафика до оптимална ефективност. Тъй като трафикът се пренасочва към други сървъри по време на поддръжката, също така е възможно да се извърши поддръжка на сървъра, без да се нарушават потребителите.
- Балансирането на натоварването осигурява вградено резервиране чрез разделяне на трафика между набор от сървъри. Можете незабавно да прехвърлите натоварването към други сървъри, ако един от тях не успее, свеждайки до минимум въздействието върху потребителите.
- Ако употребата на приложение или уебсайт нараства, увеличеният трафик може да влоши неговата производителност, ако не се управлява ефективно. С балансиране на натоварването можете да добавите реален или виртуален сървър, за да посрещнете търсенето, без да нарушавате услугата. Балансьорът на натоварване идентифицира новите сървъри, когато те идват онлайн и без усилие ги включва в операцията. Този метод е за предпочитане пред мигрирането на уебсайт от претоварен сървър към нов, което често включва известен престой.
Заключение
Балансирането на натоварването е критичен компонент на съвременните, устойчиви на грешки системи. Можем просто да конструираме приложения, които разпределят заявки към множество инстанции на услугата, използвайки различни подходи за балансиране на натоварването. Бизнесът трябва да поддържа сложни ИТ системи, за да предоставят приложенията сигурно.
Конфигурирането, внедряването и поддръжката на микроуслуги между домейни може да са податливи на грешки, скъпи и отнемащи време. ИТ трябва да използва най-добрите практики и технологии за автоматизация, видимост, анализ и оркестрация, които са съвместими с техните гъвкави и DevOps процеси, за да улеснят настройката и поддръжката на тези микроуслуги.
Оставете коментар