Paghimo ug Scalable API sa AWS Spot Instances

Kumusta tanan! Ako si Kirill, CTO ako sa Adapty. Kadaghanan sa among arkitektura naa sa AWS, ug karon akong hisgutan kung giunsa namo pagkunhod ang gasto sa server sa 3 ka beses pinaagi sa paggamit sa mga higayon sa lugar sa usa ka palibot sa produksiyon, ingon man kung giunsa ang pag-set up sa ilang auto-scaling. Una adunay usa ka kinatibuk-ang pagtan-aw kung giunsa kini molihok, ug dayon ang detalyado nga mga panudlo alang sa pagsugod.

Unsa ang Spot Instances?

Spot Ang mga higayon mao ang mga server sa ubang mga tiggamit sa AWS nga sa pagkakaron wala'y trabaho, ug gibaligya nila kini sa usa ka dako nga diskwento (Ang Amazon nagsulat hangtod sa 90%, sa among kasinatian ~ 3x, magkalainlain depende sa rehiyon, AZ ug tipo sa pananglitan). Ang ilang panguna nga kalainan gikan sa mga regular mao nga mahimo silang ma-off bisan unsang oras. Busa, sa dugay nga panahon kami nagtuo nga kini normal nga gamiton kini alang sa ulay nga mga palibot, o alang sa mga buluhaton sa pagkalkulo sa usa ka butang, nga adunay mga intermediate nga resulta nga gitipigan sa S3 o sa database, apan dili alang sa pagbaligya. Adunay mga solusyon sa ikatulo nga partido nga nagtugot kanimo sa paggamit sa mga lugar sa produksiyon, apan adunay daghang mga crutches alang sa among kaso, mao nga wala namon kini gipatuman. Ang pamaagi nga gihulagway sa artikulo hingpit nga naglihok sulod sa standard nga pagpaandar sa AWS, nga walay dugang nga mga script, mga korona, ug uban pa.

Sa ubos mao ang pipila ka mga screenshot nga nagpakita sa kasaysayan sa presyo alang sa mga higayon sa lugar.

m5.dako sa rehiyon sa eu-west-1 (Ireland). Ang presyo kasagaran nga lig-on sulod sa 3 ka bulan, nga karon nagtipig og 2.9x.

Paghimo ug Scalable API sa AWS Spot Instances

m5.dako sa us-sidlakan-1 nga rehiyon (N. Virginia). Ang presyo kanunay nga nagbag-o sa 3 ka bulan, nga karon nagtipig gikan sa 2.3x hangtod 2.8x depende sa availability zone.

Paghimo ug Scalable API sa AWS Spot Instances

t3.gamay sa us-east-1 nga rehiyon (N. Virginia). Ang presyo stable sa 3 ka bulan, nga karon nagtipig 3.4x.

Paghimo ug Scalable API sa AWS Spot Instances

Serbisyong arkitektura

Ang sukaranan nga arkitektura sa serbisyo nga atong hisgutan sa kini nga artikulo gipakita sa diagram sa ubos.

Paghimo ug Scalable API sa AWS Spot Instances

Application Load Balancer → EC2 Target Group → Elastic Container Service

Ang Application Load Balancer (ALB) gigamit isip balancer, nga nagpadala sa mga hangyo sa EC2 Target Group (TG). Ang TG ang responsable sa pag-abli sa mga pantalan sa mga higayon alang sa mga ALB ug pagkonektar niini sa mga pantalan sa mga sudlanan sa Elastic Container Service (ECS). Ang ECS ​​usa ka analogue sa Kubernetes sa AWS, nga nagdumala sa mga sudlanan sa Docker.

Ang usa ka pananglitan mahimong adunay daghang nagdagan nga mga sudlanan nga adunay parehas nga mga pantalan, mao nga dili naton kini mabutang nga pirmi. Gisultihan sa ECS ang TG nga naglansad kini usa ka bag-ong buluhaton (sa terminolohiya sa Kubernetes gitawag kini nga pod), gisusi niini ang mga libre nga pantalan sa pananglitan ug gi-assign ang usa niini sa gilunsad nga buluhaton. Kanunay usab nga gisusi sa TG kung ang instance ug ang API nagtrabaho ba niini gamit ang pagsusi sa kahimsog, ug kung adunay nakita nga mga problema, mohunong kini sa pagpadala mga hangyo didto.

EC2 Auto Scaling Groups + ECS Capacity Provider

Ang dayagram sa ibabaw wala magpakita sa serbisyo sa EC2 Auto Scaling Groups (ASG). Gikan sa ngalan imong masabtan nga kini ang responsable sa pag-scale sa mga higayon. Bisan pa, hangtod karon, ang AWS wala’y built-in nga abilidad sa pagdumala sa gidaghanon sa mga nagdagan nga makina gikan sa ECS. Gipaposible sa ECS ang pagsukod sa gidaghanon sa mga buluhaton, pananglitan, pinaagi sa paggamit sa CPU, RAM o gidaghanon sa mga hangyo. Apan kung ang mga buluhaton nag-okupar sa tanan nga libre nga mga higayon, nan ang mga bag-ong makina dili awtomatiko nga gihimo.

