Tere kĂ”igile! Minu nimi on Kirill, olen Adapty CTO. Suur osa meie arhitektuurist asub AWS-is, ja tĂ€na rÀÀgin, kuidas me vĂ€hendasime serverikulud kolmandiku vĂ”rra, kasutades spottinstante tootmiskeskkonnas, ning kuidas neid automaatseteks skaleerimiseks seadistada. Esiteks, anan ĂŒlevaate, kuidas see toimib, ja seejĂ€rel detaliseeritud juhendi kĂ€ivitamiseks.
Mis on spottinstantsid?
Instants on AWS â see on teiste kasutajate serverid, mis hetkel seisavad ja mida nad mĂŒĂŒvad suure allahindlusega (Amazon vĂ€idab kuni 90%, meie kogemusest ~3x, varieerub sĂ”ltuvalt regionaalsetest eripĂ€ra, AZ-st ja instantside tĂŒĂŒbist). Peamine erinevus tavainstantsidest seisneb selles, et need vĂ”ivad igal hetkel vĂ€lja lĂŒlituda. SeetĂ”ttu oleme pikalt arvanud, et neid on normaalne kasutada arendus- vĂ”i testkeskkondades vĂ”i erinevate arvutuste tegemiseks, salvestades vahekohti S3-le vĂ”i andmebaasi, kuid mitte tootmises. On olemas kolmandate osapoolte lahendusi, mis vĂ”imaldavad spote kasutada tootmises, kuid meie juhtumi jaoks on seal palju alternatiivseid lahendusi, mistĂ”ttu me neid ei rakendanud. Artiklis kirjeldatud lĂ€henemine töötab tĂ€ielikult AWS-i standardse funktsionaalsuse raames, ilma tĂ€iendavate skriptide, cronide jne kasutamiseta.
JÀrgnevalt toon vÀlja mÔned ekraanipildid, mis nÀitavad spotaalsete instantside hinnahistorit.
m5.large regioonis eu-west-1 (Iirimaa). Hind on peamiselt kolme kuu jooksul stabiilne, praegu on kokkuhoid 2.9x.

m5.large us-east-1 piirkonnas (N. Virginia). Hind muutub pidevalt 3 kuu vÀltel, praegu on sÀÀst 2,3x kuni 2,8x sÔltuvalt kÀttesaadavuspiirkonnast.

t3.small us-east-1 piirkonnas (N. Virginia). Hind on olnud stabiilne 3 kuu jooksul, praegu on sÀÀst 3,4x.

Teenuse arhitektuur
Alusarhitektuur teenusele, millest me selles artiklis rÀÀgime, on kujutatud alloleval diagrammil.

