Балансаванне нагрузкі з дапамогай AWS ELB

Ўсім прывітанне! Ужо сёння стартуе курс "AWS для распрацоўшчыкаў", у сувязі з чым мы правялі адпаведны тэматычны вэбінар, прысвечаны агляду ELB. Мы разгледзелі віды балансавальнікаў і стварылі некалькі інстанс EC2 з балансавальніка. А таксама вывучылі іншыя прыклады выкарыстання.

Балансаванне нагрузкі з дапамогай AWS ELB

Праслухаўшы вэбінар, Вы будзеце:

  • разумець, што такое AWS Load Balancing;
  • ведаць тыпы Elastic Load Balancer і яго кампаненты;
  • выкарыстоўваць AWS ELB у вашай практыцы.

Навошта ўвогуле гэта ўмець:

  • карысна, калі плануеце здаваць іспыты сертыфікацыі AWS;
  • гэта просты спосаб размеркавання нагрузкі паміж серверамі;
  • гэта просты спосаб дадання Lambda ў ваш сэрвіс (ALB).

Адкрыты ўрок правёў Ришат Тэрэгуляў, сістэмны інжынер у маркетынгавай кампаніі па распрацоўцы і падтрымцы сайтаў.

Увядзенне

Што такое Elastic Load Balancer, можна ўбачыць на дыяграме ніжэй, дзе прадстаўлены найпросты прыклад:

Балансаванне нагрузкі з дапамогай AWS ELB

Load Balancer прымае рэквесты і размяркоўвае іх па інстансе. У нас ёсць адзін асобны інстанс, ёсць Lambda-функцыі і ёсць AutoScaling-група (група сервераў).

Тыпы AWS ELB

1. Разгледзім асноўныя тыпы:

Classic Load Balancer. Самы першы балансавальнік ад AWS, працуе як на 4-м, так і на 7-м узроўні OSI, падтрымліваюцца HTTP, HTTPS, TCP і SSL. Ён забяспечвае базавую балансаванне нагрузкі паміж некалькімі інстансамі Amazon EC2 і працуе як на ўзроўні запытаў, так і на ўзроўні злучэння. Давайце яго адкрыем (вылучаны шэрым):

Балансаванне нагрузкі з дапамогай AWS ELB

Гэты балансар лічыцца састарэлым, таму рэкамендуецца да выкарыстання толькі ў асобных выпадках. Напрыклад, для прыкладанняў, якія былі пабудаваны ў сетцы EC2‑Classic. У прынцыпе, нам ніхто не мяшае яго стварыць:

Балансаванне нагрузкі з дапамогай AWS ELB

2. Network Load Balancer. Падыходзіць для высокай нагрузкі, працуе на 4-м узроўні OSI (можна выкарыстоўваць у EKS і ECS), падтрымліваюцца TCP, UDP і TLS.

Network Load Balancer накіроўвае трафік на мэтавыя аб'екты ў Amazon VPC і здольны апрацоўваць мільёны запытаў у секунду пры звышнізкіх затрымках. Акрамя таго, ён аптымізаваны для апрацоўкі мадэляў трафіку з раптоўнай і зменлівай нагрузкай.

3. Application Load Balancer. Працуе на 7-м узроўні, мае падтрымку Lambda, падтрымлівае правілы на ўзроўні загалоўкаў і шляхоў, падтрымліваюцца HTTP і HTTPS.
Забяспечвае пашыраную маршрутызацыю запытаў, арыентаваную на дастаўку дадаткаў, пабудаваных на базе сучасных архітэктур, у тым ліку мікрасэрвісы і кантэйнеры. Накіроўвае трафік на мэтавыя аб'екты ў Amazon VPC, абапіраючыся на змесціва запыту.

Для шматлікіх карыстачоў, Application Load Balancer перш за ўсё замяніў Classic Load Balancer, бо TCP не так распаўсюджаны ў адрозненне ад HTTP.

Створым яго таксама, у выніку чаго ў нас ужо будуць два балансавальнікі нагрузкі:

Балансаванне нагрузкі з дапамогай AWS ELB

Кампаненты Load Balance

Агульныя кампаненты Load Balance (уласцівыя ўсім балансавальнікам):

  • Access Logging Policy

- вашыя часопісы доступу да ELB. Каб выканаць налады, можна перайсці ў Description і выбраць кнопку "Edit attributes":