Nausab kini sa pag-abot sa ECS Capacity Providers (ECS CP). Karon ang matag serbisyo sa ECS mahimong i-uban sa usa ka ASG, ug kung ang mga buluhaton dili mohaum sa nagdagan nga mga higayon, unya ang mga bag-o ipataas (apan sulod sa natukod nga mga limitasyon sa ASG). Naglihok usab kini sa atbang nga direksyon, kung ang ECS ​​CP makakita sa mga idle nga mga higayon nga wala’y mga buluhaton, nan kini maghatag sa mando sa ASG nga isira kini. Ang ECS ​​CP adunay katakus sa pagpiho sa usa ka target nga porsyento sa pagkarga sa pananglitan, aron ang usa ka piho nga gidaghanon sa mga makina kanunay nga libre alang sa dali nga pag-scale sa mga buluhaton; hisgutan ko kini sa ulahi.

Mga Template sa Paglusad sa EC2

Ang katapusan nga serbisyo nga akong hisgutan sa dili pa moadto sa detalye bahin sa paghimo niini nga imprastraktura mao ang EC2 Launch Templates. Gitugotan ka nga maghimo usa ka template kung diin magsugod ang tanan nga mga makina, aron dili kini masubli gikan sa wala matag oras. Dinhi mahimo nimong pilion ang tipo sa makina nga magsugod, grupo sa seguridad, imahe sa disk ug daghang uban pang mga parameter. Mahimo usab nimong ipiho ang datos sa tiggamit nga i-upload sa tanan nga gilunsad nga mga higayon. Mahimo nimong ipadagan ang mga script sa datos sa tiggamit, pananglitan, mahimo nimong usbon ang sulud sa usa ka file Mga pag-configure sa ahente sa ECS.

Usa sa labing hinungdanon nga mga parameter sa pag-configure alang sa kini nga artikulo mao ang ECS_ENABLE_SPOT_INSTANCE_DRAINING= tinuod. Kung kini nga parameter gipalihok, unya sa diha nga ang ECS ​​makadawat og signal nga ang usa ka spot instance gikuha, kini nagbalhin sa tanan nga mga buluhaton nga nagtrabaho niini ngadto sa Draining status. Wala’y bag-ong buluhaton nga ma-assign niini nga higayon; kung adunay mga buluhaton nga gusto nga ilunsad niini karon, kini kanselahon. Ang mga hangyo gikan sa balancer mihunong usab sa pag-abot. Ang pagpahibalo sa pagtangtang sa instance moabut 2 minuto sa wala pa ang aktwal nga panghitabo. Busa, kung ang imong serbisyo wala magbuhat sa mga buluhaton nga mas taas pa sa 2 minuto ug wala magtipig bisan unsa sa disk, nan mahimo nimong gamiton ang mga higayon sa lugar nga dili mawala ang datos.

Mahitungod sa disk - AWS bag-o lang gibuhat Posible nga gamiton ang Elastic File System (EFS) kauban ang ECS; sa kini nga laraw, bisan ang disk dili usa ka babag, apan wala namon kini gisulayan, tungod kay sa prinsipyo dili namon kinahanglan ang disk aron matipigan ang estado. Pinaagi sa default, pagkahuman makadawat SIGINT (gipadala kung ang usa ka buluhaton gibalhin sa kahimtang sa Pag-draining), ang tanan nga mga buluhaton sa pagdagan mahunong pagkahuman sa 30 segundos, bisan kung wala pa kini nahuman; mahimo nimong usbon kini nga oras gamit ang parameter ECS_CONTAINER_STOP_TIMEOUT. Ang nag-unang butang mao nga dili kini ibutang sa sobra sa 2 ka minuto alang sa mga makina sa lugar.

Paghimo og serbisyo

Mopadayon kita sa paghimo sa gihulagway nga serbisyo. Sa proseso, dugang nakong ihulagway ang daghang mapuslanong mga punto nga wala hisgoti sa ibabaw. Sa kinatibuk-an, kini usa ka lakang-sa-lakang nga panudlo, apan dili nako tagdon ang pipila nga sukaranan o, sa kasukwahi, piho nga mga kaso. Ang tanan nga mga aksyon gihimo sa AWS visual console, apan mahimo nga kopyahon pinaagi sa programa gamit ang CloudFormation o Terraform. Sa Adapty gigamit namo ang Terraform.

Template sa Paglusad sa EC2

Kini nga serbisyo nagmugna og usa ka configuration sa mga makina nga gamiton. Ang mga templates gidumala sa EC2 -> Instances -> Ilunsad ang mga templates nga seksyon.

Imahe sa makina sa Amazon (AMI) — ipiho ang imahe sa disk diin ang tanan nga mga higayon ilunsad. Alang sa ECS, sa kadaghanan nga mga kaso takus nga gamiton ang na-optimize nga imahe gikan sa Amazon. Kanunay kini nga gi-update ug naglangkob sa tanan nga gikinahanglan aron molihok ang ECS. Aron mahibal-an ang kasamtangan nga ID sa imahe, adto sa panid Amazon ECS-optimized AMIs, pilia ang rehiyon nga imong gigamit ug kopyaha ang AMI ID alang niini. Pananglitan, alang sa us-east-1 nga rehiyon, ang kasamtangang ID sa panahon sa pagsulat mao ang ami-00c7c1cf5bdc913ed. Kini nga ID kinahanglang isulod sa butang nga Ipiho ang usa ka custom nga bili.