Application Load Balancer â EC2 Target Group â Elastic Container Service
Balansseerijana kasutatakse Application Load Balancerit (ALB), mis suunab pÀringud EC2 Target Groupi (TG). TG vastutab ALB-le portide avamise eest instantsidel ja nende sidumise eest Elastic Container Service'i (ECS) konteinerite portidega. ECS on AWS-s Kubernetes'e analoog, mis haldab Docker konteinerite kÀsitsemist.
Ăhel instantsil vĂ”ib olla mitu töötavat konteinerit sama pordiga, seega ei saa me neid fikseerida. ECS teavitab TG-d, et ta kĂ€ivitab uue ĂŒlesande (Kubernetes'i terminoloogias tuntud kui pod), see kontrollib instantsi vaba porte ja mÀÀrab ĂŒhe neist kĂ€ivitatavale ĂŒlesandele. Samuti kontrollib TG regulaarselt, kas instants ja selle API töötavad, kasutades health check'i, ja kui ta nĂ€eb mingeid probleeme, siis lĂ”petab ta sealsete pĂ€ringute edastamise.
EC2 Auto Scaling Groups + ECS Capacity Providers
Ălaltoodud diagrammil pole nĂ€idatud EC2 Auto Scaling Groups (ASG) teenust. Nagu nimest jĂ€reldada vĂ”ib, vastutab see instantside skaleerimise eest. Siiski ei olnud viimase ajani AWS-is sisseehitatud funktsiooni, mis vĂ”imaldaks ECS-ist kĂ€ivitatud masinate arvu hallata. ECS vĂ”imaldas ĂŒlesannete arvu skaleerida, nĂ€iteks CPU, RAMi vĂ”i pĂ€ringute arvu pĂ”hjal. Kuid kui ĂŒlesanded kasutasid kĂ”ik vabad instantsid, siis uusi masinaid automaatselt ei kĂ€ivitatud.
See muutus ECS Capacity Providers (ECS CP) tekkimisega. NĂŒĂŒd saab iga ECS teenuse siduda ASG-ga, ja kui ĂŒlesanded ei mahu töötavatesse instantsidesse, kĂ€ivitatakse uued (kuid ASG seatud piirangute raames). See töötab ka vastupidiselt: kui ECS CP nĂ€eb ootavaid instantsse ilma ĂŒlesanneteta, annab ta ASG-le kĂ€su need vĂ€lja lĂŒlitada. ECS CP-l on vĂ”imalus mÀÀrata instantside sihtkoormuse protsent, et teatud arv masinaid oleks alati vabast, et tagada kiire ĂŒlesannete skaleerimine; rÀÀgin sellest natuke hiljem.
EC2 Launch Templates
Viimane teenus, millest ma rÀÀgin, enne kui lĂ€hen ĂŒksikasjalikule ĂŒlevaatele selle infrastruktuuri loomise kohta, on EC2 Launch Templates. See vĂ”imaldab luua malli, mille alusel kĂ”ik masinad kĂ€ivitatakse, et seda iga kord nullist mitte korrata. Siin saab valida kĂ€ivitatava masina tĂŒĂŒbi, turvagruppi, ketta pildi ja palju muid parameetreid. Samuti saab mÀÀrata kasutajateabe, mis laetakse kĂ”ikidele kĂ€ivitatud instantsidele. Kasutajateabes saab kĂ€ivitada skripte, nĂ€iteks saab redigeerida faili sisu. .
Ăks kĂ”ige olulisemaid konfiguratsiooni parameetreid selles artiklis on =true. Kui see parameeter on sisse lĂŒlitatud, siis niipea kui ECS saab signaali, et spott instanssi eemaldatakse, muudab see kĂ”ik ĂŒlesanded, mis sellele töötavad, olekusse Draining. Uusi ĂŒlesandeid sellele instansile ei mÀÀrata, ja kui on ĂŒlesandeid, mis soovivad sellele vĂ€lja lasta, tĂŒhistatakse need. Tasakaalustajalt tulevad pĂ€ringud lakkaavad saabumast. Teate eemaldamise kohta saadetakse 2 minutit enne tegelikku sĂŒndmust. SeetĂ”ttu, kui teie teenus ei tee ĂŒlesandeid kauem kui 2 minutit ja ei salvesta midagi kettale, siis saate kasutada spott instansse ilma andmete kaotuseta.
Ketta osas â AWS on hiljuti Elastic File System (EFS) kasutamine koos ECS-iga on vĂ”imalik, selle skeemiga ei ole isegi ketas takistuseks, kuid me ei ole seda proovinud, kuna pĂ”himĂ”tteliselt ei vaja me ketast oleku sĂ€ilitamiseks. Vaikimisi saadetakse SIGINT (mis saadetakse ĂŒlesande staatuse muutmise ajal Drainingiks) kĂ”ik jooksvaid ĂŒlesandeid peatatakse 30 sekundi pĂ€rast, isegi kui nad ei ole lĂ”pule viidud, seda aega saab muuta parameetri abil . Peamine on mitte seadistada seda ĂŒle 2 minuti spootmasinate jaoks.
Teenuse loomine
Liigume otse nimetatud teenuse loomise juurde. Protsessi kĂ€igus selgitan mitmeid kasulikke punkte, millest pole varem rÀÀgitud. Ăldiselt on see samm-sammult juhend, kuid ma ei kĂ€sitle mĂ”ningaid tĂ”eliselt pĂ”hitaseme vĂ”i vastupidi vĂ€ga spetsiifilisi juhtumeid. KĂ”ik toimingud viiakse lĂ€bi AWS visuaalses konsoolis, kuid neid saab programmiliselt uuesti luua CloudFormationi vĂ”i Terraformi abil. Adapty's kasutame Terraformi.
EC2 Launch Template
Selles teenuses luuakse masinate konfiguratsioon, mida kasutatakse. Mallide haldamine toimub jaotises EC2 -> Instances -> Launch templates.
Amazon machine image (AMI) â mÀÀrame diskifaili, millega kĂ”ik instantsid kĂ€ivituvad. ECS-i jaoks on enamikul juhtudel otstarbekas kasutada Amazoni optimeeritud pilti. See uuendatakse regulaarselt ja sisaldab kĂ”ike vajalikku ECS-i toimimiseks. Aktuaalse ID leidmiseks kĂŒlastame lehte , valime kasutatava piirkonna ja kopeerime AMI ID selle jaoks. NĂ€iteks piirkonnas us-east-1 on artikkel kirjutamise hetkeks aktuaalne ID â ami-00c7c1cf5bdc913ed. Selle ID tuleb sisestada punkti Specify a custom value.
Instantsi tĂŒĂŒp â mÀÀrame instantsi tĂŒĂŒbi. Valige see, mis sobib teie ĂŒlesande jaoks kĂ”ige paremini.
Ahnuse paar (sisselogimine) â mÀÀrame sertifikaadi, millega saab vajadusel instantsiga SSH kaudu ĂŒhendust luua.
VĂ”rguseaded â mÀÀrame vĂ”rgu parameetrid. VĂ”rguteenuste platvorm enamikul juhtudel peab olema Virtual Private Cloud (VPC). Turvagrupp â turvaregid teie instantside jaoks. Kuna me kasutame koormuse tasakaalustajat instantside ees, soovitan siin mÀÀrata grupi, mis lubab sisenevaid ĂŒhendusi ainult koormuse tasakaalustajalt. Niisiis, teil on kaks turvaregistreid: ĂŒks koormuse tasakaalustaja jaoks, mis lubab sisenevaid (inbound) ĂŒhendusi kĂ”ikjal portidel 80 (http) ja 443 (https), ja teine masinate jaoks, mis lubab sisenevaid ĂŒhendusi kĂ”igis portides koormuse tasakaalustaja grupist. VĂ€ljuvad (outbound) ĂŒhendused mĂ”lemas grupis tuleb avada TCP protokolli kaudu kĂ”igis portides, kĂ”ikidest aadressidest. VĂ€ljuvate ĂŒhenduste portide ja aadresside piiramine on vĂ”imalik, kuid siis tuleb pidevalt jĂ€lgida, et te ei pĂŒĂŒa ĂŒhendust luua suletud pordi kaudu.
Salvestus (mahud) â mÀÀrame masinate ketaste parameetreid. Ketta maht ei tohi olla vĂ€iksem sellest, mis on mÀÀratud AMI-s, ECS Optimeeritud puhul â 30 GiB.
TĂ€iendavad ĂŒksikasjad â mÀÀrame tĂ€iendavad parameetrid.
Ostuvalik â kas soovime osta spotinstante. Me tahame, kuid siin me seda mĂ€rget ei pane, seame selle Auto Scaling Groupâis, seal on rohkem valikuid.
IAM instantsi profiil â mÀÀrame rolli, millega instantsid kĂ€ivitatakse. Et instantsid töötaksid ECS-is, on neil vaja Ă”igusi, mis tavaliselt kuuluvad rolli ecsInstanceRole. MĂ”nel juhul vĂ”ib see olla loodud, kui ei ole, siis siin kuidas seda teha. PĂ€rast loomist mÀÀrame selle mallis.
Edasi tuleb palju parameetreid, enamasti saab jĂ€tta vaikimisi vÀÀrtused, kuid igaĂŒhel on arusaadav kirjeldus. Mina lisan alati EBS-optimized instance ja T2/T3 Unlimited parameetrid, kui kasutatakse instantsid.
Kasutajaandmed â mÀÀrame kasutajaandmed. Me redigeerime faili /etc/ecs/ecs.config, kus on ECS agendi konfiguratsioon.
NÀide sellest, milline vÔib olla kasutajaandmed:
#!/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.configECS_CLUSTER=DemoApiClusterProd â parameeter nĂ€itab, et instants kuulub klastrisse, mille nimi on mÀÀratud, see tĂ€hendab, et see klaster saab oma ĂŒlesandeid sellel serveril majutada. Me pole veel klastrit loonud, kuid loomisel kasutame seda nime.
ECS_ENABLE_SPOT_INSTANCE_DRAINING=true â parameeter nĂ€itab, et kui spootinstansi vĂ€ljalĂŒlitamise signaal tuleb, peavad kĂ”ik sellel olevad ĂŒlesanded minema staatusse Draining.
ECS_CONTAINER_STOP_TIMEOUT=1m â parameeter mÀÀrab, et SIGINT signaali saamisel on kĂ”igil ĂŒlesannetel 1 minut, enne kui need tapetakse.
ECS_ENGINE_AUTH_TYPE=docker â parameeter mÀÀrab, et autoriseerimise mehhanismina kasutatakse docker-skeemi.
ECS_ENGINE_AUTH_DATA=... â ĂŒhendamisparameetrid privaatsele konteineriregistrile, kus teie Docker pildid asuvad. Kui see on avalik, siis ei pea midagi nĂ€itama.
Selles artiklis kasutan avalikku pilti Docker Hubist, seega ei pea parameetreid ECS_ENGINE_AUTH_TYPE ja ECS_ENGINE_AUTH_DATA nÀitama.
Kasulik teada: soovitatakse regulaarselt AMI-d uuendada, kuna uutes versioonides uuendatakse Docker, Linux, ECS agent ja teised. Et sellest mitte unustada, vÔib uusversioonide vÀljastamise kohta. Saate teavitusi emailile ja uuendada kÀsitsi, vÔi vÔite kirjutada Lambda-funktsiooni, mis loob automaatselt uue versiooni Launch Template'ist koos uuendatud AMI-ga.
EC2 Auto Scaling Group
Auto Scaling Group vastutab instantside kĂ€ivitamise ja skaleerimise eest. RĂŒhmade haldamine toimub EC2 -> Auto Scaling -> Auto Scaling Groups jaotises.
Launch template â valime eelmisel sammul loodud mall. Versiooni jĂ€tame vaikevÀÀrtuseks.
OstuvĂ”imalused ja instantside tĂŒĂŒbid â mÀÀrame vĂ€lja klastrite instantside tĂŒĂŒbid. Adhere to launch template kasutab Launch Template'i instantsi tĂŒĂŒpi. Combine purchase options and instance types vĂ”imaldab instantside tĂŒĂŒpide paindlikku seadistamist. Me kasutame seda.
Valikuline On-Demand baas â tavaliste, mitte-spotseeritud instantside arv, mis alati töötavad.
On-Demand protsent baasist â tavaliste ja spot-instantide protsentuaalne suhe, 50-50 jagab ĂŒhtlaselt, 20-80 tĂ€hendab, et iga tavaline instants tĂ”stetakse 4 spot-instantiga. Antud nĂ€ite pĂ”hjal esitan 50-50, aga tegelikult teeme me kĂ”ige sagedamini 20-80, mĂ”nel juhul 0-100.
Instantside tĂŒĂŒbid â siin saab mÀÀrata tĂ€iendavad instantside tĂŒĂŒbid, mida klastris kasutatakse. Me ei ole kunagi kasutanud, sest ma ei saa sellest hĂ€sti aru. VĂ”ib-olla on asi instantside tĂŒĂŒpidega seotud limiitides, aga need tĂ”stetakse hĂ”lpsasti toe kaudu. Kui teil on rakendamise kohta teadmisi, oleksin rÔÔmus, kui loeksin kommentaarides).

