Змест[Схаваць][Паказаць]
Да даступнасці прыкладанняў ніколі не ставіліся так сур'ёзна, як сёння, калі мы выкарыстоўваем праграмы не толькі для зносін, асабістых або прафесійных, і калі праграмы - гэта бізнес.
Праграмы, якія не працуюць пастаянна ў сетцы або нестабільныя, губляюць сваіх карыстальнікаў і рэлевантнасць, з часам становячыся састарэлымі. Гэта адбылося вокамгненна. Паколькі Інтэрнэт ніколі не спіць і працуе 24 гадзіны ў суткі, 7 дзён на тыдзень, тая ж ідэя павінна прымяняцца і да праграм.
Маштабаванасць вельмі важная для гэтага і забеспячэння даступнасці прыкладанняў. Балансіроўка нагрузкі - адзін з найважнейшых кампанентаў забеспячэння даступнасці. Многія людзі ўсё яшчэ вераць, што балансаванне нагрузкі можа быць выканана з дапамогай простага сцэнарыя.
Аднак гэта не так. Толькі ён забяспечвае доступ да праграм па ўсім свеце — у любы час і з любой прылады.
У гэтай публікацыі мы падрабязна разгледзім балансаванне нагрузкі, яго алгарытмы і тое, як гэта звязана з мікрасэрвісамі, сярод іншага. Давайце пачнем!
Што такое балансіроўка нагрузкі?
Паколькі попыт на вэб-сайт або бізнес-дадатак расце, адзін сервер неўзабаве не зможа справіцца з усёй нагрузкай. Арганізацыі размяркоўваюць нагрузку на шматлікія серверы, каб задаволіць попыт. Гэты метад, вядомы як «балансаванне нагрузкі», прадухіляе перагрузку аднаго сервера, што можа прывесці да яго запаволення, адхілення запытаў або нават збою.
Балансіроўка нагрузкі размяркоўвае сеткавы трафік раўнамерна, каб пазбегнуць збою з-за перагрузкі рэсурсаў. Праграмы, вэб-сайты, базы даных і іншыя камп'ютэрныя рэсурсы працуюць лепш і становяцца больш даступнымі пры выкарыстанні гэтага метаду. Гэта таксама дапамагае ў правільнай і своечасовай апрацоўцы запытаў карыстальнікаў.
З пункту гледжання карыстальніка, балансіроўка нагрузкі служыць нябачным пасярэднікам паміж кліентам і наборам сервераў, гарантуючы, што запыты на злучэнне не адрываюцца. Прыкладанні, вэб-сайты, базы дадзеных і інтэрнэт-сэрвісы, хутчэй за ўсё, разбурацца, калі попыт стане занадта вялікім без балансіроўкі нагрузкі.
Сотні тысяч запытаў карыстальнікаў могуць быць адпраўлены на адзін сайт з вялікім трафікам адначасова. Некалькі сервераў патрабуюцца для правільнага запаўнення вэб-старонак запытаным змесцівам, такім як тэкст, выявы, відэа і аўдыё. Балансіроўка нагрузкі звычайна выкарыстоўваецца ў фермах сервераў вэб-сайтаў з высокім трафікам, а таксама ў DNS-серверах, базах дадзеных і сайтах з пратаколам перадачы файлаў (FTP).
Калі адзін сервер перагружаны, гэта можа працаваць дрэнна ці нават выйсці з ладу. Балансіроўшчыкі нагрузкі зніжаюць верагоднасць прастою, раўнамерна размяркоўваючы карыстальніцкія запыты паміж наборам сервераў. Калі адзін з сервераў у групе выходзіць з ладу, трафік перанакіроўваецца на іншыя серверы ў групе. Балансір нагрузкі аўтаматычна дадае новыя серверы ў працэсе размеркавання трафіку, калі яны дадаюцца ў пул сервераў.
Як працуе балансіроўка нагрузкі?
Ён працуе наступным чынам:
- Калі кліент атрымлівае запыт, напрыклад, праз браўзер або прыкладанне, ён спрабуе злучыцца з серверам.
- Калі балансір нагрузкі атрымлівае запыт, ён накіроўвае яго на адзін з сервераў у групе сервераў на аснове ўсталяваных шаблонаў алгарытму (або фермы).
- Сервер атрымлівае запыт на злучэнне і адказвае кліенту праз балансір нагрузкі.
- Калі балансір нагрузкі атрымлівае адказ, ён супастаўляе IP-адрас кліента з IP-адрасам абранага сервера. Пасля гэтага з пакетам перадаецца адказ.
- Разгрузка SSL - гэта працэс дэшыфравання даных з выкарыстаннем пратаколу шыфравання Security Socket Layer, каб серверам не даводзілася гэта рабіць.
- Працэс паўтараецца да заканчэння сеансу.
Метады балансіроўкі нагрузкі
Каб выбраць, які з сервераў у ферме сервераў атрымае наступны запыт, кожны метад балансавання нагрузкі выкарыстоўвае набор крытэрыяў. Ёсць пяць тыповых падыходаў для балансавання нагрузкі:
- Round Robin: Гэта стандартны падыход, і ён працуе так, як гучыць. Балансіравальнік нагрузкі размяркоўвае запыты па чарзе, пачынаючы з першага сервера ў групе і пераходзячы ўніз, дзе ён чакае паўторнага выкліку. Гэты метад гарантуе, што кожны сервер апрацоўвае прыкладна аднолькавую колькасць злучэнняў.
- Узважаны кругавы рэжым: Гэты падыход прысвойвае кожнаму серверу вагу (або перавагу), якая звычайна прапарцыйная яго магутнасці. Чым больш запытаў атрымлівае сервер, тым вышэй вага. Напрыклад, сервер з вагавым значэннем два атрымлівае ў два разы больш запытаў, чым сервер з вагавым значэннем адзін.
- Ліпкая сесія: Гэты падыход, таксама вядомы як захаванне сесіі, злучае пэўных кліентаў і сервераў на працягу сесіі. Каб усталяваць сувязь, балансір нагрузкі выкарыстоўвае файл cookie або IP-адрас карыстальніка для ідэнтыфікацыі атрыбута карыстальніка. Пасля ўстаноўкі злучэння запыты карыстальніка накіроўваюцца на той жа сервер да завяршэння сеанса. Гэта аптымізуе сеткавыя рэсурсы, а таксама паляпшае карыстацкі досвед.
- Найменш сувязяў: Гэтая стратэгія мяркуе, што ўсе запыты прыводзяць да роўнай нагрузкі на сервер. У выніку сервер з найменшай колькасцю запытаў атрымлівае наступны запыт.
- IP-хэш: Гэты алгарытм стварае унікальны хэш-ключ на аснове IP-адрасоў крыніцы і прызначэння кліента і сервера. Ключ выкарыстоўваецца для маршрутызацыі запыту і дазваляе аднавіць страчанае злучэнне з тым жа серверам.
Абсталяванне Vs. Праграмныя балансіроўкі нагрузкі
Апаратны балансір нагрузкі
Фізічнае абсталяванне, такое як прылада, складае апаратныя балансіры нагрузкі. Яны накіроўваюць трафік на серверы ў залежнасці ад такіх фактараў, як колькасць існуючых злучэнняў, выкарыстанне працэсара і прадукцыйнасць сервера. Апаратныя балансіроўшчыкі нагрузкі маюць запатэнтаваную прашыўку, якую неабходна падтрымліваць і абнаўляць, калі з'яўляюцца новыя версіі і выпраўленні бяспекі.
Апаратныя балансіроўшчыкі нагрузкі часта забяспечваюць больш высокую прадукцыйнасць і кантроль, а таксама больш шырокі спектр магчымасцей, такіх як аўтэнтыфікацыя Kerberos і апаратнае паскарэнне SSL, але яны патрабуюць пэўнага ўзроўню ведаў у кіраванні і абслугоўванні. Паколькі апаратныя балансіроўшчыкі нагрузкі менш гнуткія і маштабуюцца, чым праграмныя балансіроўшчыкі нагрузкі, існуе схільнасць да празмернага забеспячэння апаратных балансіроўшчыкаў нагрузкі.
Праграмны балансір нагрузкі
Праграмныя балансіроўшчыкі нагрузкі звычайна прасцей наладзіць, чым іх апаратныя аналагі. Яны таксама больш эканамічна эфектыўныя і адаптаваныя, і яны добра працуюць з асяроддзямі распрацоўкі праграмнага забеспячэння. Праграмны метад дазваляе вам наладзіць балансір нагрузкі ў адпаведнасці з дакладнымі патрабаваннямі вашага асяроддзя. Падвышаная гнуткасць можа адбыцца за кошт дадатковага часу, затрачанага на наладжванне балансіроўшчыка нагрузкі.
Праграмныя балансіры забяспечваюць большую гібкасць для ўнясення мадыфікацый і абнаўленняў, чым апаратныя, якія маюць больш замкнёны падыход. Папярэдне спакаваныя віртуальныя машыны можна выкарыстоўваць у якасці праграмнага забеспячэння для балансіроўкі нагрузкі (VM). Віртуальныя машыны зэканомяць час наладкі, але яны могуць не мець усіх функцый, даступных у іх апаратных аналагах.
Простая рэалізацыя балансавання нагрузкі
Мы будзем выкарыстоўваць бібліятэку Spring Cloud для ствараць прыкладанні якія падключаюцца да іншых праграм з балансам нагрузкі. Падчас апрацоўкі запытаў на аддаленае абслугоўванне мы можам лёгка пабудаваць балансаванне нагрузкі, выкарыстоўваючы любую тэхніку, якая нам падабаецца. Разгледзім наступны код у якасці прыкладу. Мы пачнем з базавага сервернага прыкладання.
Сервер будзе мець толькі адну канчатковую кропку HTTP і будзе працаваць у некалькіх выпадках. Затым мы створым кліенцкае прыкладанне, якое будзе выкарыстоўваць Load Balancer для размеркавання запытаў паміж некалькімі экземплярамі сервера.
сервер
Мы пачынаем з асноўнага Вясновы бот прыкладанне для нашага прыкладу сервера:
Для пачатку мы ўводзім наладжвальную зменную пад назвай instance_ID. Гэта дапамагае нам адрозніваць шматлікія асобнікі, якія працуюць. Пасля гэтага мы ствараем адзіную канечную кропку HTTP GET, якая вяртае паведамленне і ідэнтыфікатар асобніка.
Экземпляр па змаўчанні з ID 1 будзе працаваць на порце 8080. Нам трэба толькі дадаць некалькі параметраў праграмы, каб запусціць другі экземпляр:
Кліент
Давайце зараз паглядзім на кліенцкі код. Вось тут і прыходзіць балансіроўка нагрузкі, таму давайце пачнем з уключэння яго ў наша дадатак:
Пасля гэтага мы распрацоўваем рэалізацыю ServiceInstanceListSupplier. Гэта адзін з самых важных інтэрфейсаў у Load Balancer. Ён вызначае, як мы знаходзім даступныя асобнікі службы.
Мы жорстка закадзіруем два асобныя асобнікі нашага прыкладу сервера ў нашым прыкладзе прыкладання. Яны працуюць у адной сістэме, але выкарыстоўваюць розныя парты:
Стварыце клас LoadBalancerConfiguration зараз:
Гэты клас мае толькі адну мэту: ён стварае канструктар WebClient з балансам нагрузкі для аддаленых запытаў. Наша анатацыя выкарыстоўвае выдуманую назву сэрвісу.
Гэта звязана з тым, што мы, хутчэй за ўсё, не будзем ведаць дакладныя імёны хастоў і парты для запуску асобнікаў раней часу. У выніку мы выкарыстоўваем выдуманае імя ў якасці запаўняльніка, і фрэймворк заменіць рэальную інфармацыю пры выбары запушчанага асобніка.
Далей давайце створым клас канфігурацыі, які будзе выкарыстоўвацца для стварэння экземпляра нашай службы. Звярніце ўвагу, што мы выкарыстоўваем той жа псеўданім, што і раней:
Цяпер мы можам стварыць сапраўднае кліенцкае прыкладанне. Давайце адправім 10 запытаў на ўзорны сервер з дапамогай кампанента WebClient з ранейшай версіі:
Мы бачым з вываду, што мы балансуем нагрузку паміж двума асобнымі асобнікамі:
Балансіроўка нагрузкі ў мікрасэрвісах
Архітэктура мікрасэрвісаў выкарыстоўваецца некалькімі кампаніямі, такімі як Netflix і Amazon, для распрацоўкі бізнес-прыкладанняў як набору слаба звязаных сэрвісаў. Гіпермаштаб і бесперапынная пастаўка для складаных прыкладанняў - толькі дзве прычыны пераходу да гэтай размеркаванай, слаба звязанай архітэктуры.
Каманды гэтых прадпрыемстваў укаранілі стратэгіі Agile і DevOps, каб ствараць праграмы хутчэй і з меншай частатой адмоваў, чым традыцыйнымі метадамі. Аднак вы павінны знайсці баланс паміж складанасцю размеркаванай архітэктуры і патрабаваннямі прыкладання, патрабаваннямі да маштабу і абмежаваннямі часу выхаду на рынак.
На працягу многіх гадоў кантралёры дастаўкі прыкладанняў (ADC) былі вырашальнымі для задавальнення патрабаванняў да ўзроўню абслугоўвання для карпаратыўных прыкладанняў, размешчаных лакальна або ў воблаку. Кліенту, які працуе з дадаткам на аснове мікрасэрвісаў, не трэба ведаць аб асобніках, якія яго прадастаўляюць, каб самастойна развіваць кліент і мікрасэрвісы.
Гэта менавіта тое развязванне, якое забяспечваецца зваротным проксі-серверам або балансірам нагрузкі. Зноў жа, балансаванне нагрузкі - гэта рашэнне для забеспячэння таго, каб мікрасэрвісы спраўляліся з попытам, бяспекай і даступнасцю.
Калі вы аб'яднаеце традыцыйнае размеркаванне нагрузкі "Поўнач-Поўдзень" паміж кліенцкімі праграмамі і праграмамі на аснове мікрасэрвісаў з разгортваннем "Усход-Захад" для гарызантальнай маштабаванасці, вы атрымаеце істотны прырост. Мэта складаецца ў тым, каб падтрымліваць бяспечнае і рэгуляванае асяроддзе, неабходнае ІТ, без шкоды для манеўранасці распрацоўкі Аўтаматызацыя DevOps патрабаванні.
льготы
Балансіроўка нагрузкі забяспечвае розныя перавагі за кошт паляпшэння выкарыстання рэсурсаў, дастаўкі даных і часу водгуку для вэб-сайтаў і праграм з вялікім трафікам, а таксама баз даных, якія атрымліваюць вялікую колькасць запытаў. Балансіроўка нагрузкі гарантуе хуткае і карэктнае выкананне запытаў карыстальнікаў у сцэнарыях з вялікім трафікам.
Яны пазбаўляюць карыстальнікаў ад працы з млявымі праграмамі і рэсурсамі. Балансіроўка нагрузкі таксама дапамагае пазбегнуць прастояў і спрашчае бяспеку, зніжаючы рызыку страты прадукцыйнасці і прыбытку для вашай кампаніі.
- Балансіроўка нагрузкі забяспечвае гнуткасць дадання і выдалення сервераў у залежнасці ад попыту, у дадатак да кіравання трафікам з аптымальнай эфектыўнасцю. Паколькі падчас тэхнічнага абслугоўвання трафік перанакіроўваецца на іншыя серверы, таксама магчыма правесці тэхнічнае абслугоўванне сервера, не парушаючы працы карыстальнікаў.
- Балансіроўка нагрузкі забяспечвае ўбудаваную надмернасць, размяркоўваючы трафік паміж наборам сервераў. Вы можаце неадкладна перанакіраваць нагрузку на іншыя серверы, калі адзін з іх выходзіць з ладу, зводзячы да мінімуму ўздзеянне на карыстальнікаў.
- Калі выкарыстанне прыкладання або вэб-сайта расце, павелічэнне трафіку можа пагоршыць іх прадукцыйнасць, калі не апрацоўваць іх эфектыўна. З дапамогай балансіроўкі нагрузкі вы можаце дадаць рэальны або віртуальны сервер, каб задаволіць попыт, не парушаючы абслугоўванне. Балансір нагрузкі ідэнтыфікуе новыя серверы па меры іх выхаду ў сетку і лёгка ўключае іх у працу. Гэты метад пераважней, чым перанос вэб-сайта з перагружанага сервера на новы, што часта прадугледжвае некаторы час прастою.
заключэнне
Балансіроўка нагрузкі з'яўляецца найважнейшым кампанентам сучасных адмоваўстойлівых сістэм. Мы можам проста ствараць прыкладанні, якія размяркоўваюць запыты ў некалькі асобнікаў службы, выкарыстоўваючы розныя падыходы да балансіроўкі нагрузкі. Кампаніі павінны падтрымліваць складаныя ІТ-сістэмы, каб бяспечна прадастаўляць прыкладанні.
Канфігурацыя, разгортванне і абслугоўванне міждаменных мікрасэрвісаў могуць быць схільнымі да памылак, дарагімі і працаёмкімі. Каб палегчыць наладжванне і абслугоўванне гэтых мікрасэрвісаў, ІТ-аддзелы павінны выкарыстоўваць лепшыя практыкі і тэхналогіі аўтаматызацыі, бачнасці, аналітыкі і аркестроўкі, якія сумяшчальныя з іх гнуткімі працэсамі і працэсамі DevOps.
Пакінуць каментар