Instance type - ipakita ang tipo sa pananglitan. Pilia ang usa nga labing haum sa imong buluhaton.

Key pares (login) — Ipiho ang usa ka sertipiko diin mahimo nimong makonektar ang pananglitan pinaagi sa SSH, kung kinahanglan.

Mga setting sa network - ipiho ang mga parameter sa network. Platform sa networking sa kadaghanan nga mga kaso kinahanglan adunay usa ka Virtual Private Cloud (VPC). Mga grupo sa siguridad - mga grupo sa seguridad alang sa imong mga higayon. Tungod kay mogamit kami usa ka balanse sa atubangan sa mga higayon, girekomenda nako ang pagtino sa usa ka grupo dinhi nga gitugotan ang mga umaabot nga koneksyon gikan lamang sa balanse. Sa ato pa, aduna kay 2 ka grupo sa seguridad, usa para sa balancer, nga nagtugot sa mga inbound nga koneksyon gikan sa bisan asa sa mga pantalan 80 (http) ug 443 (https), ug ang ikaduha alang sa mga makina, nga nagtugot sa umaabot nga mga koneksyon sa bisan unsang mga pantalan gikan sa balancer nga grupo . Ang mga outbound nga koneksyon sa duha ka grupo kinahanglang ablihan gamit ang TCP protocol sa tanang port sa tanang adres. Mahimo nimong limitahan ang mga pantalan ug mga adres alang sa mga outgoing nga koneksyon, apan kinahanglan nimo nga kanunay nga bantayan nga wala nimo gisulayan ang pag-access sa usa ka butang sa usa ka sirado nga pantalan.

Pagtipig (gidaghanon) - ipiho ang mga parameter sa disk alang sa mga makina. Ang gidak-on sa disk dili mokubos sa gipiho sa AMI; alang sa ECS Optimized kini 30 GiB.

Mga advanced nga detalye - ipiho ang dugang nga mga parameter.

Opsyon sa pagpalit - kung gusto namon nga mopalit mga higayon nga lugar. Gusto namo, apan dili namo susihon kini nga kahon dinhi; among i-configure kini sa Auto Scaling Group, adunay daghang mga kapilian didto.

IAM instance profile - ipakita ang papel diin ang mga higayon ilunsad. Aron ang mga higayon nga modagan sa ECS, kinahanglan nila ang mga pagtugot, nga sagad makita sa papel ecsInstanceRole. Sa pipila ka mga kaso mahimo kini, kung dili, unya dinhi manwal kon unsaon pagbuhat niini. Pagkahuman sa paghimo, gipakita namon kini sa template.
Sunod adunay daghang mga parameter, sa panguna mahimo nimong ibilin ang mga default nga kantidad bisan diin, apan ang matag usa kanila adunay tin-aw nga paghulagway. Kanunay nakong gipalihok ang EBS-optimized nga pananglitan ug T2/T3 Unlimited nga mga opsyon kon gamiton mabuak higayon.

Ang datos sa tiggamit - ipahibalo ang datos sa tiggamit. Atong usbon ang file /etc/ecs/ecs.config, nga naglangkob sa ECS agent configuration.
Usa ka pananglitan kung unsa ang hitsura sa datos sa tiggamit:

#!/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 - ang parameter nagpakita nga ang pananglitan iya sa usa ka cluster nga adunay gihatag nga ngalan, nga mao, kini nga cluster makahimo sa pagbutang sa mga buluhaton niini nga server. Wala pa kami nakamugna og cluster, apan among gamiton kini nga ngalan sa paghimo niini.

ECS_ENABLE_SPOT_INSTANCE_DRAINING=true — ang parameter nagtino nga kung ang usa ka signal madawat aron mapatay ang usa ka lugar nga pananglitan, ang tanan nga mga buluhaton niini kinahanglan ibalhin sa kahimtang sa Pag-draining.

ECS_CONTAINER_STOP_TIMEOUT=1m - ang parameter nagtino nga human makadawat sa usa ka SIGINT signal, ang tanan nga mga buluhaton adunay 1 ka minuto sa wala pa gipatay.

ECS_ENGINE_AUTH_TYPE=docker - ang parameter nagpakita nga ang Docker scheme gigamit ingon nga mekanismo sa pagtugot

ECS_ENGINE_AUTH_DATA=... - mga parameter sa koneksyon sa pribadong rehistro sa sudlanan, diin gitipigan ang imong mga imahe sa Docker. Kung kini publiko, nan dili nimo kinahanglan nga ipiho ang bisan unsa.

Alang sa mga katuyoan niini nga artikulo, mogamit ako usa ka publiko nga imahe gikan sa Docker Hub, busa ipiho ang mga parameter ECS_ENGINE_AUTH_TYPE и ECS_ENGINE_AUTH_DATA dili kinahanglan.