VĂ”rk log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats timeout 30s user haproxy group haproxy daemondefaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000frontend http_front bind *:80 stats uri /haproxy?stats default_backend http_backbackend http_back balance roundrobin server server_name1 private_ip1:80 check server server_name2 private_ip2:80 check â vĂ”rguseaded, valige VPC ja alamvĂ”rgud masinate jaoks, enamikul juhtudel tasub valida kĂ”ik saadaval olevad alamvĂ”rgud.
Laotamine â tasakaalustamise seadistused, aga me teeme seda eraldi, siin ei puutu me midagi. Tervisekontrollid seadeid kohandatakse hiljem.
Gruppide suurus â mÀÀrame piirid klastris olevate masinate arvu ja soovitud kĂ€ivitamise masinate arvu. Klastris olevate masinate arv ei saa kunagi olla vĂ€iksem kui minimaalne number ja suurem kui maksimaalne, isegi kui mÔÔdikute pĂ”hjal peaks toimuma skaleerimine.
Skaaleerimise poliitikad â skaleerimise parameetrid, kuid me skaleerime vastavalt kĂ€ivitatud ECS ĂŒlesannetele, seega seadistame skaleerimise hiljem.
Instantsi skaaleerimise kaitse â kaitse instantside kustutamise eest allaskaleerimise korral. LĂŒlitame sisse, et ASG ei kustutaks masinat, millel on töötavad ĂŒlesanded. Kaitse eemaldatakse instantsidelt, millel ei ole ĂŒlesandeid, ECS Capacity Provideri poolt.
Lisa silte â instantsidele saab lisada silte (kui on tĂ€psustatud mĂ€rge "Tag new instances"). Soovitan mĂ€rkida sildi "Name", siis nimetatakse kĂ”ik instantsid, mis kĂ€ivituvad grupi raames, ĂŒhesuguseks, mida on mugav jĂ€lgida konsoolis.

