Adeiladu API Graddadwy ar Achosion Sbot AWS

Helo pawb! Fy enw i yw Kirill, fi yw CTO yn Adapty. Mae'r rhan fwyaf o'n pensaernïaeth ar AWS, a heddiw byddaf yn siarad am sut y gwnaethom leihau costau gweinydd 3 gwaith trwy ddefnyddio enghreifftiau sbot mewn amgylchedd cynhyrchu, yn ogystal â sut i sefydlu eu graddfa auto. Yn gyntaf bydd trosolwg o sut mae'n gweithio, ac yna cyfarwyddiadau manwl ar gyfer cychwyn arni.

Beth yw Achosion Sbot?

Smotyn mae achosion yn weinyddion defnyddwyr AWS eraill sy'n segur ar hyn o bryd, ac maen nhw'n eu gwerthu am bris gostyngol mawr (mae Amazon yn ysgrifennu hyd at 90%, yn ein profiad ni ~3x, yn amrywio yn dibynnu ar y rhanbarth, AZ a math yr enghraifft). Eu prif wahaniaeth o rai arferol yw y gallant ddiffodd unrhyw bryd. Felly, am amser hir roeddem yn credu ei bod yn arferol eu defnyddio ar gyfer amgylcheddau crai, neu ar gyfer tasgau o gyfrifo rhywbeth, gyda chanlyniadau canolradd wedi'u harbed ar S3 neu yn y gronfa ddata, ond nid ar gyfer gwerthu. Mae yna atebion trydydd parti sy'n eich galluogi i ddefnyddio smotiau ar gynhyrchu, ond mae llawer o faglau ar gyfer ein hachos ni, felly ni wnaethom eu gweithredu. Mae'r dull a ddisgrifir yn yr erthygl yn gweithio'n gyfan gwbl o fewn swyddogaeth safonol AWS, heb sgriptiau ychwanegol, coronau, ac ati.

Isod mae ychydig o sgrinluniau sy'n dangos yr hanes prisiau ar gyfer achosion yn y fan a'r lle.

m5.large yn rhanbarth eu-gorllewin-1 (Iwerddon). Mae'r pris wedi bod yn sefydlog ar y cyfan ers 3 mis, gan arbed 2.9x ar hyn o bryd.

Adeiladu API Graddadwy ar Achosion Sbot AWS

m5.large yn y rhanbarth us-ddwyrain-1 (N. Virginia). Mae'r pris yn newid yn gyson dros 3 mis, gan arbed ar hyn o bryd o 2.3x i 2.8x yn dibynnu ar y parth argaeledd.

Adeiladu API Graddadwy ar Achosion Sbot AWS

t3.small yn y rhanbarth us-ddwyrain-1 (N. Virginia). Mae'r pris wedi bod yn sefydlog ers 3 mis, gan arbed 3.4x ar hyn o bryd.

Adeiladu API Graddadwy ar Achosion Sbot AWS

Pensaernïaeth gwasanaeth

Dangosir pensaernïaeth sylfaenol y gwasanaeth y byddwn yn siarad amdano yn yr erthygl hon yn y diagram isod.

Adeiladu API Graddadwy ar Achosion Sbot AWS

Balanswr Llwyth Cais → Grŵp Targed EC2 → Gwasanaeth Cynhwysydd Elastig

Defnyddir y Balanswr Llwyth Ceisiadau (ALB) fel mantolenydd, sy'n anfon ceisiadau at Grŵp Targed EC2 (TG). Mae TG yn gyfrifol am agor porthladdoedd ar achosion ALBs a'u cysylltu â phorthladdoedd cynwysyddion Gwasanaeth Cynhwysydd Elastig (ECS). Mae ECS yn analog o Kubernetes yn AWS, sy'n rheoli cynwysyddion Docker.

Gall un achos fod â nifer o gynwysyddion rhedeg gyda'r un porthladdoedd, felly ni allwn eu gosod yn sefydlog. Mae ECS yn dweud wrth TG ei fod yn lansio tasg newydd (yn nherminoleg Kubernetes gelwir hyn yn god), mae'n gwirio am borthladdoedd rhad ac am ddim ar yr enghraifft ac yn aseinio un ohonynt i'r dasg a lansiwyd. Mae TG hefyd yn gwirio'n rheolaidd a yw'r enghraifft a'r API yn gweithio arno gan ddefnyddio gwiriad iechyd, ac os yw'n gweld unrhyw broblemau, mae'n rhoi'r gorau i anfon ceisiadau yno.

Grwpiau Graddio Auto EC2 + Darparwyr Gallu ECS

Nid yw'r diagram uchod yn dangos gwasanaeth Grwpiau Graddio Awtomatig EC2 (ASG). O'r enw gallwch ddeall ei fod yn gyfrifol am achosion graddio. Fodd bynnag, tan yn ddiweddar, nid oedd gan AWS allu adeiledig i reoli nifer y peiriannau rhedeg o ECS. Gwnaeth ECS hi'n bosibl graddio nifer y tasgau, er enghraifft, yn ôl defnydd CPU, RAM neu nifer y ceisiadau. Ond pe bai tasgau'n llenwi pob achos am ddim, yna ni chafodd peiriannau newydd eu creu'n awtomatig.