Maayo ang pagkasayud: Girekomenda nga i-update kanunay ang AMI, tungod kay ang mga bag-ong bersyon nag-update sa mga bersyon sa Docker, Linux, ECS agent, ug uban pa. Aron dili makalimtan kini, mahimo nimo ipahimutang ang mga pahibalo mahitungod sa pagpagawas sa bag-ong mga bersyon. Makadawat ka og mga pahibalo pinaagi sa email ug mano-mano ang pag-update, o mahimo kang magsulat ug Lambda function nga awtomatik nga maghimo ug bag-ong bersyon sa Launch Template nga adunay updated nga AMI.

EC2 Auto Scaling Group

Ang Auto Scaling Group ang responsable sa paglansad ug pag-scale sa mga higayon. Ang mga grupo gidumala sa EC2 -> Auto Scaling -> Auto Scaling Groups seksyon.

Ilunsad ang template — pilia ang template nga gihimo sa miaging lakang. Gibiyaan namon ang default nga bersyon.

Mga kapilian sa pagpalit ug mga tipo sa pananglitan - Ipiho ang mga tipo sa mga higayon alang sa cluster. Ang pagsunod sa template sa paglansad naggamit sa tipo sa pananglitan gikan sa Template sa Paglusad. Paghiusa sa mga kapilian sa pagpalit ug mga tipo sa instance nagtugot kanimo nga dali nga ma-configure ang mga tipo sa pananglitan. Atong gamiton kini.

Opsyonal nga On-Demand base — ang gidaghanon sa mga regular, non-spot nga mga higayon nga kanunay molihok.

On-Demand nga porsyento labaw sa base — percentage ratio sa regular ug spot instances, 50-50 ang iapod-apod nga parehas, 20-80 sa matag regular nga instance 4 ka spot ang ipataas. Alang sa mga katuyoan niini nga pananglitan, akong ipasabut ang 50-50, apan sa tinuud kanunay namon nga buhaton ang 20-80, sa pipila ka mga kaso 0-100.

Mga lahi sa panghitabo — Dinhi mahimo nimong ipiho ang dugang nga mga tipo sa mga higayon nga gamiton sa cluster. Wala gyud mi gamit kay wa gyud ko kasabot sa meaning sa story. Tingali kini tungod sa mga limitasyon sa piho nga mga matang sa mga higayon, apan kini dali nga madugangan pinaagi sa suporta. Kung nahibal-an nimo ang aplikasyon, malipay ako nga basahon kini sa mga komento)

Paghimo ug Scalable API sa AWS Spot Instances

network — mga setting sa network, pilia ang VPC ug mga subnet para sa mga makina, sa kadaghanan nga mga kaso kinahanglan nimo nga pilion ang tanan nga magamit nga mga subnet.

Pagbalanse sa pagkarga - mga setting sa balanse, apan buhaton namon kini nga gilain, dili kami magtandog bisan unsa dinhi. Mga pagsusi sa kahimsog ma-configure usab unya.

Gidak-on sa grupo - gipakita namon ang mga limitasyon sa gidaghanon sa mga makina sa cluster ug ang gusto nga gidaghanon sa mga makina sa pagsugod. Ang gidaghanon sa mga makina sa cluster dili gayud moubos sa minimum nga gipiho ug labaw pa sa maximum, bisan kung ang scaling mahitabo sumala sa metrics.

Mga palisiya sa scaling - mga parameter sa pag-scale, apan mag-scale kami base sa nagdagan nga mga buluhaton sa ECS, mao nga i-configure namon ang pag-scale sa ulahi.

Instance scale-in nga proteksyon — pagpanalipod sa mga higayon gikan sa pagtangtang kung gipaubos. Gibuhat namo kini aron dili matangtang sa ASG ang makina nga adunay nagdagan nga mga buluhaton. Ang ECS ​​Capacity Provider mag-disable sa proteksyon sa mga higayon nga walay mga buluhaton.

Pagdugang mga tag — mahimo nimong ipiho ang mga tag alang sa mga higayon (alang niini, ang Tag bag-ong mga higayon nga checkbox kinahanglan nga susihon). Girekomenda nako ang pagpiho sa tag sa Ngalan, unya ang tanan nga mga higayon nga gilansad sa grupo adunay parehas nga ngalan, ug dali nga tan-awon kini sa console.

Paghimo ug Scalable API sa AWS Spot Instances

Pagkahuman sa paghimo sa grupo, ablihi kini ug adto sa seksyon sa Advanced nga mga pag-configure. Ngano nga dili tanan nga mga kapilian makita sa console sa yugto sa paghimo.

Mga polisiya sa pagtapos — mga lagda nga gikonsiderar kung gitangtang ang mga higayon. Gipadapat sila sa han-ay. Kanunay namong gamiton ang anaa sa hulagway sa ubos. Una, ang mga higayon nga adunay labing karaan nga Template sa Paglusad gitangtang (pananglitan, kung gi-update namon ang AMI, naghimo kami usa ka bag-ong bersyon, apan ang tanan nga mga higayon nakahimo sa pagbalhin niini). Unya ang mga higayon nga labing duol sa sunod nga oras sa pagsingil gipili. Ug unya ang labing karaan gipili base sa petsa sa paglansad.