Балансаванне нагрузкі з дапамогай AWS ELB

Потым паказваем S3Bucket - аб'ектнае сховішча Amazon:

Балансаванне нагрузкі з дапамогай AWS ELB

  • схема

- унутраны або знешні балансавальнік. Сэнс у тым, ці павінен ваш LoadBalancer атрымаць знешнія адрасы, каб быць даступным звонку, ці гэта можа быць ваш унутраны балансавальнік;

  • групы бяспекі

- Кантроль доступу да балансавальнік. Па сутнасці гэта высокаўзроўневы файрвол.

Балансаванне нагрузкі з дапамогай AWS ELB

Балансаванне нагрузкі з дапамогай AWS ELB

  • Падсеткі

- падсеткі ўнутры вашай VPC (адпаведна, і зоны даступнасці). Subnets указваецца пры стварэнні. Калі VPC абмежаваны рэгіёнам, то Subnets абмежаваны па зонах даступнасці. Калі ствараеце Load Balancer, лепш ствараць яго прынамсі ў двух падсетках (дапамагае, калі з адной зонай даступнасці ўзнікнуць праблемы);

  • слухачы

- вашы пратаколы балансавальніка. Як ужо было сказана раней, для Classic Load Balancer гэта можа быць HTTP, HTTPS, TCP і SSL, для Network Load Balancer – TCP, UDP і TLS, для Application Load Balancer – HTTP і HTTPS.

Прыклад для Classic Load Balancer:

Балансаванне нагрузкі з дапамогай AWS ELB

А вось у Application Load Balancer мы бачым і крыху іншы інтэрфейс, і ў цэлым іншую логіку:

Балансаванне нагрузкі з дапамогай AWS ELB

Кампаненты Load Balancer v2 (ALB і NLB)

Цяпер падрабязней разгледзім балансавальнікі 2-й версіі Application Load Balancer і Network Load Balancer. У гэтых балансавальнікаў ёсць свае кампанентныя асаблівасці. Напрыклад, з'явілася такое паняцце, як Target Groups – інстансы (і функцыі). Дзякуючы гэтаму кампаненту, у нас з'явілася магчымасць паказваць, на які з Target Groups мы жадаем накіроўваць трафік.

Балансаванне нагрузкі з дапамогай AWS ELB

Балансаванне нагрузкі з дапамогай AWS ELB

Кажучы простай мовай, у Target Groups мы паказваем інстансы, куды будзе прыходзіць трафік. Калі ў тым жа Classic Load Balancer вы проста адразу падлучаеце інтэнсы да балансавальніка, то ў Application Load Balancer вы спачатку:

  • ствараеце Load Balancer;
  • ствараеце Target-групу;
  • накіроўваеце па патрэбных партах або правілах Load Balancer на патрэбныя Target Groups;
  • у Target-групах прызначаеце інстансы.

Такая логіка працы можа здацца складаней, але насамрэч яна зручней.

Наступны кампанент - Listener rules (правілы для маршрутызацыі). Гэта ўжо датычыцца толькі Application Load Balancer. Калі ў Network Load Balancer вы проста ствараеце Listener, і ён шле трафік на пэўную Target-групу, то ў Application Load Balancer усё весялей і зручней.

Балансаванне нагрузкі з дапамогай AWS ELB

Цяпер скажам пару слоў пра наступны кампанент - Эластычны IP (статычныя адрасы для NLB). Калі правілы для маршрутызацыі Listener rules дакраналіся толькі Application Load Balancer, то Elastic IP дакранаецца толькі Network Load Balancer.

Створым Network Load Balancer:

Балансаванне нагрузкі з дапамогай AWS ELB

Балансаванне нагрузкі з дапамогай AWS ELB

І якраз падчас стварэнняў мы ўбачым, што нам даецца магчымасць абраць Elastic IP:

Балансаванне нагрузкі з дапамогай AWS ELB

Elastic IP падае адзіны IP-адрас, які можна звязаць з рознымі асобнікамі EC2 у часе. Калі асобнік EC2 мае Elastic IP-адрас і гэты экзэмпляр завершаны ці спынены, можна неадкладна звязаць новы асобнік EC2 з адрасам Elastic IP. Пры гэтым ваша бягучае прыкладанне не спыніць працу, бо прыкладанні бачаць усё той жа IP-адрас, нават калі рэальны EC2 змяніўся.