PÀrast grupi loomist avage see ja minge jaotisse "Advanced configurations", miks ei ole loomise etapis konsoolis nÀhtavad kÔik valikud.
LĂ”petamispoliitikad â reeglid, mida arvestatakse instantside eemaldamisel. Need kehtivad jĂ€rjekorras. Kasutame tavaliselt selliseid nagu pildil allpool. Esiteks eemaldatakse instantsid, millel on kĂ”ige vanem Launch Template (nĂ€iteks, kui oleme AMI-d uuendanud, on meil loodud uus versioon, aga kĂ”ik instantsid on selle peale vahetunud). Siis valitakse vĂ€lja instantsid, mis on kĂ”ige lĂ€hemal jĂ€rgmisele arveldamise ajale. Edasi valitakse kĂ”ige vanemad loodud kuupĂ€evaga instantsid.

Kasulik teada: kĂ”ikide masinate vĂ€rskendamiseks klastris on mugav kasutada . Kui seda kombineerida eelneva sammu Lambda-funktsiooniga, siis on teil tĂ€iesti automatiseeritud instantside uuendamise sĂŒsteem. KĂ”ikide masinate uuendamise eel tuleb vĂ€lja lĂŒlitada instantside scale-in kaitse kĂ”igile grupi instantsidele. Mitte grupi seadistus, vaid just masinate kaitse ennast, see tehakse Instantside halduse vahekaardil.
Application Load Balancer ja EC2 Target Group
Tasakaalustaja luuakse EC2 â Load Balancing â Load Balancers osas. Kasutame Application Load Balancerit, erinevate tasakaalustajate tĂŒĂŒpide vĂ”rdlust saab lugeda .
Listeners â on mĂ”istlik seadistada 80. ja 443. port ning suunata 80. port 443. porti kaudu ĂŒlesandeid tasakaalujao reeglite abil.
Saadavuse tsoonid â valime enamasti kĂ”iki saadavuse tsoone.
Konfigureeri turvaseaded â siin mÀÀratakse SSL-sertifikaat tasakaalustajale, kĂ”ige mugavam variant on ACM-is. Erinevuste kohta Turvapoliitika vĂ”ib lugeda , vĂ”ib jĂ€tta vaikesĂ€tteks valitud ELBSecurityPolicy-2016-08. PĂ€rast tasakaalustaja loomist nĂ€ete selle DNS-nime, millele tuleb seadistada CNAME teie domeenile. NĂ€iteks, nii see vĂ€lja nĂ€eb Cloudflares.