Paghimo ug Scalable API sa AWS Spot Instances

Maayo ang pagkasayud: aron ma-update ang tanan nga mga makina sa usa ka cluster, sayon ​​​​gamiton Pag-refresh sa Instance. Kung imong isagol kini sa Lambda function gikan sa miaging lakang, makabaton ka usa ka hingpit nga awtomatiko nga sistema sa pag-update sa pananglitan. Sa dili pa i-update ang tanan nga mga makina, kinahanglan nimo nga i-disable ang instance scale-in nga proteksyon sa tanan nga mga higayon sa grupo. Dili pag-configure sa grupo, apan proteksyon gikan sa mga makina mismo, gihimo kini sa tab nga pagdumala sa Instance.

Application Load Balancer ug EC2 Target Group

Ang balancer gihimo sa seksyon EC2 → Load Balancing → Load Balancers. Atong gamiton ang Application Load Balancer; usa ka pagtandi sa lain-laing matang sa mga balancer mabasa sa panid sa serbisyo.

Mga tigpaminaw - makatarunganon ang paghimo sa mga pantalan nga 80 ug 443 ug i-redirect gikan sa 80 hangtod 443 gamit ang mga lagda sa balanse sa ulahi.

Mga Zona sa Pagkuha — sa kadaghanang kaso, nagpili mig accessibility zones para sa tanan.

I-configure ang Mga Setting sa Seguridad — ang SSL certificate alang sa balancer gipakita dinhi, ang labing kombenyente nga kapilian mao paghimo og sertipiko sa ACM. Mahitungod sa mga kalainan Kasaligang Patakaran mabasa sa dokumentasyon, mahimo nimong biyaan kini nga gipili pinaagi sa default ELBSecurityPolicy-2016-08. Human sa paghimo sa balancer, imong makita kini Ngalan sa DNS, nga kinahanglan nimong i-configure ang CNAME para sa imong domain. Pananglitan, kini ang hitsura sa Cloudflare.

Paghimo ug Scalable API sa AWS Spot Instances

Grupo sa Seguridad — paghimo o pagpili usa ka grupo sa seguridad alang sa balanse, nagsulat ako labi pa bahin niini sa ibabaw sa EC2 Launch Template → seksyon sa Mga setting sa network.

Target nga grupo — Naghimo kami usa ka grupo nga responsable sa pag-ruta sa mga hangyo gikan sa balancer ngadto sa mga makina ug pagsusi sa ilang pagkaanaa aron mapulihan kini kung adunay mga problema. Matang sa target dapat nga Instance, Protocol и Port bisan unsa, kung mogamit ka sa HTTPS alang sa komunikasyon tali sa balancer ug mga higayon, nan kinahanglan nimo nga mag-upload og sertipiko sa kanila. Alang sa mga katuyoan sa kini nga pananglitan, dili namon kini buhaton, biyaan ra namon ang port 80.

Mga pagsusi sa kahimsog - mga parameter alang sa pagsusi sa pagpaandar sa serbisyo. Sa usa ka tinuud nga serbisyo, kini kinahanglan nga usa ka bulag nga hangyo nga nagpatuman sa hinungdanon nga mga bahin sa lohika sa negosyo; alang sa mga katuyoan sa kini nga pananglitan, biyaan nako ang mga default nga setting. Sunod, mahimo nimong pilion ang agwat sa hangyo, timeout, mga kodigo sa kalampusan, ug uban pa. Sa among panig-ingnan, ipakita namon ang mga code sa Kalampusan 200-399, tungod kay ang imahe sa Docker nga gamiton nagbalik usa ka 304 code.

Paghimo ug Scalable API sa AWS Spot Instances

Pagrehistro sa mga Target - dinhi gipili ang mga awto alang sa grupo, apan sa among kaso kini buhaton sa ECS, mao nga laktawan lang namon kini nga lakang.

Maayo ang pagkasayud: sa lebel sa balanse mahimo nimong ma-enable ang mga troso nga ma-save sa S3 sa usa ka piho format. Gikan didto mahimo silang ma-eksport sa mga serbisyo sa ikatulo nga partido alang sa pag-analisar, o mahimo nimo ang mga pangutana sa SQL direkta sa datos sa S3 nga adunay gamit si Athena. Kombenyente kini ug molihok nga wala’y dugang nga code. Girekomenda usab nako ang pagpahimutang sa pagtangtang sa mga troso gikan sa balde sa S3 pagkahuman sa gitakda nga yugto sa panahon.

Kahulugan sa Buluhaton sa ECS

Sa miaging mga lakang, gibuhat namon ang tanan nga may kalabotan sa imprastraktura sa serbisyo; karon nagpadayon kami sa paghulagway sa mga sudlanan nga among ilunsad. Gihimo kini sa ECS → Task Definition section.

Ilunsad ang matang pagkaangay - pilia ang EC2.