Вось яшчэ адзін юз-кейс на тэму таго, навошта патрэбен Elastic IP. Глядзіце, мы бачым 3 IP-адрасы, але яны не назаўжды тут застануцца:

Балансаванне нагрузкі з дапамогай AWS ELB

Amazon мяняе іх з цягам часу, можа рабіць гэта кожныя 60 секунд (але на практыцы, вядома, радзей). Значыць, IP-адрасы могуць памяняцца. А ў выпадку з Network Load Balancer вы як раз можаце прывязаць айпішнік і ўказваць яго ў вашых правілах, палітыках і да т.п.

Балансаванне нагрузкі з дапамогай AWS ELB

Робім высновы

ELB забяспечвае аўтаматычнае размеркаванне ўваходзіць трафіку па некалькіх мэтавым аб'ектах (кантэйнеры, інстансы Amazon EC2, IP-адрасы і функцыі Lambda). ELB здольны размяркоўваць трафік з зменлівай нагрузкай як у адной зоне даступнасці, так і паміж некалькімі зонамі даступнасці. Карыстальнік можа абраць з трох тыпаў балансавальнікаў, якія забяспечваюць і высокую даступнасць, і аўтамаштабаванне, і нядрэнную абарону. Усё гэта важна для забеспячэння адмоваўстойлівасці вашых прыкладанняў.

Асноўныя плюсы:

  • высокая даступнасць. У пагадненні аб абслугоўванні маецца на ўвазе 99,99% даступнасці для балансавальніка нагрузкі. Напрыклад, некалькі зон даступнасці гарантуе, што трафік будзе апрацаваны толькі спраўнымі аб'ектамі. Уласна кажучы, можна балансаваць нагрузку і па ўсім рэгіёне, ажыццяўляючы перанакіраванне трафіку на спраўныя мэтавыя аб'екты ў розных зонах даступнасці;
  • бяспеку. ELB працуе з Amazon VPC, падаючы розныя магчымасці па забеспячэнні бяспекі – гэта і інтэграванае кіраванне сертыфікатамі, і аўтэнтыфікацыя карыстачоў, і расшыфроўка SSL/TLS. Усё разам забяспечвае цэнтралізаванае і гнуткае кіраванне наладамі TLS;
  • эластычнасць. ELB можа выконваць апрацоўку раптоўных змен сеткавага трафіку. А глыбокая інтэграцыя з Auto Scaling дае з дадаткам дастаткова рэсурсаў, калі змяняецца нагрузка, прычым ручное ўмяшанне не спатрэбіцца;
  • гнуткасць. Можна ўжываць IP-адрасы для маршрутызацыі запытаў да мэтавых аб'ектаў вашых прыкладанняў. Гэта гарантуе гнуткасць пры віртуалізацыі мэтавых прыкладанняў, даючы такім чынам магчымасць размяшчаць адразу некалькі прыкладанняў на адным інстансе. Так як праграмы могуць выкарыстоўваць адзін сеткавы порт і маюць асобныя групы бяспекі, спрашчаецца ўзаемадзеянне паміж праграмамі, калі ў нас архітэктура, дапусцім, на аснове мікрасэрвісаў;
  • маніторынг і аўдыт. Можна ажыццяўляць маніторынг прыкладанняў у рэал-тайме, выкарыстоўваючы функцыі Amazon CloudWatch. Гаворка ідзе аб метрыках, часопісах, удасканаленьні запытаў. Кажучы простай мовай, вы зможаце выяўляць праблемы і даволі дакладна вызначаць вузкія месцы прадукцыйнасці;
  • гібрыдная балансіроўка нагрузкі. Магчымасць балансавання нагрузкі паміж лакальнымі рэсурсамі і AWS з ужываннем аднаго і таго ж балансавальніка спрашчае міграцыю або пашырэнне лакальных прыкладанняў у воблака. Спрашчаецца і апрацоўка адмоў з ужываннем аблокі.

Калі цікавяць падрабязнасці, вось яшчэ пару карысных спасылак з афіцыйнага сайта Amazon:

  1. Эластычнае балансаванне нагрузкі.
  2. Магчымасці Elastic Load Balancing.

Крыніца: habr.com

Дадаць каментар