Mae hyn wedi newid gyda dyfodiad Darparwyr Capasiti ECS (ECS CP). Nawr gall pob gwasanaeth yn ECS fod yn gysylltiedig ag ASG, ac os nad yw'r tasgau'n cyd-fynd â'r achosion rhedeg, yna bydd rhai newydd yn cael eu codi (ond o fewn y terfynau ASG sefydledig). Mae hyn hefyd yn gweithio i'r cyfeiriad arall, os bydd ECS CP yn gweld achosion segur heb dasgau, yna bydd yn rhoi gorchymyn ASG i'w cau. Mae gan ECS CP y gallu i nodi canran darged o lwyth enghreifftiau, fel bod nifer benodol o beiriannau bob amser yn rhydd ar gyfer tasgau graddio'n gyflym; Byddaf yn siarad am hyn ychydig yn ddiweddarach.

Templedi Lansio EC2

Y gwasanaeth olaf y byddaf yn siarad amdano cyn mynd i fanylion am greu'r seilwaith hwn yw Templedi Lansio EC2. Mae'n caniatáu ichi greu templed y bydd pob peiriant yn cychwyn yn unol ag ef, er mwyn peidio ag ailadrodd hyn o'r dechrau bob tro. Yma gallwch ddewis y math o beiriant i ddechrau, grŵp diogelwch, delwedd disg a llawer o baramedrau eraill. Gallwch hefyd nodi data defnyddwyr a fydd yn cael eu huwchlwytho i bob achos a lansiwyd. Gallwch redeg sgriptiau mewn data defnyddwyr, er enghraifft, gallwch olygu cynnwys ffeil Cyfluniadau asiant ECS.

Un o'r paramedrau cyfluniad pwysicaf ar gyfer yr erthygl hon yw ECS_ENABLE_SPOT_INSTANCE_DRAINING= gwir. Os yw'r paramedr hwn wedi'i alluogi, yna cyn gynted ag y bydd ECS yn derbyn arwydd bod enghraifft yn cael ei thynnu i ffwrdd, mae'n trosglwyddo'r holl dasgau sy'n gweithio arno i'r statws Draenio. Ni fydd unrhyw dasgau newydd yn cael eu neilltuo i'r achos hwn; os oes tasgau sydd am gael eu cyflwyno iddo ar hyn o bryd, byddant yn cael eu canslo. Mae ceisiadau gan y balanswr hefyd yn peidio â dod. Daw hysbysiad o ddileu enghraifft 2 funud cyn y digwyddiad gwirioneddol. Felly, os nad yw'ch gwasanaeth yn cyflawni tasgau mwy na 2 funud ac nad yw'n arbed unrhyw beth ar ddisg, yna gallwch ddefnyddio achosion yn y fan a'r lle heb golli data.