Pagpatuman sa buluhaton nga tahas sa IAM - pilia ecsTaskExecutionRole. Gigamit kini, gisulat ang mga troso, gihatag ang pag-access sa mga sekreto nga variable, ug uban pa.

Sa Container Definition section, i-klik ang Add Container.

Image - link sa imahe nga adunay code sa proyekto; alang niini nga pananglitan mogamit ako usa ka publiko nga imahe gikan sa Docker Hub bitnami/node-ehemplo:0.0.1.

Mga Limitasyon sa Memorya - mga limitasyon sa memorya alang sa sudlanan. Lisud nga Limitasyon - lisud nga limitasyon, kung ang sudlanan molapas sa gitakda nga kantidad, ang docker kill command ipatuman, ang sudlanan mamatay dayon. Hinay nga Limitasyon - humok nga limitasyon, ang sudlanan mahimong molapas sa gitakda nga kantidad, apan kini nga parameter pagaisipon kung ibutang ang mga buluhaton sa mga makina. Pananglitan, kung ang usa ka makina adunay 4 GiB sa RAM, ug ang humok nga limitasyon sa usa ka sudlanan mao ang 2048 MiB, nan kini nga makina mahimong adunay labing kadaghan nga 2 nga nagdagan nga mga buluhaton sa kini nga sudlanan. Sa tinuud, ang 4 GiB sa RAM gamay ra sa 4096 MiB, kini makita sa tab nga ECS Instances sa cluster. Ang humok nga limitasyon dili mahimong labaw sa lisud nga limitasyon. Importante nga masabtan nga kung adunay daghang mga sudlanan sa usa ka buluhaton, nan ang ilang mga limitasyon gisumada.

Mga mapa sa pantalan - sa Host port Gipakita namon ang 0, kini nagpasabut nga ang pantalan i-assign nga dinamiko ug bantayan sa Target nga Grupo. Container Port — ang pantalan nga gipadagan sa imong aplikasyon sagad gipiho sa execution command, o gi-assign sa imong application code, Dockerfile, etc. Alang sa among pananglitan gamiton namon ang 3000 tungod kay kini gilista sa Dockerfile ang imahe nga gigamit.

Pagsusi sa panglawas - mga parameter sa pagsusi sa kahimsog sa sulud, dili malibog sa usa nga gi-configure sa Target nga Grupo.

Environment - mga setting sa palibot. Mga yunit sa CPU - susama sa mga limitasyon sa Memorya, mahitungod lamang sa processor. Ang matag processor core mao ang 1024 nga mga yunit, mao nga kung ang server adunay dual-core nga processor ug ang sudlanan gitakda sa 512, nan ang 4 nga mga buluhaton uban niini nga sudlanan mahimong ilunsad sa usa ka server. Ang mga yunit sa CPU kanunay nga katumbas sa gidaghanon sa mga cores; dili mahimo nga gamay ra sa kanila, sama sa kaso sa memorya.

Command — usa ka sugo sa pagsugod sa usa ka serbisyo sa sulod sa usa ka sudlanan, ang tanan nga mga parameter gipiho nga gibulag sa mga koma. Mahimo kini nga gunicorn, npm, ug uban pa. Kung wala gitino, ang kantidad sa CMD nga direktiba gikan sa Dockerfile gamiton. Gipakita namo npm,start.

Mga variable sa palibot - mga variable sa palibot sa sulud. Mahimo kini nga yano nga datos sa teksto o sekreto nga mga variable gikan sa Tagdumala sa mga Sekreto o Parameter Store.

Pagtipig ug Pag-log — dinhi atong i-set up ang logging sa CloudWatch Logs (usa ka serbisyo para sa mga log gikan sa AWS). Aron mahimo kini, i-enable lang ang Auto-configure CloudWatch Logs checkbox. Human sa paghimo sa Task Definition, usa ka grupo sa mga troso ang awtomatik nga himoon sa CloudWatch. Pinaagi sa default, ang mga troso gitipigan niini hangtod sa hangtod; Girekomenda nako ang pagbag-o sa panahon sa Retensyon gikan sa Never Expire hangtod sa gikinahanglan nga panahon. Gihimo kini sa mga grupo sa CloudWatch Log, kinahanglan nimo nga i-klik ang kasamtangan nga panahon ug pagpili og bag-o.

Paghimo ug Scalable API sa AWS Spot Instances

ECS Cluster ug ECS ​​Capacity Provider

Adto sa ECS → Clusters nga seksyon para maghimo ug cluster. Gipili namo ang EC2 Linux + Networking isip template.

Ngalan sa cluster - hinungdanon kaayo, gihimo namon dinhi ang parehas nga ngalan nga gitakda sa parameter sa Paglusad sa Template ECS_CLUSTER, sa among kaso- DemoApiClusterProd. Susiha ang Paghimo og walay sulod nga cluster checkbox. Opsyonal, mahimo nimong palihokon ang Container Insights sa pagtan-aw sa mga sukatan para sa mga serbisyo sa CloudWatch. Kung gibuhat nimo ang tanan sa husto, unya sa seksyon sa ECS Instances imong makita ang mga makina nga gihimo sa grupo sa Auto Scaling.

Paghimo ug Scalable API sa AWS Spot Instances