Turvagrupp â loome vĂ”i valime tasakaalustajale turgrupi, sellest on rohkem kirjutatud eelnevalt osas EC2 Launch Template â VĂ”rguseaded.
Sihtgrupp â loome grupi, mis vastutab pĂ€ringute suunamise eest tasakaalustajalt masinatele ja kontrollib nende kĂ€ttesaadavust, et asendada probleemide korral. SihttĂŒĂŒp peab olema Instance, Protokoll ja Port mĂ”lemad, kui kasutate HTTPS-i suhtlemiseks tasakaalustaja ja instantside vahel, siis tuleb neile ĂŒles laadida sertifikaat. Antud nĂ€ite raames me seda tegema ei hakka, lihtsalt jĂ€tame 80. porti.
Tervisekontrollid â teenused, mida kontrollida. KĂ€esolev teenus peaks olema eraldi pĂ€ring, mis rakendab olulisi Ă€riloogika komponente; antud nĂ€ite kontekstis jĂ€tan vaikeseaded alles. Edasi saab valida pĂ€ringute vahemaa, ajutise katkestuse, eduka vastuse koodid jne. NĂ€ites mÀÀrame edukate koodide vahemiku 200-399, kuna kasutatav Docker pilt tagastab koodi 304.

Registreeri sihtpunktid â siin valitakse masinad grupi jaoks, kuid meie juhul tegeleb sellega ECS, seega jĂ€tame selle sammu lihtsalt vahele.
Kasulik teada: tasemel laadimisjagaja saab lubada logid, mis salvestatakse S3-sse teatud . Sealt saab neid eksportida kolmandatesse teenustesse analĂŒĂŒsiks vĂ”i teha SQL-pĂ€ringuid otse S3 andmetele . See on mugav ja töötab ilma tĂ€iendava koodita. Soovitan samuti seadistada logide eemaldamine S3 Ă€mbrist ettenĂ€htud aja möödudes.
ECS ĂŒlesande mÀÀratlemine
Varasematel etappidel loodi kĂ”ik teenuse infrastruktuuriga seonduv, nĂŒĂŒd liigume konteinerite kirjeldamise juurde, mida me kĂ€ivitame. See toimub jaotises ECS â Ălesande mÀÀratlused.
KĂ€ivitamise tĂŒĂŒpide ĂŒhilduvus â valige EC2.
Ălesande tĂ€itmise IAM-rakk â valige ecsTaskExecutionRole. Selle abil kirjutatakse logisid, antakse juurdepÀÀs salajastele muutujaile jms.
Container Definitions jaotises vajutage Lisa konteiner.
Image â lingi pilt projekti koodiga, antud nĂ€ite puhul kasutan avalikku pilti Docker Hub'ist .
MĂ€lu limiidid â konteineri mĂ€lu limiidid. JĂ”hker limiit â rangelt mÀÀratud limiit, kui konteiner ĂŒletab mÀÀratud vÀÀrtuse, tĂ€idetakse kĂ€sk docker kill, konteiner sureb kohe. Pehme limiit â pehme limiit, konteiner vĂ”ib ĂŒletada mÀÀratud vÀÀrtuse, kuid ĂŒlesannete paigutamisel masinates arvestatakse seda parameetrit. NĂ€iteks kui masinas on 4 GiB RAM-i ja konteineri pehme limiit on 2048 MiB, siis vĂ”ib selle konteineri jaoks olla masinas maksimaalselt 2 ĂŒlesannet kĂ€ivitatud. Tegelikult on 4 GiB RAM-i veidi vĂ€hem kui 4096 MiB, seda saab vaadata ECS Instances vahekaardilt klastris. Pehme limiit ei saa olla suurem kui jĂ”hker limiit. Oluline on mĂ”ista, et kui ĂŒhes ĂŒlesandes on mitu konteinerit, siis nende limiidid liidetakse.
Sadama kaardistamine â in Hosti port MÀÀrame 0, see tĂ€hendab, et port mÀÀratakse dĂŒnaamiliselt, seda jĂ€lgib Target Group. Kontaineri port â port, millel teie rakendus töötab, mÀÀratakse sageli tĂ€itmis kĂ€sus vĂ”i mÀÀratakse teie rakenduse koodis, Dockerfile'is jne. Meie nĂ€ites kasutame 3000, sest see on mÀÀratud kasutatava pildi.
Tervisekontroll â konteineri töökindluse kontrollimise parameetrid, mitte segi ajada sellega, mis on seadistatud Target Group'is.
Keskkond â keskkonna seaded. CPU ĂŒhikud â sarnaneb MĂ€lulĂ€venditega, ainult et see on protsessori kohta. Iga protsessori tuum on 1024 ĂŒhikut, nii et kui serveril on kahetuumaline protsessor ja konteineril on vÀÀrtuseks seatud 512, siis sama serveri peal vĂ”ib olla kĂ€ivitatud 4 ĂŒlesannet selle konteineriga. CPU ĂŒhikute arv vastab alati tuumade arvule, neid ei saa olla vĂ€hem kui mĂ€lu puhul.
KĂ€sk â kĂ€sk teenuse kĂ€ivitamiseks konteineri sees, kĂ”ik parameetrid mÀÀratakse koma kaudu. See vĂ”ib olla gunicorn, npm jne. Kui ei ole mÀÀratud, kasutatakse Dockerfile'i CMD direktiivi vÀÀrtust. MÀÀrame npm,start.
Keskkonnamuutujad â konteineri keskkonnavariandid. Need vĂ”ivad olla nii lihtsad tekstilised andmed kui ka salajased variandid vĂ”i .
Salvestamine ja logimine â siin seadistame logimise CloudWatch Logs'ile (AWS'i logiteenuse). Selleks piisab, kui mĂ€rkida Auto-configure CloudWatch Logs. PĂ€rast Task Definition'i loomist koostatakse automaatselt logigrupp CloudWatch'is. Vaikimisi sĂ€ilitatakse logid selles lĂ”putult, soovitan muuta Retention period'it vahemikule Never Expire vastavalt nĂ”udmistele. Seda tehakse CloudWatch Log groups, klikkides praegusele perioodile ja valides uue.