Ynglŷn â disg - AWS yn ddiweddar gwnaeth Mae'n bosibl defnyddio'r System Ffeil Elastig (EFS) ynghyd ag ECS; gyda'r cynllun hwn, nid yw hyd yn oed y ddisg yn rhwystr, ond ni wnaethom roi cynnig ar hyn, oherwydd mewn egwyddor nid oes angen y ddisg arnom i storio'r cyflwr. Yn ddiofyn, ar ôl derbyn SIGINT (a anfonir pan fydd tasg yn cael ei throsglwyddo i'r statws Draenio), bydd yr holl dasgau rhedeg yn cael eu hatal ar ôl 30 eiliad, hyd yn oed os nad ydynt wedi'u cwblhau eto; gallwch newid yr amser hwn gan ddefnyddio'r paramedr ECS_CONTAINER_STOP_TIMEOUT. Y prif beth yw peidio â'i osod am fwy na 2 funud ar gyfer peiriannau sbot.

Creu gwasanaeth

Gadewch i ni symud ymlaen i greu'r gwasanaeth a ddisgrifir. Yn y broses, byddaf hefyd yn disgrifio nifer o bwyntiau defnyddiol na chawsant eu crybwyll uchod. Yn gyffredinol, mae hwn yn gyfarwyddyd cam wrth gam, ond ni fyddaf yn ystyried rhai achosion sylfaenol iawn neu, i'r gwrthwyneb, achosion penodol iawn. Perfformir yr holl gamau gweithredu yn y consol gweledol AWS, ond gellir eu hatgynhyrchu'n rhaglennol gan ddefnyddio CloudFormation neu Terraform. Yn Adapty rydym yn defnyddio Terraform.

Templed Lansio EC2

Mae'r gwasanaeth hwn yn creu cyfluniad o beiriannau a fydd yn cael eu defnyddio. Rheolir templedi yn yr adran EC2 -> Enghreifftiau -> Lansio templedi.

Delwedd peiriant Amazon (AMI) — nodwch y ddelwedd ddisg y bydd pob achos yn cael ei lansio ag ef. Ar gyfer ECS, yn y rhan fwyaf o achosion mae'n werth defnyddio'r ddelwedd wedi'i optimeiddio o Amazon. Mae'n cael ei diweddaru'n rheolaidd ac mae'n cynnwys popeth sy'n angenrheidiol i ECS weithio. I ddarganfod ID y ddelwedd gyfredol, ewch i'r dudalen AMIs Amazon ECS-optimized, dewiswch y rhanbarth rydych chi'n ei ddefnyddio a chopïwch yr ID AMI ar ei gyfer. Er enghraifft, ar gyfer y rhanbarth us-east-1, yr ID cyfredol ar adeg ysgrifennu yw ami-00c7c1cf5bdc913ed. Rhaid i'r ID hwn gael ei fewnosod yn yr eitem Penodi gwerth wedi'i deilwra.

Math o enghraifft — nodwch y math o enghraifft. Dewiswch yr un sy'n gweddu orau i'ch tasg.

Pâr allwedd (mewngofnodi) — nodwch dystysgrif y gallwch gysylltu â'r enghraifft â hi trwy SSH, os oes angen.

Lleoliadau rhwydwaith - nodi paramedrau'r rhwydwaith. Llwyfan rhwydweithio yn y rhan fwyaf o achosion dylai fod Cwmwl Preifat Rhithwir (VPC). Grwpiau diogelwch — grwpiau diogelwch ar gyfer eich achosion. Gan y byddwn yn defnyddio balancer o flaen yr achosion, rwy'n argymell nodi grŵp yma sy'n caniatáu cysylltiadau sy'n dod i mewn o'r balans yn unig. Hynny yw, bydd gennych 2 grŵp diogelwch, un ar gyfer y balancer, sy'n caniatáu cysylltiadau i mewn o unrhyw le ar borthladdoedd 80 (http) a 443 (https), a'r ail ar gyfer peiriannau, sy'n caniatáu cysylltiadau sy'n dod i mewn ar unrhyw borthladdoedd o'r grŵp balancer . Rhaid agor cysylltiadau allan yn y ddau grŵp gan ddefnyddio'r protocol TCP i bob porthladd i bob cyfeiriad. Gallwch gyfyngu ar borthladdoedd a chyfeiriadau ar gyfer cysylltiadau sy'n mynd allan, ond yna mae angen i chi fonitro'n gyson nad ydych yn ceisio cyrchu rhywbeth ar borthladd caeedig.

Storio (cyfrolau) - nodwch y paramedrau disg ar gyfer y peiriannau. Ni all maint y ddisg fod yn llai na'r hyn a nodir yn yr AMI; ar gyfer ECS Optimized mae'n 30 GiB.

Manylion uwch - nodi paramedrau ychwanegol.

Opsiwn prynu — a ydym am brynu achosion yn y fan a'r lle. Rydyn ni eisiau, ond ni fyddwn yn ticio'r blwch hwn yma; byddwn yn ei ffurfweddu yn y Auto Scaling Group, mae yna fwy o opsiynau yno.

Proffil enghraifft IAM — nodi ym mha rôl y bydd yr achosion yn cael eu lansio. Er mwyn i achosion redeg yn ECS, mae angen caniatâd arnynt, a geir fel arfer yn y rôl ecsInstanceRole. Mewn rhai achosion gellir ei greu, os na, yna yma cyfarwyddyd ar sut i wneud hyn. Ar ôl creu, rydym yn ei nodi yn y templed.
Nesaf mae yna lawer o baramedrau, yn y bôn gallwch chi adael gwerthoedd diofyn ym mhobman, ond mae gan bob un ohonynt ddisgrifiad clir. Rwyf bob amser yn galluogi'r enghraifft wedi'i optimeiddio gan EBS a'r opsiynau T2 / T3 Unlimited os cânt eu defnyddio byrstable achosion.

Data defnyddiwr - nodi data defnyddwyr. Byddwn yn golygu'r ffeil /etc/ecs/ecs.config, sy'n cynnwys cyfluniad asiant ECS.
Enghraifft o sut y gallai data defnyddwyr edrych:

#!/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 - mae'r paramedr yn nodi bod yr enghraifft yn perthyn i glwstwr gyda'r enw a roddir, hynny yw, bydd y clwstwr hwn yn gallu gosod ei dasgau ar y gweinydd hwn. Nid ydym wedi creu clwstwr eto, ond byddwn yn defnyddio'r enw hwn wrth ei greu.

ECS_ENABLE_SPOT_INSTANCE_DRAINING=true — mae'r paramedr yn nodi, pan dderbynnir signal i ddiffodd enghraifft sbot, y dylid trosglwyddo'r holl dasgau arno i'r statws Draenio.

ECS_CONTAINER_STOP_TIMEOUT=1m - mae'r paramedr yn nodi, ar ôl derbyn signal SIGINT, bod gan bob tasg 1 munud cyn cael ei lladd.

ECS_ENGINE_AUTH_TYPE=docker — mae'r paramedr yn nodi bod y cynllun Dociwr yn cael ei ddefnyddio fel y mecanwaith awdurdodi

ECS_ENGINE_AUTH_DATA=... - paramedrau cysylltu â'r gofrestr cynhwysydd preifat, lle mae'ch delweddau Docker yn cael eu storio. Os yw'n gyhoeddus, yna nid oes angen i chi nodi unrhyw beth.

At ddibenion yr erthygl hon, byddaf yn defnyddio delwedd gyhoeddus o Docker Hub, felly nodwch y paramedrau ECS_ENGINE_AUTH_TYPE и ECS_ENGINE_AUTH_DATA dim angen.

Mae'n dda gwybod: Argymhellir diweddaru'r AMI yn rheolaidd, oherwydd mae fersiynau newydd yn diweddaru fersiynau o Docker, Linux, asiant ECS, ac ati I beidio ag anghofio am hyn, gallwch gosod hysbysiadau am ryddhau fersiynau newydd. Gallwch dderbyn hysbysiadau trwy e-bost a'u diweddaru â llaw, neu gallwch ysgrifennu swyddogaeth Lambda a fydd yn creu fersiwn newydd o Launch Template yn awtomatig gydag AMI wedi'i ddiweddaru.

Grŵp Graddio Auto EC2

Mae Auto Scaling Group yn gyfrifol am lansio a graddio achosion. Rheolir grwpiau yn yr adran EC2 -> Graddio Auto -> Grwpiau Graddio Awtomatig.

Lansio templed - dewiswch y templed a grëwyd yn y cam blaenorol. Rydym yn gadael y fersiwn rhagosodedig.

Opsiynau prynu a mathau o enghreifftiau — nodi'r mathau o achosion ar gyfer y clwstwr. Mae Cadw at y templed lansio yn defnyddio'r math enghraifft o'r Templed Lansio. Mae cyfuno opsiynau prynu a mathau o enghreifftiau yn caniatáu ichi ffurfweddu mathau o enghreifftiau yn hyblyg. Byddwn yn ei ddefnyddio.

Sylfaen Ar-Galw Opsiynol — nifer yr achosion rheolaidd, di-fanwl a fydd bob amser yn gweithio.

Canran ar-alw uwchlaw'r sylfaen — cymhareb ganrannol o achosion rheolaidd a sbot, bydd 50-50 yn cael eu dosbarthu'n gyfartal, 20-80 ar gyfer pob achos rheolaidd codir 4 sbot. At ddibenion yr enghraifft hon, byddaf yn nodi 50-50, ond mewn gwirionedd rydym yn aml yn gwneud 20-80, mewn rhai achosion 0-100.

Mathau o leoliadau — yma gallwch nodi mathau ychwanegol o achosion a fydd yn cael eu defnyddio yn y clwstwr. Wnaethon ni byth ei ddefnyddio oherwydd dydw i ddim wir yn deall ystyr y stori. Efallai bod hyn oherwydd y cyfyngiadau ar fathau penodol o achosion, ond gellir eu cynyddu'n hawdd trwy gymorth. Os ydych chi'n gwybod y cais, byddaf yn falch o'i ddarllen yn y sylwadau)

Adeiladu API Graddadwy ar Achosion Sbot AWS

Rhwydwaith — gosodiadau rhwydwaith, dewiswch VPC ac is-rwydweithiau ar gyfer peiriannau, yn y rhan fwyaf o achosion dylech ddewis yr holl is-rwydweithiau sydd ar gael.

Cydbwyso llwyth - gosodiadau balancer, ond byddwn yn gwneud hyn ar wahân, ni fyddwn yn cyffwrdd ag unrhyw beth yma. Gwiriadau iechyd bydd hefyd yn cael ei ffurfweddu yn ddiweddarach.

Maint y grŵp - rydym yn nodi'r terfynau ar nifer y peiriannau yn y clwstwr a'r nifer dymunol o beiriannau ar y dechrau. Ni fydd nifer y peiriannau yn y clwstwr byth yn llai na'r isafswm a nodir ac yn fwy na'r uchafswm, hyd yn oed os dylid graddio yn ôl y metrigau.

Polisïau graddio — paramedrau graddio, ond byddwn yn graddio yn seiliedig ar y tasgau ECS sy'n rhedeg, felly byddwn yn ffurfweddu'r graddio yn ddiweddarach.

Er enghraifft graddfa-mewn amddiffyn — diogelu achosion rhag cael eu dileu wrth gwtogi. Rydym yn ei alluogi fel nad yw ASG yn dileu'r peiriant sydd â thasgau rhedeg. Bydd Darparwr Gallu ECS yn analluogi amddiffyniad ar gyfer achosion nad oes ganddynt dasgau.

Ychwanegu tagiau — gallwch nodi tagiau ar gyfer achosion (ar gyfer hyn, mae'n rhaid gwirio'r blwch ticio achosion newydd Tag). Rwy'n argymell nodi'r tag Enw, yna bydd gan bob achos sy'n cael ei lansio o fewn y grŵp yr un enw, ac mae'n gyfleus eu gweld yn y consol.

Adeiladu API Graddadwy ar Achosion Sbot AWS

Ar ôl creu'r grŵp, agorwch ef ac ewch i'r adran Ffurfweddau Uwch. Pam nad yw pob opsiwn yn weladwy yn y consol ar y cam creu.

Polisïau terfynu — rheolau a gymerir i ystyriaeth wrth ddileu achosion. Maent yn cael eu cymhwyso mewn trefn. Rydym fel arfer yn defnyddio'r rhai yn y llun isod. Yn gyntaf, mae achosion gyda'r Templed Lansio hynaf yn cael eu dileu (er enghraifft, pe baem yn diweddaru'r AMI, fe wnaethom greu fersiwn newydd, ond llwyddodd pob achos i newid iddo). Yna dewisir yr achosion sydd agosaf at yr awr filio nesaf. Ac yna dewisir y rhai hynaf yn seiliedig ar y dyddiad lansio.

Adeiladu API Graddadwy ar Achosion Sbot AWS

Mae'n dda gwybod: diweddaru'r holl beiriannau mewn clwstwr, sy'n gyfleus i'w defnyddio Er enghraifft. Os cyfunwch hyn â swyddogaeth Lambda o'r cam blaenorol, bydd gennych system diweddaru enghreifftiau cwbl awtomataidd. Cyn diweddaru'r holl beiriannau, rhaid i chi analluogi amddiffyniad graddfa-mewn enghraifft ar gyfer pob achos yn y grŵp. Nid cyfluniad yn y grŵp, ond amddiffyniad rhag y peiriannau eu hunain, gwneir hyn ar y tab rheoli Instance.

Balanswr Llwyth Cymwysiadau a Grŵp Targed EC2

Mae'r balancer yn cael ei greu yn yr adran EC2 → Cydbwyso Llwyth → Balanswyr Llwyth. Byddwn yn defnyddio Cydbwysedd Llwyth Cymwysiadau; gellir darllen cymhariaeth o wahanol fathau o gydbwyswyr yn tudalen gwasanaeth.

Gwrandawyr - mae'n gwneud synnwyr i wneud porthladdoedd 80 a 443 ac ailgyfeirio o 80 i 443 gan ddefnyddio rheolau balancer yn ddiweddarach.

Parthau Argaeledd — yn y rhan fwyaf o achosion, rydym yn dewis parthau hygyrchedd i bawb.

Ffurfweddu Gosodiadau Diogelwch - mae'r dystysgrif SSL ar gyfer y balans wedi'i nodi yma, yr opsiwn mwyaf cyfleus yw gwneud tystysgrif yn ACM. Am y gwahaniaethau Polisi diogelwch gellir ei ddarllen yn dogfennaeth, gallwch ei adael wedi'i ddewis yn ddiofyn ELBSecurityPolicy-2016-08. Ar ôl creu'r balancer, byddwch yn ei weld Enw DNS, sydd ei angen arnoch i ffurfweddu'r CNAME ar gyfer eich parth. Er enghraifft, dyma sut mae'n edrych yn Cloudflare.

Adeiladu API Graddadwy ar Achosion Sbot AWS

Grŵp Diogelwch - creu neu ddewis grŵp diogelwch ar gyfer y balans, ysgrifennais fwy am hyn ychydig uchod yn y Templed Lansio EC2 → adran gosodiadau rhwydwaith.

Grŵp targed — rydym yn creu grŵp sy'n gyfrifol am lwybro ceisiadau o'r mantolenydd i beiriannau a gwirio eu hargaeledd er mwyn cael rhai newydd yn eu lle rhag ofn y bydd problemau. Math o darged rhaid bod er enghraifft, Protocol и Port unrhyw un, os ydych yn defnyddio HTTPS ar gyfer cyfathrebu rhwng y balancer ac achosion, yna mae angen i chi uwchlwytho tystysgrif iddynt. At ddibenion yr enghraifft hon, ni fyddwn yn gwneud hyn, yn syml byddwn yn gadael porthladd 80.

Gwiriadau iechyd - paramedrau ar gyfer gwirio ymarferoldeb y gwasanaeth. Mewn gwasanaeth go iawn, dylai hwn fod yn gais ar wahân sy'n gweithredu rhannau pwysig o'r rhesymeg fusnes; at ddibenion yr enghraifft hon, byddaf yn gadael y gosodiadau diofyn. Nesaf, gallwch ddewis y cyfwng cais, terfyn amser, codau llwyddiant, ac ati Yn ein enghraifft, byddwn yn nodi Codau Llwyddiant 200-399, oherwydd bod y ddelwedd Docker a ddefnyddir yn dychwelyd cod 304.

Adeiladu API Graddadwy ar Achosion Sbot AWS

Cofrestru Targedau - yma mae'r ceir ar gyfer y grŵp yn cael eu dewis, ond yn ein hachos ni bydd hyn yn cael ei wneud gan ECS, felly rydyn ni'n hepgor y cam hwn.

Mae'n dda gwybod: ar y lefel balancer gallwch alluogi logiau a fydd yn cael eu cadw yn S3 mewn penodol fformat. Oddi yno gellir eu hallforio i wasanaethau trydydd parti ar gyfer dadansoddeg, neu gallwch wneud ymholiadau SQL yn uniongyrchol ar y data yn S3 gyda defnyddio Athena. Mae'n gyfleus ac yn gweithio heb unrhyw god ychwanegol. Rwyf hefyd yn argymell sefydlu tynnu logiau o'r bwced S3 ar ôl cyfnod penodol o amser.

Diffiniad Tasg ECS

Yn y camau blaenorol, fe wnaethom greu popeth sy'n ymwneud â seilwaith y gwasanaeth; nawr rydym yn symud ymlaen i ddisgrifio'r cynwysyddion y byddwn yn eu lansio. Gwneir hyn yn yr adran ECS → Diffiniadau Tasg.

Lansio cydweddoldeb math - dewiswch EC2.

Cyflawni tasg rôl IAM - dewis ecsTaskExecutionRole. Gan ei ddefnyddio, ysgrifennir logiau, rhoddir mynediad i newidynnau cyfrinachol, ac ati.

Yn yr adran Diffiniadau Cynhwysydd, cliciwch Ychwanegu Cynhwysydd.

delwedd — dolen i'r ddelwedd gyda chod y prosiect; ar gyfer yr enghraifft hon byddaf yn defnyddio delwedd gyhoeddus o Docker Hub bitnami/nôd-enghraifft:0.0.1.

Terfynau Cof - terfynau cof ar gyfer y cynhwysydd. Terfyn Caled - terfyn caled, os yw'r cynhwysydd yn mynd y tu hwnt i'r gwerth penodedig, bydd y gorchymyn lladd docwr yn cael ei weithredu, bydd y cynhwysydd yn marw ar unwaith. Terfyn Meddal - terfyn meddal, gall y cynhwysydd fynd y tu hwnt i'r gwerth penodedig, ond bydd y paramedr hwn yn cael ei ystyried wrth osod tasgau ar beiriannau. Er enghraifft, os oes gan beiriant 4 GiB o RAM, a therfyn meddal cynhwysydd yw 2048 MiB, yna gall y peiriant hwn gael uchafswm o 2 dasg rhedeg gyda'r cynhwysydd hwn. Mewn gwirionedd, mae 4 GiB o RAM ychydig yn llai na 4096 MiB, gellir gweld hyn ar y tab ECS Instances yn y clwstwr. Ni all terfyn meddal fod yn fwy na therfyn caled. Mae'n bwysig deall, os oes sawl cynhwysydd mewn un dasg, yna mae eu terfynau yn cael eu crynhoi.

Mapiau porthladd - yn Porth cynnal Rydym yn nodi 0, mae hyn yn golygu y bydd y porthladd yn cael ei neilltuo'n ddeinamig a bydd yn cael ei fonitro gan y Grŵp Targed. Porth Cynhwysydd - mae'r porthladd y mae'ch cais yn rhedeg arno wedi'i nodi'n aml yn y gorchymyn gweithredu, neu wedi'i neilltuo yn eich cod cais, Dockerfile, ac ati. Er enghraifft, byddwn yn defnyddio 3000 oherwydd ei fod wedi'i restru yn Dockerfile y ddelwedd sy'n cael ei defnyddio.

Gwiriad iechyd — paramedrau gwirio iechyd cynwysyddion, na ddylid eu cymysgu â'r un a ffurfiwyd yn y Grŵp Targed.

Yr amgylchedd - gosodiadau amgylchedd. unedau CPU - yn debyg i derfynau Cof, dim ond am y prosesydd. Mae craidd pob prosesydd yn 1024 o unedau, felly os oes gan y gweinydd brosesydd craidd deuol a bod y cynhwysydd wedi'i osod i 512, yna gellir lansio 4 tasg gyda'r cynhwysydd hwn ar un gweinydd. Mae unedau CPU bob amser yn cyfateb i nifer y creiddiau; ni all fod ychydig yn llai ohonynt, fel sy'n wir gyda'r cof.

Gorchymyn - gorchymyn i gychwyn gwasanaeth y tu mewn i gynhwysydd, mae'r holl baramedrau wedi'u pennu wedi'u gwahanu gan atalnodau. Gallai hyn fod yn gwn, npm, ac ati. Os na chaiff ei nodi, bydd gwerth y gyfarwyddeb CMD o'r Dockerfile yn cael ei ddefnyddio. Rydym yn nodi npm,start.

Newidynnau amgylchedd — newidynnau amgylchedd cynhwysydd. Gall hyn fod yn ddata testun syml neu'n newidynnau cyfrinachol o Rheolwr Cyfrinachau neu Storfa Paramedr.

Storio a Logio - yma byddwn yn sefydlu mewngofnodi CloudWatch Logs (gwasanaeth ar gyfer logiau gan AWS). I wneud hyn, dim ond galluogi blwch ticio Logiau CloudWatch Auto-configure. Ar ôl creu'r Diffiniad Tasg, bydd grŵp o logiau yn cael eu creu yn awtomatig yn CloudWatch. Yn ddiofyn, mae logiau'n cael eu storio ynddo am gyfnod amhenodol; rwy'n argymell newid y cyfnod Cadw o Byth yn Dod i Ben i'r cyfnod gofynnol. Gwneir hyn mewn grwpiau CloudWatch Log, mae angen i chi glicio ar y cyfnod cyfredol a dewis un newydd.

Adeiladu API Graddadwy ar Achosion Sbot AWS

Clwstwr ECS a Darparwr Gallu ECS

Ewch i adran ECS → Clystyrau i greu clwstwr. Rydym yn dewis EC2 Linux + Networking fel y templed.

Enw clwstwr - yn bwysig iawn, rydym yn gwneud yma yr un enw ag a nodir yn y Paramedr Templed Lansio ECS_CLUSTER, yn ein hachos ni - DemoApiClusterProd. Gwiriwch y blwch ticio Creu clwstwr gwag. Yn ddewisol, gallwch alluogi Container Insights i weld metrigau ar gyfer gwasanaethau yn CloudWatch. Os gwnaethoch bopeth yn gywir, yna yn yr adran Enghreifftiau ECS fe welwch beiriannau a grëwyd yn y grŵp Graddio Auto.

Adeiladu API Graddadwy ar Achosion Sbot AWS

Ewch i'r tab Darparwyr Gallu a chreu un newydd. Gadewch imi eich atgoffa bod ei angen i reoli creu a chau peiriannau yn dibynnu ar nifer y tasgau ECS sy'n rhedeg. Mae'n bwysig nodi mai dim ond i un grŵp y gellir neilltuo darparwr.

Grŵp Graddio Auto — dewiswch y grŵp a grëwyd yn flaenorol.

Graddio wedi'i reoli — ei alluogi fel y gall y darparwr raddio'r gwasanaeth.

Cynhwysedd targed % — pa ganran o beiriannau sydd wedi'u llwytho â thasgau sydd eu hangen arnom. Os byddwch yn nodi 100%, yna bydd pob peiriant bob amser yn brysur gyda thasgau rhedeg. Os byddwch yn nodi 50%, yna bydd hanner y ceir bob amser yn rhad ac am ddim. Yn yr achos hwn, os bydd naid sydyn yn y llwyth, bydd tacsis newydd yn cyrraedd ceir am ddim ar unwaith, heb orfod aros i achosion gael eu defnyddio.

Amddiffyniad terfynu rheoledig — galluogi, mae'r paramedr hwn yn caniatáu i'r darparwr ddileu amddiffyniad achosion rhag dileu. Mae hyn yn digwydd pan nad oes unrhyw dasgau gweithredol ar y peiriant ac mae'n caniatáu gallu Targed%.

Gwasanaeth ECS a gosodiad graddio

Cam olaf :) I greu gwasanaeth, mae angen i chi fynd i'r clwstwr a grëwyd yn flaenorol ar y tab Gwasanaethau.

Lansio math — mae angen i chi glicio ar Newid i strategaeth darparwr capasiti a dewis y darparwyr a grëwyd yn flaenorol.

Adeiladu API Graddadwy ar Achosion Sbot AWS

Diffiniad Tasg — dewiswch y Diffiniad Tasg a grëwyd yn flaenorol a'i adolygiad.

Enw'r gwasanaeth — er mwyn osgoi dryswch, rydym bob amser yn nodi'r un peth â Diffiniad Tasg.

Math o wasanaeth - bob amser Replica.

Nifer y tasgau - y nifer dymunol o dasgau gweithredol yn y gwasanaeth. Rheolir y paramedr hwn trwy raddio, ond mae'n rhaid ei nodi o hyd.

Isafswm y cant iach и Uchafswm y cant — pennu ymddygiad tasgau yn ystod y defnydd. Y gwerthoedd diofyn yw 100 a 200, sy'n nodi y bydd nifer y tasgau yn cynyddu sawl gwaith ar adeg eu defnyddio, ac yna'n dychwelyd i'r gwerth a ddymunir. Os oes gennych chi 1 dasg yn rhedeg, min = 0, ac uchafswm = 100, yna yn ystod y defnydd bydd yn cael ei ladd, ac ar ôl hynny bydd un newydd yn cael ei godi, hynny yw, bydd yn amser segur. Os yw 1 dasg yn rhedeg, min = 50, uchafswm = 150, yna ni fydd lleoli yn digwydd o gwbl, oherwydd ni ellir rhannu 1 dasg yn hanner neu gynyddu un a hanner gwaith.

Math lleoli — gadael diweddariad treigl.

Templedi Lleoliad — rheolau ar gyfer gosod tasgau ar beiriannau. Y rhagosodiad yw Lledaeniad Cytbwys AZ - mae hyn yn golygu y bydd pob tasg newydd yn cael ei gosod ar enghraifft newydd nes bod peiriannau ym mhob parth argaeledd yn codi. Rydym fel arfer yn gwneud BinPack - CPU a Spread - AZ; gyda'r polisi hwn, gosodir tasgau mor ddwys â phosibl ar un peiriant fesul CPU. Os oes angen creu peiriant newydd, caiff ei greu mewn parth argaeledd newydd.

Adeiladu API Graddadwy ar Achosion Sbot AWS

Math o gydbwysedd llwyth — dewiswch Cydbwysedd Llwyth Cymhwysiad.

Rôl IAM gwasanaeth - dewis ecsServiceRole.

Llwytho enw'r balans — dewiswch y balans a grëwyd yn flaenorol.

Cyfnod gras gwiriad iechyd — saib cyn cynnal gwiriadau iechyd ar ôl cyflwyno tasg newydd, rydym fel arfer yn ei gosod i 60 eiliad.

Cynhwysydd i lwytho cydbwysedd — yn yr eitem enw grŵp targed, dewiswch y grŵp a grëwyd yn flaenorol, a bydd popeth yn cael ei lenwi'n awtomatig.

Adeiladu API Graddadwy ar Achosion Sbot AWS

Gwasanaeth Graddio Auto - paramedrau graddio gwasanaeth. Dewiswch Ffurfweddu Graddio Gwasanaeth Auto i addasu cyfrif dymunol eich gwasanaeth. Rydym yn gosod y nifer lleiaf ac uchaf o dasgau wrth raddio.

Rôl IAM ar gyfer Graddio Auto Gwasanaeth - dewis AWSServiceRoleForApplicationAutoScaling_ECSService.

Polisïau graddio tasgau awtomatig - rheolau ar gyfer graddio. Mae 2 fath:

  1. Olrhain targed — olrhain metrigau targed (defnydd CPU/RAM neu nifer y ceisiadau ar gyfer pob tasg). Er enghraifft, rydym am i'r llwyth prosesydd cyfartalog fod yn 85%, pan ddaw'n uwch, bydd tasgau newydd yn cael eu hychwanegu nes iddo gyrraedd y gwerth targed. Os yw'r llwyth yn is, yna bydd tasgau'n cael eu tynnu, i'r gwrthwyneb, oni bai bod amddiffyniad rhag cwympo wedi'i alluogi (Analluogi graddio i mewn).
  2. Graddio cam - ymateb i ddigwyddiad mympwyol. Yma gallwch chi ffurfweddu adwaith i unrhyw ddigwyddiad (CloudWatch Alarm), pan fydd yn digwydd, gallwch ychwanegu neu ddileu'r nifer penodedig o dasgau, neu nodi union nifer y tasgau.

Efallai y bydd gan wasanaeth nifer o reolau graddio, gall hyn fod yn ddefnyddiol, y prif beth yw sicrhau nad ydynt yn gwrthdaro â'i gilydd.

Casgliad

Os gwnaethoch ddilyn y cyfarwyddiadau a defnyddio'r un ddelwedd Docker, dylai eich gwasanaeth ddychwelyd tudalen fel hon.

Adeiladu API Graddadwy ar Achosion Sbot AWS

  1. Rydym wedi creu templed ar gyfer lansio pob peiriant yn y gwasanaeth. Dysgon ni hefyd sut i ddiweddaru peiriannau pan fydd y templed yn newid.
  2. Rydym wedi ffurfweddu prosesu'r signal stop enghraifft sbot, felly o fewn munud ar ôl ei dderbyn, mae'r holl dasgau rhedeg yn cael eu tynnu o'r peiriant, felly nid oes unrhyw beth yn cael ei golli neu ei ymyrryd.
  3. Codwyd y balans i ddosbarthu'r llwyth yn gyfartal ar draws y peiriannau.
  4. Rydym wedi creu gwasanaeth sy'n rhedeg yn y fan a'r lle, sy'n lleihau costau peiriannau tua 3 gwaith.
  5. Fe wnaethom sefydlu graddoli awtomatig i'r ddau gyfeiriad i ymdrin â llwythi gwaith cynyddol heb dalu am amser segur.
  6. Rydym yn defnyddio Capacity Provider fel bod y rhaglen yn rheoli'r seilwaith (peiriannau) ac nid y ffordd arall.
  7. Rydyn ni'n wych.

Os oes gennych chi bigau rhagweladwy mewn llwyth, er enghraifft rydych chi'n hysbysebu mewn ymgyrch e-bost fawr, gallwch chi sefydlu graddio yn ôl amserlen.

Gallwch hefyd raddfa yn seiliedig ar ddata o wahanol rannau o'ch system. Er enghraifft, mae gennym y swyddogaeth anfon cynigion hyrwyddo unigol defnyddwyr cymwysiadau symudol. Weithiau anfonir ymgyrch at 1M+ o bobl. Ar ôl dosbarthiad o'r fath, mae cynnydd mawr bob amser mewn ceisiadau i'r API, gan fod llawer o ddefnyddwyr yn mewngofnodi i'r cais ar yr un pryd. Felly os gwelwn fod llawer mwy o ddangosyddion safonol yn y ciw ar gyfer anfon hysbysiadau gwthio hyrwyddol, gallwn lansio nifer o beiriannau a thasgau ychwanegol ar unwaith i fod yn barod ar gyfer y llwyth.

Byddaf yn falch os byddwch yn dweud wrthyf yn y sylwadau achosion diddorol o ddefnyddio achosion yn y fan a'r lle ac ECS neu rywbeth am raddio.

Cyn bo hir bydd erthyglau am sut rydym yn prosesu miloedd o ddigwyddiadau dadansoddol yr eiliad ar bentwr heb weinydd yn bennaf (gydag arian) a sut mae defnyddio gwasanaethau'n gweithio gan ddefnyddio GitLab CI a Terraform Cloud.

Tanysgrifiwch i ni, bydd yn ddiddorol!

Dim ond defnyddwyr cofrestredig all gymryd rhan yn yr arolwg. Mewngofnodios gwelwch yn dda.

Ydych chi'n defnyddio enghreifftiau sbot wrth gynhyrchu?

  • 22,2%Oes6

  • 66,7%Rhif 18

  • 11,1%Dysgais amdanynt o erthygl a bwriadais eu defnyddio3

Pleidleisiodd 27 o ddefnyddwyr. Ataliodd 5 o ddefnyddwyr.

Ffynhonnell: hab.com

Ychwanegu sylw