Adto sa tab Mga Taghatag sa Kapasidad ug paghimo og bag-o. Pahinumdumi ko nimo nga kinahanglan nimo nga kontrolon ang paghimo ug pagsira sa mga makina depende sa gidaghanon sa nagdagan nga mga buluhaton sa ECS. Mahinungdanon nga timan-an nga ang usa ka tighatag mahimo ra itudlo sa usa ka grupo.

Grupo sa Auto Scaling — pilia ang nabuhat na nga grupo.

Gidumala nga scaling — i-enable kini aron ang provider maka-scale sa serbisyo.

Target nga kapasidad% - unsa nga porsyento sa mga makina nga puno sa mga buluhaton ang atong gikinahanglan. Kung imong gitakda ang 100%, nan ang tanan nga mga makina kanunay nga busy sa mga buluhaton nga nagdagan. Kung imong gitakda ang 50%, nan ang katunga sa mga awto kanunay nga libre. Sa kini nga kaso, kung adunay usa ka mahait nga paglukso sa karga, ang mga bag-ong taxi moabut dayon sa libre nga mga awto, nga dili na maghulat nga adunay mga higayon nga ipakatap.

Gidumala nga proteksyon sa pagtapos — enable, kini nga parameter nagtugot sa provider sa pagtangtang sa proteksyon sa mga higayon gikan sa pagtangtang. Kini mahitabo kung walay aktibo nga mga buluhaton sa makina ug gitugotan ang Target nga kapasidad%.

Serbisyo sa ECS ug setup sa scaling

Katapusan nga lakang :) Aron makahimo usa ka serbisyo, kinahanglan nimo nga moadto sa kaniadto gibuhat nga cluster sa tab nga Mga Serbisyo.

Uri sa paglusad — kinahanglan nimo nga i-klik ang Switch to capacity provider nga estratehiya ug pilia ang nabuhat kaniadto nga mga provider.

Paghimo ug Scalable API sa AWS Spot Instances

Kahulugan sa Buluhaton — pilia ang nabuhat na nga Task Definition ug ang rebisyon niini.

Ngalan sa serbisyo — aron malikayan ang kalibog, kanunay namong gipakita ang parehas sa Task Definition.

Uri sa serbisyo - kanunay Replica.

Gidaghanon sa mga buluhaton — ang gitinguha nga gidaghanon sa mga aktibo nga buluhaton sa serbisyo. Kini nga parametro kontrolado pinaagi sa pag-scale, apan kinahanglan gihapon nga espesipiko.

Minimum nga himsog nga porsyento и Maximum nga porsyento - mahibal-an ang pamatasan sa mga buluhaton sa panahon sa pag-deploy. Ang default nga mga kantidad mao ang 100 ug 200, nga nagpakita nga sa panahon sa pag-deploy ang gidaghanon sa mga buluhaton modaghan sa daghang mga higayon, ug unya mobalik sa gitinguha nga kantidad. Kung ikaw adunay 1 nga buluhaton nga nagdagan, min = 0, ug max = 100, unya sa panahon sa pag-deploy kini pagapatyon, ug pagkahuman usa ka bag-o ang ipataas, nga mao, kini ang downtime. Kung 1 nga buluhaton ang nagdagan, min = 50, max = 150, nan ang pag-deploy dili mahitabo, tungod kay ang 1 nga buluhaton dili mabahin sa katunga o madugangan sa usa ug tunga ka beses.

Type sa pagdeploy - biyai ang pag-update sa Rolling.

Mga Template sa Placement - mga lagda alang sa pagbutang sa mga buluhaton sa mga makina. Ang default mao ang AZ Balanced Spread - kini nagpasabut nga ang matag bag-ong buluhaton ibutang sa usa ka bag-ong higayon hangtod ang mga makina sa tanan nga magamit nga mga sona. Kanunay namong gibuhat ang BinPack - CPU ug Spread - AZ; uban niini nga palisiya, ang mga buluhaton gibutang sa labing kadaghan nga mahimo sa usa ka makina matag CPU. Kung gikinahanglan ang paghimo og bag-ong makina, gihimo kini sa bag-ong availability zone.

Paghimo ug Scalable API sa AWS Spot Instances

Uri sa load balancer — pilia ang Application Load Balancer.

Papel sa serbisyo sa IAM - pilia ecsServiceRole.

Ngalan sa load balancer - pilia ang nahimo kaniadto nga balanse.

Grace period sa pagsusi sa panglawas — paghunong sa dili pa maghimo og mga pagsusi sa kahimsog pagkahuman sa paglansad sa usa ka bag-ong buluhaton, kasagaran namon kini gibutang sa 60 segundos.

Kontainer sa pagkarga sa balanse — sa butang Ngalan sa Target nga grupo, pilia ang nabuhat nga grupo, ug ang tanan awtomatikong mapuno.

Paghimo ug Scalable API sa AWS Spot Instances

Serbisyo Auto Scaling - mga parameter sa pag-scale sa serbisyo. Pilia ang I-configure ang Serbisyo Auto Scaling aron ma-adjust ang gusto nga ihap sa imong serbisyo. Gibutang namon ang minimum ug labing kadaghan nga mga buluhaton kung nag-scale.

