Sveiki visiem! Mani sauc Kirils, es esmu Adapty CTO. LielÄkÄ daļa mÅ«su arhitektÅ«ras ir uz AWS, un Å”odien es runÄÅ”u par to, kÄ mÄs 3 reizes samazinÄjÄm servera izmaksas, ražoÅ”anas vidÄ izmantojot vietas gadÄ«jumus, kÄ arÄ« to, kÄ iestatÄ«t to automÄtisko mÄrogoÅ”anu. Vispirms bÅ«s pÄrskats par to, kÄ tas darbojas, un pÄc tam detalizÄti norÄdÄ«jumi par darba sÄkÅ”anu.
Kas ir spot instances?
TÄlÄk ir sniegti daži ekrÄnuzÅÄmumi, kas parÄda tÅ«lÄ«tÄju gadÄ«jumu cenu vÄsturi.
m5.liels eu-west-1 (ÄŖrija) reÄ£ionÄ. Cena pÄrsvarÄ ir stabila 3 mÄneÅ”us, Å”obrÄ«d ietaupot 2.9x.
m5.liels ASV-austrumu-1 reÄ£ionÄ (N. Virdžīnija). Cena nepÄrtraukti mainÄs 3 mÄneÅ”u laikÄ, Å”obrÄ«d ietaupot no 2.3x lÄ«dz 2.8x atkarÄ«bÄ no pieejamÄ«bas zonas.
t3.mazs us-east-1 reÄ£ionÄ (N. Virdžīnija). Cena ir stabila 3 mÄneÅ”us, Å”obrÄ«d ietaupa 3.4x.
Pakalpojumu arhitektūra
Pakalpojuma pamata arhitektÅ«ra, par kuru mÄs runÄsim Å”ajÄ rakstÄ, ir parÄdÄ«ta zemÄk esoÅ”ajÄ diagrammÄ.
Lietojumprogramma Load Balancer ā EC2 mÄrÄ·a grupa ā ElastÄ«go konteineru serviss
Lietojumprogrammas slodzes lÄ«dzsvarotÄjs (ALB) tiek izmantots kÄ balansÄtÄjs, kas nosÅ«ta pieprasÄ«jumus EC2 mÄrÄ·a grupai (TG). TG ir atbildÄ«gs par portu atvÄrÅ”anu ALB gadÄ«jumos un savienoÅ”anu ar elastÄ«go konteineru pakalpojuma (ECS) konteineru portiem. ECS ir Kubernetes analogs AWS, kas pÄrvalda Docker konteinerus.
Vienai instancei var bÅ«t vairÄki darbojas konteineri ar vienÄdiem portiem, tÄpÄc mÄs nevaram tos iestatÄ«t fiksÄti. ECS paziÅo TG, ka tas palaiž jaunu uzdevumu (Kubernetes terminoloÄ£ijÄ to sauc par podziÅu), tÄ pÄrbauda, āāvai instancÄ nav brÄ«vu portu, un vienu no tiem pieŔķir palaistajam uzdevumam. TG arÄ« regulÄri pÄrbauda, āāvai instance un API strÄdÄ pie tÄ, izmantojot veselÄ«bas pÄrbaudi, un, ja tÄ konstatÄ problÄmas, pÄrtrauc pieprasÄ«jumu sÅ«tÄ«Å”anu.
EC2 automÄtiskÄs mÄrogoÅ”anas grupas + ECS jaudas nodroÅ”inÄtÄji
IepriekÅ” redzamajÄ diagrammÄ nav parÄdÄ«ts EC2 automÄtiskÄs mÄrogoÅ”anas grupu (ASG) pakalpojums. No nosaukuma var saprast, ka tas ir atbildÄ«gs par gadÄ«jumu mÄrogoÅ”anu. TomÄr vÄl nesen AWS nebija iebÅ«vÄtas iespÄjas pÄrvaldÄ«t ECS strÄdÄjoÅ”o maŔīnu skaitu. ECS ļÄva mÄrogot uzdevumu skaitu, piemÄram, pÄc CPU lietojuma, RAM vai pieprasÄ«jumu skaita. Bet, ja uzdevumi aizÅÄma visus bezmaksas gadÄ«jumus, jaunas maŔīnas netika izveidotas automÄtiski.
Tas ir mainÄ«jies lÄ«dz ar ECS jaudas nodroÅ”inÄtÄju (ECS CP) parÄdÄ«Å”anos. Tagad katru pakalpojumu ECS var saistÄ«t ar ASG, un, ja uzdevumi neietilpst esoÅ”ajos gadÄ«jumos, tiks paaugstinÄti jauni (bet noteikto ASG robežÄs). Tas darbojas arÄ« pretÄjÄ virzienÄ, ja ECS CP redz dÄ«kstÄves gadÄ«jumus bez uzdevumiem, tad tas dos ASG komandu, lai tÄs izslÄgtu. ECS CP ir iespÄja norÄdÄ«t mÄrÄ·a slodzes procentuÄlo daļu, lai noteikts maŔīnu skaits vienmÄr bÅ«tu brÄ«vs Ätrai mÄrogoÅ”anas uzdevumu veikÅ”anai; par to es runÄÅ”u nedaudz vÄlÄk.
EC2 palaiŔanas veidnes
PÄdÄjais pakalpojums, par kuru es runÄÅ”u pirms Ŕīs infrastruktÅ«ras izveides, ir EC2 palaiÅ”anas veidnes. Tas ļauj jums izveidot veidni, pÄc kuras visas maŔīnas sÄks darboties, lai katru reizi to neatkÄrtotu no nulles. Å eit jÅ«s varat izvÄlÄties startÄjamÄs maŔīnas veidu, droŔības grupu, diska attÄlu un daudzus citus parametrus. Varat arÄ« norÄdÄ«t lietotÄja datus, kas tiks augÅ”upielÄdÄti visÄs palaistajÄs instancÄs. Varat palaist skriptus lietotÄja datos, piemÄram, varat rediÄ£Ät faila saturu
Viens no svarÄ«gÄkajiem Ŕī raksta konfigurÄcijas parametriem ir
AttiecÄ«bÄ uz disku - AWS nesen
Pakalpojuma izveide
PÄriesim pie aprakstÄ«tÄ pakalpojuma izveidoÅ”anas. Å ajÄ procesÄ es papildus aprakstÄ«Å”u vairÄkus noderÄ«gus punktus, kas netika minÄti iepriekÅ”. KopumÄ Å”Ä« ir soli pa solim sniegta instrukcija, taÄu es neapskatÄ«Å”u dažus ļoti elementÄrus vai, gluži pretÄji, ļoti konkrÄtus gadÄ«jumus. Visas darbÄ«bas tiek veiktas AWS vizuÄlajÄ konsolÄ, taÄu tÄs var reproducÄt programmatiski, izmantojot CloudFormation vai Terraform. UzÅÄmumÄ Adapty mÄs izmantojam Terraform.
EC2 palaiŔanas veidne
Å is pakalpojums izveido to iekÄrtu konfigurÄciju, kuras tiks izmantotas. Veidnes tiek pÄrvaldÄ«tas sadaÄ¼Ä EC2 -> Instances -> Launch templates.
Amazon maŔīnas attÄls (AMI) ā norÄdiet diska attÄlu, ar kuru tiks palaists visi gadÄ«jumi. AttiecÄ«bÄ uz ECS vairumÄ gadÄ«jumu ir vÄrts izmantot optimizÄto attÄlu no Amazon. Tas tiek regulÄri atjauninÄts un satur visu nepiecieÅ”amo, lai ECS darbotos. Lai uzzinÄtu paÅ”reizÄjo attÄla ID, dodieties uz lapu
GadÄ«juma veids ā norÄda gadÄ«juma veidu. IzvÄlieties to, kas vislabÄk atbilst jÅ«su uzdevumam.
AtslÄgu pÄris (pieteikÅ”anÄs) ā norÄdiet sertifikÄtu, ar kuru, ja nepiecieÅ”ams, varat izveidot savienojumu ar gadÄ«jumu, izmantojot SSH.
TÄ«kla iestatÄ«jumi ā norÄdÄ«t tÄ«kla parametrus. TÄ«kla platforma vairumÄ gadÄ«jumu vajadzÄtu bÅ«t Virtual Private Cloud (VPC). DroŔības grupas ā droŔības grupas jÅ«su gadÄ«jumiem. TÄ kÄ instanÄu priekÅ”Ä izmantosim balansÄtÄju, iesaku Å”eit norÄdÄ«t grupu, kas pieļauj ienÄkoÅ”os savienojumus tikai no balansiera. Tas nozÄ«mÄ, ka jums bÅ«s 2 droŔības grupas, viena balansÄtÄjam, kas nodroÅ”ina ienÄkoÅ”os savienojumus no jebkuras vietas portos 80 (http) un 443 (https), un otrÄ iekÄrtÄm, kas ļauj ienÄkoÅ”os savienojumus jebkurÄ portÄ no balansÄtÄja grupas. . IzejoÅ”ie savienojumi abÄs grupÄs ir jÄatver, izmantojot TCP protokolu uz visiem portiem uz visÄm adresÄm. Varat ierobežot portus un adreses izejoÅ”ajiem savienojumiem, taÄu tad jums pastÄvÄ«gi jÄuzrauga, vai jÅ«s nemÄÄ£inÄt kaut kam piekļūt slÄgtÄ portÄ.
KrÄtuve (apjomi) ā norÄdiet maŔīnu diska parametrus. Diska izmÄrs nedrÄ«kst bÅ«t mazÄks par AMI norÄdÄ«to; ECS Optimized tas ir 30 GiB.
Papildu informÄcija ā norÄdÄ«t papildu parametrus.
PirkÅ”anas iespÄja ā vai mÄs vÄlamies pirkt vietas eksemplÄrus. MÄs vÄlamies, bet mÄs neatzÄ«mÄsim Å”o izvÄles rÅ«tiÅu; mÄs to konfigurÄsim automÄtiskÄs mÄrogoÅ”anas grupÄ, tur ir vairÄk iespÄju.
IAM instances profils ā norÄdiet lomu, ar kÄdu instances tiks uzsÄktas. Lai gadÄ«jumi darbotos ECS, tiem ir nepiecieÅ”amas atļaujas, kas parasti ir atrodamas lomÄ ecsInstanceRole. Dažos gadÄ«jumos to var izveidot, ja nÄ, tad Å”eit
TÄlÄk ir daudz parametru, bÅ«tÄ«bÄ jÅ«s varat atstÄt noklusÄjuma vÄrtÄ«bas visur, taÄu katram no tiem ir skaidrs apraksts. Es vienmÄr iespÄjoju EBS optimizÄto gadÄ«jumu un T2/T3 Unlimited opcijas, ja tÄs tiek izmantotas
LietotÄjs laiks ā norÄda lietotÄja datus. MÄs rediÄ£Äsim failu /etc/ecs/ecs.config
, kurÄ ir ECS aÄ£enta konfigurÄcija.
PiemÄrs tam, kÄ varÄtu izskatÄ«ties lietotÄja dati:
#!/bin/bash
echo ECS_CLUSTER=DemoApiClusterProd >> /etc/ecs/ecs.config
echo ECS_ENABLE_SPOT_INSTANCE_DRAINING=true >> /etc/ecs/ecs.config
echo ECS_CONTAINER_STOP_TIMEOUT=1m >> /etc/ecs/ecs.config
echo ECS_ENGINE_AUTH_TYPE=docker >> /etc/ecs/ecs.config
echo "ECS_ENGINE_AUTH_DATA={"registry.gitlab.com":{"username":"username","password":"password"}}" >> /etc/ecs/ecs.config
ECS_CLUSTER=DemoApiClusterProd
ā parametrs norÄda, ka instance pieder klasterim ar doto nosaukumu, tas ir, Å”is klasteris varÄs izvietot savus uzdevumus Å”ajÄ serverÄ«. MÄs vÄl neesam izveidojuÅ”i klasteri, bet mÄs izmantosim Å”o nosaukumu, veidojot to.
ECS_ENABLE_SPOT_INSTANCE_DRAINING=true
ā parametrs norÄda, ka tad, kad tiek saÅemts signÄls, lai izslÄgtu vietas instanci, visi tajÄ esoÅ”ie uzdevumi ir jÄpÄrsÅ«ta uz Draining statusu.
ECS_CONTAINER_STOP_TIMEOUT=1m
- parametrs norÄda, ka pÄc SIGINT signÄla saÅemÅ”anas visiem uzdevumiem ir 1 minÅ«te pirms nogalinÄÅ”anas.
ECS_ENGINE_AUTH_TYPE=docker
ā parametrs norÄda, ka Docker shÄma tiek izmantota kÄ autorizÄcijas mehÄnisms
ECS_ENGINE_AUTH_DATA=...
ā savienojuma parametri ar privÄto konteineru reÄ£istru, kurÄ tiek glabÄti jÅ«su Docker attÄli. Ja tas ir publisks, tad nekas nav jÄnorÄda.
Å Ä« raksta vajadzÄ«bÄm es izmantoÅ”u publisko attÄlu no Docker Hub, tÄpÄc norÄdiet parametrus ECS_ENGINE_AUTH_TYPE
Šø ECS_ENGINE_AUTH_DATA
nevajag.
Labi zinÄt: Ieteicams regulÄri atjauninÄt AMI, jo jaunÄs versijas atjaunina Docker, Linux, ECS aÄ£enta uc versijas. Lai par to neaizmirstu, varat
EC2 automÄtiskÄs mÄrogoÅ”anas grupa
Auto Scaling Group ir atbildÄ«ga par gadÄ«jumu palaiÅ”anu un mÄrogoÅ”anu. Grupas tiek pÄrvaldÄ«tas sadaÄ¼Ä EC2 -> Auto Scaling -> Auto Scaling Groups.
Palaist veidni ā atlasiet iepriekÅ”ÄjÄ darbÄ«bÄ izveidoto veidni. MÄs atstÄjam noklusÄjuma versiju.
PirkÅ”anas iespÄjas un gadÄ«jumu veidi ā norÄdiet klastera gadÄ«jumu veidus. IevÄrot palaiÅ”anas veidni izmanto palaiÅ”anas veidnes instances veidu. PirkÅ”anas opciju un gadÄ«jumu veidu apvienoÅ”ana ļauj elastÄ«gi konfigurÄt gadÄ«jumu tipus. MÄs to izmantosim.
IzvÄles bÄze pÄc pieprasÄ«juma ā parasto gadÄ«jumu skaits, kas vienmÄr darbosies.
PÄc pieprasÄ«juma procentuÄlÄ daļa virs bÄzes ā parasto un spot instanÄu procentuÄlÄ attiecÄ«ba, 50-50 tiks sadalÄ«ti vienÄdi, 20-80 uz katru parasto instanci tiks pacelti 4 spot instanci. Å Ä« piemÄra vajadzÄ«bÄm es norÄdÄ«Å”u 50-50, bet patiesÄ«bÄ mÄs visbiežÄk darÄm 20-80, dažos gadÄ«jumos 0-100.
InstanÄu veidi ā Å”eit varat norÄdÄ«t papildu gadÄ«jumu veidus, kas tiks izmantoti klasterÄ«. MÄs to nekad neizmantojÄm, jo āāes Ä«sti nesaprotu stÄsta nozÄ«mi. IespÄjams, tas ir saistÄ«ts ar ierobežojumiem noteikta veida gadÄ«jumiem, taÄu tos var viegli palielinÄt, izmantojot atbalstu. Ja zinÄt pieteikumu, es ar prieku to izlasÄ«Å”u komentÄros)
tÄ«kls ā tÄ«kla iestatÄ«jumi, atlasiet VPC un iekÄrtu apakÅ”tÄ«klus, vairumÄ gadÄ«jumu jums vajadzÄtu atlasÄ«t visus pieejamos apakÅ”tÄ«klus.
Slodzes lÄ«dzsvaroÅ”ana - balansiera iestatÄ«jumi, bet mÄs to darÄ«sim atseviŔķi, mÄs Å”eit neko nepieskarsim. VeselÄ«bas pÄrbaudes tiks konfigurÄts arÄ« vÄlÄk.
Grupas lielums ā startÄ norÄdÄm maŔīnu skaita ierobežojumus klasterÄ« un vÄlamo maŔīnu skaitu. IekÄrtu skaits klasterÄ« nekad nebÅ«s mazÄks par norÄdÄ«to minimumu un lielÄks par maksimÄlo, pat ja mÄrogoÅ”ana notiek saskaÅÄ ar metriku.
MÄrogoÅ”anas politikas ā mÄrogoÅ”anas parametri, bet mÄrogoÅ”ana tiks veikta, pamatojoties uz ECS uzdevumiem, tÄpÄc mÄrogoÅ”anu konfigurÄsim vÄlÄk.
GadÄ«juma mÄroga aizsardzÄ«ba ā gadÄ«jumu aizsardzÄ«ba pret dzÄÅ”anu, samazinot. MÄs to iespÄjojam, lai ASG neizdzÄstu maŔīnu, kurai ir darbÄ«bas uzdevumi. ECS jaudas nodroÅ”inÄtÄjs atspÄjos aizsardzÄ«bu gadÄ«jumiem, kuriem nav uzdevumu.
Pievienojiet tagus ā varat norÄdÄ«t instanÄu tagus (Å”im nolÅ«kam ir jÄatzÄ«mÄ izvÄles rÅ«tiÅa AtzÄ«mÄt jaunas instances). Es iesaku norÄdÄ«t vÄrda tagu, tad visiem grupas ietvaros palaistajiem gadÄ«jumiem bÅ«s vienÄds nosaukums, un tos ir Ärti skatÄ«t konsolÄ.
PÄc grupas izveidoÅ”anas atveriet to un dodieties uz sadaļu Advanced configurations.KÄpÄc izveides stadijÄ konsolÄ nav redzamas visas opcijas.
IzbeigÅ”anas politikas ā noteikumi, kas tiek Åemti vÄrÄ, dzÄÅ”ot gadÄ«jumus. Tie tiek piemÄroti secÄ«bÄ. MÄs parasti izmantojam tos, kas redzami zemÄk esoÅ”ajÄ attÄlÄ. PirmkÄrt, tiek dzÄsti gadÄ«jumi ar vecÄko palaiÅ”anas veidni (piemÄram, ja mÄs atjauninÄjÄm AMI, mÄs izveidojÄm jaunu versiju, taÄu visiem gadÄ«jumiem izdevÄs pÄrslÄgties uz to). PÄc tam tiek atlasÄ«ti gadÄ«jumi, kas ir vistuvÄk nÄkamajai norÄÄ·inu stundai. Un pÄc tam tiek atlasÄ«ti vecÄkie, pamatojoties uz palaiÅ”anas datumu.
Labi zinÄt: lai atjauninÄtu visas maŔīnas klasterÄ«, Ärti lietojamas
Lietojumprogrammas slodzes lÄ«dzsvarotÄjs un EC2 mÄrÄ·a grupa
BalansÄtÄjs tiek izveidots sadaÄ¼Ä EC2 ā Load Balancing ā Load Balancers. MÄs izmantosim Application Load Balancer; dažÄdu veidu balansÄtÄju salÄ«dzinÄjumu var lasÄ«t vietnÄ
KlausÄ«tÄji - ir jÄga izveidot portus 80 un 443 un pÄradresÄt no 80 uz 443, izmantojot balansÄÅ”anas noteikumus vÄlÄk.
PieejamÄ«bas zonas ā vairumÄ gadÄ«jumu mÄs izvÄlamies pieejamÄ«bas zonas ikvienam.
KonfigurÄjiet droŔības iestatÄ«jumus ā Å”eit norÄdÄ«ts balansÄtÄja SSL sertifikÄts, ÄrtÄkais variants ir ELBSecurityPolicy-2016-08
. PÄc balansiera izveidoÅ”anas jÅ«s to redzÄsit DNS nosaukums, kas jums ir nepiecieÅ”ams, lai konfigurÄtu sava domÄna CNAME. PiemÄram, Å”Ädi tas izskatÄs Cloudflare.
DroŔības grupa ā izveidot vai atlasÄ«t balansÄtÄja droŔības grupu, par to es vairÄk rakstÄ«ju tieÅ”i augstÄk sadaÄ¼Ä EC2 Launch Template ā Network settings.
MÄrÄ·a grupa ā mÄs izveidojam grupu, kas ir atbildÄ«ga par pieprasÄ«jumu marÅ”rutÄÅ”anu no balansiera uz maŔīnÄm un to pieejamÄ«bas pÄrbaudi, lai problÄmu gadÄ«jumÄ tÄs nomainÄ«tu. MÄrÄ·a tips jÄbÅ«t piemÄram, Protokols Šø osta jebkura, ja izmantojat HTTPS saziÅai starp balansÄtÄju un gadÄ«jumiem, jums ir jÄaugÅ”upielÄdÄ tajos sertifikÄts. Å Ä« piemÄra vajadzÄ«bÄm mÄs to nedarÄ«sim, mÄs vienkÄrÅ”i atstÄsim 80. portu.
VeselÄ«bas pÄrbaudes ā parametri pakalpojuma funkcionalitÄtes pÄrbaudei. ReÄlÄ pakalpojumÄ tam vajadzÄtu bÅ«t atseviŔķam pieprasÄ«jumam, kas ievieÅ” svarÄ«gas biznesa loÄ£ikas daļas; Ŕī piemÄra vajadzÄ«bÄm es atstÄÅ”u noklusÄjuma iestatÄ«jumus. TÄlÄk varat atlasÄ«t pieprasÄ«juma intervÄlu, taimautu, veiksmes kodus utt. MÅ«su piemÄrÄ mÄs norÄdÄ«sim veiksmes kodus 200ā399, jo Docker attÄls, kas tiks izmantots, atgriež 304 kodu.
ReÄ£istrÄt mÄrÄ·us ā Å”eit tiek atlasÄ«tas grupas automaŔīnas, bet mÅ«su gadÄ«jumÄ to darÄ«s ECS, tÄpÄc Å”o soli vienkÄrÅ”i izlaižam.
Labi zinÄt: balansÄtÄja lÄ«menÄ« varat iespÄjot žurnÄlus, kas tiks saglabÄti S3 noteiktÄ laikÄ
ECS uzdevuma definīcija
IepriekÅ”Äjos soļos mÄs izveidojÄm visu, kas saistÄ«ts ar pakalpojumu infrastruktÅ«ru, tagad mÄs pÄrejam pie konteineru apraksta, ko mÄs uzsÄksim. Tas tiek darÄ«ts sadaÄ¼Ä ECS ā Uzdevumu definÄ«cijas.
PalaiÅ”anas veida saderÄ«ba - izvÄlieties EC2.
Uzdevuma izpildes IAM loma - izvÄlÄties ecsTaskExecutionRole
. Izmantojot to, tiek rakstÄ«ti žurnÄli, tiek nodroÅ”inÄta piekļuve slepenajiem mainÄ«gajiem utt.
SadaÄ¼Ä Konteinera definÄ«cijas noklikŔķiniet uz Pievienot konteineru.
attÄls ā saite uz attÄlu ar projekta kodu; Å”im piemÄram es izmantoÅ”u publisko attÄlu no Docker Hub
AtmiÅas ierobežojumi ā konteinera atmiÅas ierobežojumi. Cietais ierobežojums ā cietais limits, ja konteiners pÄrsniedz norÄdÄ«to vÄrtÄ«bu, tiks izpildÄ«ta docker kill komanda, konteiners nekavÄjoties mirs. MÄ«kstais ierobežojums ā mÄ«kstÄ robeža, konteiners var pÄrsniegt norÄdÄ«to vÄrtÄ«bu, taÄu Å”is parametrs tiks Åemts vÄrÄ, novietojot uzdevumus maŔīnÄm. PiemÄram, ja iekÄrtai ir 4 GiB RAM un konteinera mÄ«kstais ierobežojums ir 2048 MiB, tad Å”ai iekÄrtai ar Å”o konteineru var darboties ne vairÄk kÄ 2 darbi. PatiesÄ«bÄ 4 GiB RAM ir nedaudz mazÄks par 4096 MiB, to var apskatÄ«t klastera cilnÄ ECS Instances. MÄ«kstais ierobežojums nevar bÅ«t lielÄks par stingro ierobežojumu. Ir svarÄ«gi saprast, ka, ja vienÄ uzdevumÄ ir vairÄki konteineri, tad to robežas tiek summÄtas.
Portu kartÄjumi - plkst UzÅÄmÄja ports MÄs norÄdÄm 0, tas nozÄ«mÄ, ka ports tiks pieŔķirts dinamiski un to uzraudzÄ«s mÄrÄ·a grupa. Konteineru osta ā ports, kurÄ darbojas jÅ«su lietojumprogramma, bieži tiek norÄdÄ«ts izpildes komandÄ vai pieŔķirts jÅ«su lietojumprogrammas kodÄ, Dockerfile utt. MÅ«su piemÄrÄ mÄs izmantosim 3000, jo tas ir norÄdÄ«ts
VeselÄ«bas pÄrbaude ā konteinera veselÄ«bas pÄrbaudes parametri, kurus nedrÄ«kst sajaukt ar mÄrÄ·a grupÄ konfigurÄtajiem parametriem.
vide - vides iestatÄ«jumi. CPU vienÄ«bas - lÄ«dzÄ«gi kÄ AtmiÅas ierobežojumi, tikai par procesoru. Katrs procesora kodols ir 1024 vienÄ«bas, tÄdÄļ, ja serverim ir divkodolu procesors un konteiners ir iestatÄ«ts uz 512, tad vienÄ serverÄ« var palaist 4 uzdevumus ar Å”o konteineru. CPU vienÄ«bas vienmÄr atbilst kodolu skaitam, to nevar bÅ«t nedaudz mazÄk, kÄ tas ir ar atmiÅu.
Komanda ā komanda pakalpojuma palaiÅ”anai konteinerÄ, visi parametri ir norÄdÄ«ti atdalot ar komatiem. Tas varÄtu bÅ«t lielradzis, npm utt. Ja tas nav norÄdÄ«ts, tiks izmantota CMD direktÄ«vas vÄrtÄ«ba no Dockerfile. MÄs norÄdÄm npm,start
.
Vides mainÄ«gie ā konteinera vides mainÄ«gie. Tie var bÅ«t vienkÄrÅ”i teksta dati vai slepeni mainÄ«gie no
UzglabÄÅ”ana un mežizstrÄde - Å”eit mÄs iestatÄ«sim reÄ£istrÄÅ”anos pakalpojumÄ CloudWatch žurnÄli (pakalpojums žurnÄliem no AWS). Lai to izdarÄ«tu, vienkÄrÅ”i iespÄjojiet izvÄles rÅ«tiÅu AutomÄtiski konfigurÄt CloudWatch žurnÄlus. PÄc uzdevuma definÄ«cijas izveides pakalpojumÄ CloudWatch automÄtiski tiks izveidota žurnÄlu grupa. PÄc noklusÄjuma žurnÄli tajÄ tiek glabÄti neierobežotu laiku; iesaku mainÄ«t saglabÄÅ”anas periodu no Nekad nebeidzas uz nepiecieÅ”amo periodu. Tas tiek darÄ«ts CloudWatch žurnÄla grupÄs, jums jÄnoklikŔķina uz paÅ”reizÄjÄ perioda un jÄizvÄlas jauns.
ECS klasteris un ECS jaudas nodroÅ”inÄtÄjs
Lai izveidotu klasteri, dodieties uz sadaļu ECS ā Klasteri. MÄs izvÄlamies EC2 Linux + Networking kÄ veidni.
Klastera nosaukums - ļoti svarÄ«gi, mÄs Å”eit izveidojam tÄdu paÅ”u nosaukumu, kÄds norÄdÄ«ts parametrÄ Launch Template ECS_CLUSTER
, mÅ«su gadÄ«jumÄ - DemoApiClusterProd
. AtzÄ«mÄjiet izvÄles rÅ«tiÅu Izveidot tukÅ”u klasteru. PÄc izvÄles varat iespÄjot Container Insights, lai pakalpojumÄ CloudWatch skatÄ«tu pakalpojumu metriku. Ja visu izdarÄ«jÄt pareizi, sadaÄ¼Ä ECS Instances redzÄsiet maŔīnas, kas tika izveidotas grupÄ Auto Scaling.
Dodieties uz cilni Jaudas nodroÅ”inÄtÄji un izveidojiet jaunu. Ä»aujiet man atgÄdinÄt, ka tas ir nepiecieÅ”ams, lai kontrolÄtu maŔīnu izveidi un izslÄgÅ”anu atkarÄ«bÄ no darbojoÅ”os ECS uzdevumu skaita. Ir svarÄ«gi atzÄ«mÄt, ka pakalpojumu sniedzÄju var pieŔķirt tikai vienai grupai.
AutomÄtiskÄs mÄrogoÅ”anas grupa ā izvÄlieties iepriekÅ” izveidoto grupu.
PÄrvaldÄ«ta mÄrogoÅ”ana ā iespÄjojiet to, lai pakalpojumu sniedzÄjs varÄtu mÄrogot pakalpojumu.
MÄrÄ·a jauda % ā cik procentu mums vajag ar uzdevumiem piekrautu maŔīnu. Ja norÄdÄt 100%, tad visas maŔīnas vienmÄr bÅ«s aizÅemtas ar darba uzdevumiem. Ja norÄdÄt 50%, tad puse no maŔīnÄm vienmÄr bÅ«s bez maksas. Å ÄdÄ gadÄ«jumÄ, ja notiek straujÅ” slodzes lÄciens, jauni taksometri nekavÄjoties tiks pie brÄ«vajÄm automaŔīnÄm, negaidot instanÄu izvietoÅ”anu.
PÄrvaldÄ«ta izbeigÅ”anas aizsardzÄ«ba ā iespÄjot, Å”is parametrs ļauj nodroÅ”inÄtÄjam noÅemt gadÄ«jumu aizsardzÄ«bu pret dzÄÅ”anu. Tas notiek, ja iekÄrtÄ nav aktÄ«vu uzdevumu un tiek atļauta mÄrÄ·a ietilpÄ«ba%.
ECS serviss un mÄrogoÅ”anas iestatÄ«Å”ana
PÄdÄjais solis :) Lai izveidotu servisu, cilnÄ Services jÄiet uz iepriekÅ” izveidoto klasteru.
PalaiÅ”anas veids ā jÄnoklikŔķina uz PÄrslÄgties uz jaudas nodroÅ”inÄtÄja stratÄÄ£iju un jÄizvÄlas iepriekÅ” izveidotie pakalpojumu sniedzÄji.
Uzdevuma definÄ«cija ā atlasiet iepriekÅ” izveidoto uzdevumu definÄ«ciju un tÄs pÄrskatÄ«Å”anu.
Pakalpojuma nosaukums ā lai izvairÄ«tos no neskaidrÄ«bÄm, mÄs vienmÄr norÄdÄm to paÅ”u, kas ir uzdevuma definÄ«cija.
Pakalpojuma veids - vienmÄr Reprodukcija.
Uzdevumu skaits ā vÄlamais aktÄ«vo uzdevumu skaits pakalpojumÄ. Å o parametru kontrolÄ mÄrogoÅ”ana, taÄu tas joprojÄm ir jÄnorÄda.
MinimÄlais veselais procents Šø MaksimÄlais procents ā noteikt uzdevumu uzvedÄ«bu izvietoÅ”anas laikÄ. NoklusÄjuma vÄrtÄ«bas ir 100 un 200, kas norÄda, ka izvietoÅ”anas laikÄ uzdevumu skaits palielinÄsies vairÄkas reizes un pÄc tam atgriezÄ«sies pie vÄlamÄs vÄrtÄ«bas. Ja jums darbojas 1 uzdevums, min = 0 un max = 100, tad izvietoÅ”anas laikÄ tas tiks nogalinÄts, un pÄc tam tiks pacelts jauns, tas ir, tas bÅ«s dÄ«kstÄve. Ja darbojas 1 uzdevums, min=50, max=150, tad izvietoÅ”ana nenotiks vispÄr, jo 1 uzdevumu nevar sadalÄ«t uz pusÄm vai palielinÄt par pusotru reizi.
IzvietoÅ”anas veids ā atstÄjiet ritoÅ”o atjauninÄjumu.
Izvietojuma veidnes ā noteikumi par uzdevumu ievietoÅ”anu maŔīnÄm. NoklusÄjums ir AZ Balanced Spread ā tas nozÄ«mÄ, ka katrs jauns uzdevums tiks ievietots jaunÄ instancÄ, lÄ«dz paaugstinÄs maŔīnas visÄs pieejamÄ«bas zonÄs. MÄs parasti veicam BinPack ā CPU un Spread ā AZ; ar Å”o politiku uzdevumi tiek izvietoti pÄc iespÄjas blÄ«vÄk vienÄ datorÄ uz katru CPU. Ja ir nepiecieÅ”ams izveidot jaunu maŔīnu, tÄ tiek izveidota jaunÄ pieejamÄ«bas zonÄ.
Slodzes balansÄtÄja tips ā atlasiet Lietojumprogrammas slodzes lÄ«dzsvarotÄjs.
Pakalpojuma IAM loma - izvÄlÄties ecsServiceRole
.
Slodzes balansÄtÄja nosaukums ā izvÄlieties iepriekÅ” izveidoto balansÄtÄju.
VeselÄ«bas pÄrbaudes labvÄlÄ«bas periods ā pauze pirms veselÄ«bas pÄrbaužu veikÅ”anas pÄc jauna uzdevuma izvÄrÅ”anas, parasti mÄs to iestatÄm uz 60 sekundÄm.
Konteiners slodzes lÄ«dzsvaram ā punktÄ MÄrÄ·a grupas nosaukums atlasiet iepriekÅ” izveidoto grupu, un viss tiks aizpildÄ«ts automÄtiski.
Pakalpojuma automÄtiskÄ mÄrogoÅ”ana ā pakalpojuma mÄrogoÅ”anas parametri. Atlasiet KonfigurÄt pakalpojuma automÄtisko mÄrogoÅ”anu, lai pielÄgotu pakalpojuma vÄlamo skaitu. MÄrogojot, mÄs iestatÄm minimÄlo un maksimÄlo uzdevumu skaitu.
IAM loma pakalpojuma automÄtiskajai mÄrogoÅ”anai - izvÄlÄties AWSServiceRoleForApplicationAutoScaling_ECSService
.
AutomÄtiskÄs uzdevumu mÄrogoÅ”anas politikas ā mÄrogoÅ”anas noteikumi. Ir 2 veidi:
- MÄrÄ·a izsekoÅ”ana ā mÄrÄ·a metrikas izsekoÅ”ana (CPU/RAM lietojums vai pieprasÄ«jumu skaits katram uzdevumam). PiemÄram, mÄs vÄlamies, lai procesora vidÄjÄ slodze bÅ«tu 85%, kad tÄ kļūst lielÄka, tiks pievienoti jauni uzdevumi, lÄ«dz tÄ sasniegs mÄrÄ·a vÄrtÄ«bu. Ja slodze ir mazÄka, uzdevumi tiks noÅemti, gluži pretÄji, ja vien nav iespÄjota aizsardzÄ«ba pret samazinÄÅ”anu (AtspÄjot mÄrogoÅ”anu).
- PakÄpju mÄrogoÅ”ana - reakcija uz patvaļīgu notikumu. Å eit varat konfigurÄt reakciju uz jebkuru notikumu (CloudWatch Alarm), kad tÄ notiek, varat pievienot vai noÅemt norÄdÄ«to uzdevumu skaitu vai norÄdÄ«t precÄ«zu uzdevumu skaitu.
Pakalpojumam var bÅ«t vairÄki mÄrogoÅ”anas noteikumi, tas var bÅ«t noderÄ«gi, galvenais ir nodroÅ”inÄt, lai tie nebÅ«tu pretrunÄ viens ar otru.
SecinÄjums
Ja ievÄrojÄt norÄdÄ«jumus un izmantojÄt to paÅ”u Docker attÄlu, jÅ«su pakalpojumam vajadzÄtu atgriezt Å”Ädu lapu.
- MÄs esam izveidojuÅ”i veidni, saskaÅÄ ar kuru tiek palaists visas pakalpojuma iekÄrtas. MÄs arÄ« uzzinÄjÄm, kÄ atjauninÄt maŔīnas, kad mainÄs veidne.
- Esam konfigurÄjuÅ”i spot instances apstÄÅ”anÄs signÄla apstrÄdi, tÄpÄc minÅ«tes laikÄ pÄc tÄ saÅemÅ”anas no maŔīnas tiek noÅemti visi darbojoÅ”ie uzdevumi, tÄdÄjÄdi nekas netiek zaudÄts vai pÄrtraukts.
- MÄs pacÄlÄm balansieri, lai vienmÄrÄ«gi sadalÄ«tu slodzi pa maŔīnÄm.
- MÄs esam izveidojuÅ”i pakalpojumu, kas darbojas uz vietas, kas samazina maŔīnas izmaksas aptuveni 3 reizes.
- MÄs esam konfigurÄjuÅ”i automÄtisko mÄrogoÅ”anu abos virzienos, lai tiktu galÄ ar palielinÄtu darba slodzi, neradot dÄ«kstÄves izmaksas.
- MÄs izmantojam Capacity Provider, lai lietojumprogramma pÄrvaldÄ«tu infrastruktÅ«ru (maŔīnas), nevis otrÄdi.
- MÄs esam lieliski.
Ja jums ir paredzami slodzes pieaugumi, piemÄram, jÅ«s reklamÄjat lielÄ e-pasta kampaÅÄ, varat iestatÄ«t mÄrogoÅ”anu, izmantojot
Varat arÄ« mÄrogot, pamatojoties uz datiem no dažÄdÄm sistÄmas daļÄm. PiemÄram, mums ir funkcionalitÄte
PriecÄÅ”os, ja komentÄros pastÄstÄ«sit interesantus spot instanÄu un ECS izmantoÅ”anas gadÄ«jumus vai kaut ko par mÄrogoÅ”anu.
DrÄ«zumÄ bÅ«s raksti par to, kÄ mÄs apstrÄdÄjam tÅ«kstoÅ”iem analÄ«tisko notikumu sekundÄ pÄrsvarÄ bez serveru stekÄ (ar naudu) un kÄ notiek pakalpojumu izvietoÅ”ana, izmantojot GitLab CI un Terraform Cloud.
AbonÄjiet mÅ«s, tas bÅ«s interesanti!
AptaujÄ var piedalÄ«ties tikai reÄ£istrÄti lietotÄji.
Vai ražoÅ”anÄ izmantojat vietas gadÄ«jumus?
-
22,2%JÄ 6
-
66,7%Nr.18
-
11,1%Es uzzinÄju par tiem no raksta un plÄnoju tos izmantot3
Nobalsoja 27 lietotÄji. 5 lietotÄji atturÄjÄs.
Avots: www.habr.com