ECS Cluster ja ECS Capacity Provider
Liigume jaotisse ECS â Clusters, et luua klaster. Mallina valime EC2 Linux + Networking.
Klasteri nimi â on ÀÀrmiselt oluline, et nimi oleks siin sama, mis Launch Template'is parameetris ECS_CLUSTER, meie puhul â DemoApiClusterProd. MĂ€rkige Create an empty cluster. Valikuliselt saate lubada Container Insights, et jĂ€lgida teenuste mÔÔdikuid CloudWatch'is. Kui kĂ”ik on Ă”igesti tehtud, nĂ€ete jaotises ECS Instances masinaid, mis loodi Auto Scaling grupis.

Liigume vahekaardile Capacity Providers ja loome uue. Tuletan meelde, et see on vajalik masinate loomise ja vĂ€ljalĂŒlitamise haldamiseks sĂ”ltuvalt aktiivsete ECS-tĂ¶Ă¶ĂŒlesannete arvust. Oluline on mĂ€rkida, et pakkuja saab olla seotud ainult ĂŒhe grupiga.
Auto Scaling group â valime varasemalt loodud grupi.
Managed scaling â aktiveerime, et pakkuja saaks teenust juurde skaleerida.
Target capacity % â kui suur protsent masinate koormusest on meie jaoks vajalik. Kui mĂ€rkida 100%, on kĂ”ik masinad alati tööle kasutuses. Kui mĂ€rkida 50%, jÀÀb pooled masinad alati vabaks. Sellisel juhul, kui koormus jĂ€rsult tĂ”useb, saavad uued tĂ¶Ă¶ĂŒlesanded kohe vabadele masinatele, ilma et peaks ootama instantside juurutamist.
Managed termination protection â aktiveerime, see seade lubab pakkujal eemaldada instantside kustutamise kaitse. See toimub, kui masinal ei ole aktiivseid tĂ¶Ă¶ĂŒlesandeid ja vĂ”imaldab Target capacity %.
ECS teenus ja skaleerimise seadistamine
Viimane samm :) Teenuse loomiseks tuleb minna varasemalt loodud klastrisse vahekaardile Teenused.
Launch type â tuleb klĂ”psata valikul Switch to capacity provider strategy ja valida varasemalt loodud pakkuja.