Ang tahas sa IAM alang sa Serbisyo Auto Scaling - pilia AWSServiceRoleForApplicationAutoScaling_ECSService.

Awtomatikong mga palisiya sa pag-scale sa buluhaton - mga lagda alang sa scaling. Adunay 2 ka matang:

  1. Target nga pagsubay - pagsubay sa target metrics (CPU/RAM paggamit o gidaghanon sa mga hangyo alang sa matag buluhaton). Pananglitan, gusto namon nga ang kasagaran nga load sa processor mahimong 85%, kung kini mahimong mas taas, ang mga bag-ong buluhaton idugang hangtod nga maabot ang target nga kantidad. Kung ang load mas ubos, unya ang mga buluhaton tangtangon, sa sukwahi, gawas kung ang proteksyon batok sa pag-us-os mahimo (I-disable ang scale-in).
  2. Lakang scaling - reaksyon sa usa ka arbitraryong panghitabo. Dinhi mahimo nimong i-configure ang usa ka reaksyon sa bisan unsang panghitabo (CloudWatch Alarm), kung kini mahitabo, mahimo nimong idugang o tangtangon ang piho nga gidaghanon sa mga buluhaton, o ipiho ang eksaktong gidaghanon sa mga buluhaton.

Ang usa ka serbisyo mahimo’g adunay daghang mga lagda sa pag-scale, mahimo’g mapuslanon kini, ang panguna nga butang mao ang pagsiguro nga dili sila magkasumpaki sa usag usa.

konklusyon

Kung gisunod nimo ang mga panudlo ug gigamit ang parehas nga imahe sa Docker, kinahanglan nga ibalik sa imong serbisyo ang usa ka panid nga sama niini.

Paghimo ug Scalable API sa AWS Spot Instances

  1. Naghimo kami og usa ka template sumala sa diin ang tanan nga mga makina sa serbisyo gilunsad. Nakat-on usab kami kung giunsa ang pag-update sa mga makina kung nabag-o ang template.
  2. Among gi-configure ang pagproseso sa spot instance stop signal, mao nga sulod sa usa ka minuto human kini madawat, ang tanan nga mga buluhaton nga nagdagan gikuha gikan sa makina, mao nga walay nawala o nabalda.
  3. Gipataas namo ang balancer aron parehas ang pag-apod-apod sa load sa mga makina.
  4. Naghimo kami usa ka serbisyo nga nagdagan sa mga higayon sa lugar, nga nagpamenos sa gasto sa makina sa mga 3 ka beses.
  5. Among gi-configure ang autoscaling sa duha ka direksyon aron madumala ang dugang nga mga workloads nga walay gasto sa downtime.
  6. Gigamit namo ang Capacity Provider aron ang aplikasyon modumala sa imprastraktura (mga makina) ug dili sa laing paagi.
  7. Nindot mi.

Kung adunay ka matag-an nga mga spike sa load, pananglitan nag-advertise ka sa usa ka dako nga kampanya sa email, mahimo nimong i-set up ang scaling pinaagi sa iskedyul.

Mahimo usab nimo nga sukdon base sa datos gikan sa lainlaing mga bahin sa imong sistema. Pananglitan, kami adunay gamit pagpadala sa indibidwal nga mga tanyag nga promosyon tiggamit sa mobile application. Usahay ang usa ka kampanya ipadala sa 1M+ ka tawo. Pagkahuman sa ingon nga pag-apod-apod, kanunay adunay daghang pagtaas sa mga hangyo sa API, tungod kay daghang mga tiggamit ang nag-log in sa aplikasyon sa parehas nga oras. Mao nga kung nakita namon nga adunay labi pa nga mga sukaranan nga mga indikasyon sa pila alang sa pagpadala sa mga abiso sa pagduso sa promosyon, mahimo dayon namon nga ilunsad ang daghang dugang nga mga makina ug mga buluhaton aron maandam alang sa pagkarga.

Malipay ko kung isulti nimo kanako sa mga komento nga makapaikag nga mga kaso sa paggamit sa mga higayon sa lugar ug ECS ​​o usa ka butang bahin sa pag-scale.

Sa dili madugay adunay mga artikulo bahin sa kung giunsa namo pagproseso ang libu-libo nga analytical nga mga panghitabo matag segundo sa usa ka kadaghanan nga wala’y server nga stack (uban ang kuwarta) ug kung giunsa ang pag-deploy sa mga serbisyo gamit ang GitLab CI ug Terraform Cloud.

Mag-subscribe kanamo, kini mahimong makapaikag!

Ang mga rehistradong tiggamit lamang ang makaapil sa survey. Sign in, walay sapayan.

Gigamit ba nimo ang mga spot instances sa produksiyon?

  • 22,2%Oo6

  • 66,7%Dili18

  • 11,1%Nakat-unan nako sila gikan sa usa ka artikulo ug nagplano nga gamiton kini3

27 ka tiggamit ang nagboto. 5 ka tiggamit ang nag-abstain.

Source: www.habr.com

Idugang sa usa ka comment