Task Definition â valime varem loodud Task Definition'i koos selle versiooniga.
Teenuse nimi â et mitte segadusse minna, mÀÀrame alati sama, mis Task Definition.
Teenuse tĂŒĂŒp â alati Replica.
Ălesannete arv â soovitud aktiivsete ĂŒlesannete arv teenuses. Seda parameetrit juhib skaleerimine, kuid see tuleb ikkagi mÀÀrata.
Minimaalne tervena pĂŒsiv protsent ja Maksimaalne protsent â mÀÀravad ĂŒlesannete kĂ€itumise juurutamisel. Vaikimisi vÀÀrtused 100 ja 200 viitavad sellele, et juurutamise hetkel suureneb ĂŒlesannete arv mitu korda ning seejĂ€rel naaseb soovitud hulka. Kui teil töötab 1 ĂŒlesanne, min=0 ja max=100, siis juurutamisel see tapetakse ja seejĂ€rel kĂ€ivitatakse uus, st toimub seisak. Kui töötab 1 ĂŒlesanne, min=50 ja max=150, siis juurutamine ei toimu, sest 1 ĂŒlesannet ei saa pooleks jagada ega suurendada 1.5 korda.
Juurutamise tĂŒĂŒp â jĂ€tame Rolling update.
Paigutuse mallid â ĂŒlesannete paigutamise reeglid masinates. Vaikimisi on AZ Balanced Spread â see tĂ€hendab, et iga uus ĂŒlesanne paigutatakse uuele instantsile seni, kuni masinad tĂ”usevad kĂ”igis kĂ€ttesaadavuse tsoonides. Me kasutame tavaliselt BinPack - CPU ja Spread - AZ, mille puhul paigutatakse ĂŒlesanded maksimaalselt tihedalt ĂŒhte masinasse CPU jĂ€rgi. Uue masina loomise vajadusel luuakse see uues kĂ€ttesaadavuse tsoonis.

LaaduritĂŒĂŒp â valime Rakenduse Tasakaalustaja.
Teenuse IAM roll â valime ecsServiceRole.
Laadurite nimi â valime varem loodud tasakaalustaja.
Tervisekontrolli gracia periood â paus enne tervisekontrollide teostamist pĂ€rast uue ĂŒlesande versiooni, tavaliselt seame 60 sekundit.
Konteiner, mida tasakaalustada â punktis Sihtgrupi nimi valime varem loodud rĂŒhma ja kĂ”ik tĂ€itub automaatselt.

Teenuse automaatne skaleerimine â teenuse skaleerimise parameetrid. Valime Configure Service Auto Scaling to adjust your serviceâs desired count. Seame minimaalne ja maksimaalne ĂŒlesannete arv skaleerimise ajal.
IAM roll teenuse automaatseks skaleerimiseks â valime AWSServiceRoleForApplicationAutoScaling_ECSService.
Automaatne ĂŒlesannete skaleerimise poliitika â skaleerimise reeglid. On 2 tĂŒĂŒpi:
- SihtjĂ€lgimise â sihtmÔÔdiku jĂ€lgimine (CPU/RAM kasutamine vĂ”i kĂ”igi ĂŒlesannete jaoks tehtud pĂ€ringute arv). NĂ€iteks tahame, et keskmine protsessori koormus oleks 85%, ning kui see tĂ”useb kĂ”rgemale, siis uusi ĂŒlesandeid lisatakse, kuni see jĂ”uab sihttasemele. Kui koormus on madalam, siis ĂŒlesandeid vastupidi eemaldatakse, kui allapoole skaleerimise kaitse ei ole sisse lĂŒlitatud (Keela sisse skaleerimine).
- Samm-sammuline skaleerimine â reageerimine juhuslikule sĂŒndmusele. Siin saab seadistada reageerimise mis tahes sĂŒndmusele (CloudWatch Alarm), ja sĂŒndmuse toimumisel saab lisada vĂ”i eemaldada mÀÀratud arvu ĂŒlesandeid, vĂ”i mÀÀrata tĂ€pse ĂŒlesannete arvu.
Teenusel vĂ”ib olla mitu skaleerimisreeglit, mis vĂ”ib olla kasulik, kuid tuleb jĂ€lgida, et need ĂŒksteisega ei konflikteeruks.
KokkuvÔte
Kui jÀrgite juhiseid ja kasutate sama Docker'i pilti, peaks teie teenus tagastama sellise lehe.

- Oleme loonud mall, mille alusel kÀivitatakse kÔik masinad teenuses. Oleme Ôppinud ka masinaid ajakohastama, kui mall muutub.
- Me oleme seadistatud katkestussignaali töötlemise spottinstantside jaoks, seega eemaldatakse kĂ”ik töötavad ĂŒlesanded masinal ĂŒhe minuti jooksul pĂ€rast signaali saamist, nii et midagi ei kaota ega katkestata.
- Oleme seadistanud tasakaalustaja, et jaotada koormust masinate vahel ĂŒhtlaselt.
- Oleme loonud teenuse, mis töötab spottinstantsidel, seelÀbi vÀhendades masinaid umbes kolm korda.
- Oleme seadistanud automaatse skaaleerimise mÔlemas suunas, et hallata koormuste suurenemist, kuid samal ajal mitte maksta seismise eest.
- Kasutame Capacity Provider'i, et rakendus hallaks infrastruktuuri (masinaid), mitte vastupidi.
- Me oleme toredad.
Kui teil on ettearvatavad koormuse tÔusud, nÀiteks reklaamite suure e-kirja saatmisega, saate seadistada skaaleerimise .
Samuti on vĂ”imalik teha skaaleerimist andmete pĂ”hjal erinevatest teie sĂŒsteemi osadest. NĂ€iteks meil on funktsionaalsus mobiilirakenduse kasutajad. MĂ”nikord saadetakse kampaania 1M+ inimesele. PĂ€rast sellist saatmist tĂ€heldatakse alati suurt API-pĂ€ringute kasvu, kuna palju kasutajaid siseneb samal ajal rakendusse. Seega, kui nĂ€eme, et promotsioonipushide saatmise jĂ€rjekorras on oluliselt rohkem inimesi kui tavapĂ€raselt, saame kohe kĂ€ivitada mitu tĂ€iendavat masinat ja ĂŒlesannet, et olla valmis koormuseks.
Oleksin vÀga tÀnulik, kui jagaksite kommentaarides huvitavaid juhtumeid spottinstantside ja ECS kasutamise kohta vÔi midagi, mis puudutab skaleerimist.
Peagi tulevad artiklid selle kohta, kuidas töötleme tuhandeid analĂŒĂŒtilisi sĂŒndmusi sekundis peamiselt serverless tehnoloogial (rahaga) ja kuidas teenuste juurutamine toimub GitLab CI ja Terraform Cloud abil.
Liituge meiega, see on huvitav!
Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. , palun.
Kas kasutate spottinstantsse tootmises?
22,2%Jah6
66,7%Ei18
11,1%Sain neist teada artiklist, plaanin kasutada3
HÀÀletasid 27 kasutajat. Hoidus 5 kasutajat.
Allikas: habr.com
