Kujenga API Scalable kwenye AWS Spot Matukio

Salaam wote! Jina langu ni Kirill, mimi ni CTO huko Adapty. Usanifu wetu mwingi uko kwenye AWS, na leo nitazungumza juu ya jinsi tulivyopunguza gharama za seva kwa mara 3 kwa kutumia matukio ya doa katika mazingira ya uzalishaji, na pia jinsi ya kuanzisha uwekaji wao wa kiotomatiki. Kwanza kutakuwa na muhtasari wa jinsi inavyofanya kazi, na kisha maagizo ya kina ya kuanza.

Spot Instances ni nini?

Doa matukio ni seva za watumiaji wengine wa AWS ambao hawana kazi kwa sasa, na wanaziuza kwa punguzo kubwa (Amazon huandika hadi 90%, katika uzoefu wetu ~ 3x, inatofautiana kulingana na eneo, AZ na aina ya mfano). Tofauti yao kuu kutoka kwa kawaida ni kwamba wanaweza kuzima wakati wowote. Kwa hivyo, kwa muda mrefu tuliamini kuwa ni kawaida kuzitumia kwa mazingira ya bikira, au kwa kazi za kuhesabu kitu, na matokeo ya kati yaliyohifadhiwa kwenye S3 au kwenye hifadhidata, lakini sio kwa mauzo. Kuna ufumbuzi wa tatu unaokuwezesha kutumia matangazo kwenye uzalishaji, lakini kuna viboko vingi kwa kesi yetu, kwa hiyo hatukutekeleza. Mbinu iliyoelezwa katika makala inafanya kazi kabisa ndani ya utendaji wa kawaida wa AWS, bila maandiko ya ziada, taji, nk.

Zifuatazo ni picha za skrini zinazoonyesha historia ya bei ya matukio ya mara kwa mara.

m5.kubwa katika eneo la eu-magharibi-1 (Ayalandi). Bei imekuwa thabiti zaidi kwa miezi 3, kwa sasa inaokoa 2.9x.

Kujenga API Scalable kwenye AWS Spot Matukio

m5.kubwa katika eneo la us-mashariki-1 (N. Virginia). Bei inabadilika kila mara kwa muda wa miezi 3, kwa sasa inaokoa kutoka 2.3x hadi 2.8x kulingana na eneo la upatikanaji.

Kujenga API Scalable kwenye AWS Spot Matukio

t3.ndogo katika eneo la us-mashariki-1 (N. Virginia). Bei imekuwa thabiti kwa miezi 3, kwa sasa inaokoa 3.4x.

Kujenga API Scalable kwenye AWS Spot Matukio

Usanifu wa huduma

Usanifu wa msingi wa huduma ambayo tutazungumzia katika makala hii imeonyeshwa kwenye mchoro hapa chini.

Kujenga API Scalable kwenye AWS Spot Matukio

Kisawazisha cha Upakiaji wa Programu → Kikundi Lengwa cha EC2 → Huduma ya Kontena Elastiki

Salio la Upakiaji wa Maombi (ALB) hutumika kama kisawazisha, ambacho hutuma maombi kwa Kikundi Lengwa cha EC2 (TG). TG ina jukumu la kufungua bandari kwenye matukio ya ALB na kuziunganisha kwenye bandari za vyombo vya Huduma ya Kontena Elastic (ECS). ECS ni analogi ya Kubernetes katika AWS, ambayo inadhibiti vyombo vya Docker.

Mfano mmoja unaweza kuwa na kontena kadhaa zinazoendesha na bandari sawa, kwa hivyo hatuwezi kuziweka sawasawa. ECS inaiambia TG kuwa inazindua kazi mpya (katika istilahi ya Kubernetes hii inaitwa ganda), inakagua bandari zisizolipishwa kwenye mfano na kukabidhi mojawapo kwa kazi iliyozinduliwa. TG pia hukagua mara kwa mara ikiwa mfano na API inaifanyia kazi kwa kuangalia afya, na ikiona matatizo yoyote, inaacha kutuma maombi huko.

Vikundi vya Kuongeza Kiotomatiki vya EC2 + Watoa Huduma za Uwezo wa ECS

Mchoro ulio hapo juu hauonyeshi huduma ya EC2 Auto Scaling Groups (ASG). Kutoka kwa jina unaweza kuelewa kuwa ni wajibu wa matukio ya kuongeza. Hata hivyo, hadi hivi karibuni, AWS haikuwa na uwezo wa kujengwa wa kusimamia idadi ya mashine zinazoendesha kutoka kwa ECS. ECS ilifanya iwezekane kuongeza idadi ya kazi, kwa mfano, kwa matumizi ya CPU, RAM au idadi ya maombi. Lakini ikiwa kazi zilichukua matukio yote ya bure, basi mashine mpya hazikuundwa moja kwa moja.

Hii imebadilika na ujio wa ECS Capacity Providers (ECS CP). Sasa kila huduma katika ECS inaweza kuhusishwa na ASG, na ikiwa kazi hazifanani na matukio ya kukimbia, basi mpya zitafufuliwa (lakini ndani ya mipaka ya ASG iliyoanzishwa). Hii pia inafanya kazi kwa mwelekeo tofauti, ikiwa ECS CP itaona hali zisizo na kazi bila kazi, basi itatoa amri ya ASG kuzifunga. ECS CP ina uwezo wa kubainisha asilimia inayolengwa ya upakiaji wa mfano, ili idadi fulani ya mashine ziwe bure kila wakati kwa kazi za kuongeza kasi; nitazungumza kuhusu hili baadaye kidogo.

Violezo vya Uzinduzi wa EC2

Huduma ya mwisho nitakayozungumzia kabla ya kueleza kwa kina kuhusu kuunda miundombinu hii ni Violezo vya Uzinduzi wa EC2. Inakuruhusu kuunda template kulingana na ambayo mashine zote zitaanza, ili usirudia hii kutoka mwanzo kila wakati. Hapa unaweza kuchagua aina ya mashine ya kuanza, kikundi cha usalama, picha ya diski na vigezo vingine vingi. Unaweza pia kubainisha data ya mtumiaji ambayo itapakiwa kwa matukio yote yaliyozinduliwa. Unaweza kuendesha maandishi katika data ya mtumiaji, kwa mfano, unaweza kuhariri yaliyomo kwenye faili Mipangilio ya wakala wa ECS.

Moja ya vigezo muhimu vya usanidi wa makala hii ni ECS_ENABLE_SPOT_INSTANCE_DRAINING= kweli. Ikiwa kigezo hiki kimewashwa, basi mara tu ECS inapopokea ishara kwamba mfano wa doa unachukuliwa, huhamisha kazi zote zinazofanya kazi juu yake kwenye hali ya Kuondoa. Hakuna majukumu mapya yatakayokabidhiwa kwa tukio hili; ikiwa kuna majukumu ambayo yanataka kutekelezwa kwa sasa hivi, yataghairiwa. Maombi kutoka kwa msawazishaji pia yanaacha kuja. Arifa ya kufutwa kwa mfano huja dakika 2 kabla ya tukio halisi. Kwa hiyo, ikiwa huduma yako haifanyi kazi kwa muda mrefu zaidi ya dakika 2 na haihifadhi chochote kwenye diski, basi unaweza kutumia matukio ya doa bila kupoteza data.

Kuhusu diski - AWS hivi karibuni alifanya Inawezekana kutumia Mfumo wa Faili wa Elastic (EFS) pamoja na ECS; na mpango huu, hata diski sio kikwazo, lakini hatukujaribu hii, kwani kimsingi hatuitaji diski kuhifadhi serikali. Kwa chaguo-msingi, baada ya kupokea SIGINT (iliyotumwa wakati kazi inahamishiwa kwa hali ya Kuondoa), kazi zote zinazoendesha zitasimamishwa baada ya sekunde 30, hata kama bado hazijakamilika; unaweza kubadilisha wakati huu kwa kutumia parameta. ECS_CONTAINER_STOP_TIMEOUT. Jambo kuu sio kuiweka kwa zaidi ya dakika 2 kwa mashine za doa.

Kuunda huduma

Wacha tuendelee kuunda huduma iliyoelezewa. Katika mchakato huo, nitaelezea zaidi mambo kadhaa muhimu ambayo hayakutajwa hapo juu. Kwa ujumla, hii ni maagizo ya hatua kwa hatua, lakini sitazingatia baadhi ya msingi sana au, kinyume chake, kesi maalum sana. Vitendo vyote vinafanywa katika kiweko cha kuona cha AWS, lakini kinaweza kutolewa tena kwa utaratibu kwa kutumia CloudFormation au Terraform. Katika Adapty tunatumia Terraform.

Kiolezo cha Uzinduzi wa EC2

Huduma hii inaunda usanidi wa mashine ambazo zitatumika. Violezo vinadhibitiwa katika EC2 -> Matukio -> Zindua sehemu ya violezo.

Picha ya mashine ya Amazon (AMI) - taja picha ya diski ambayo matukio yote yatazinduliwa. Kwa ECS, katika hali nyingi inafaa kutumia picha iliyoboreshwa kutoka kwa Amazon. Inasasishwa mara kwa mara na ina kila kitu muhimu kwa ECS kufanya kazi. Ili kujua kitambulisho cha sasa cha picha, nenda kwenye ukurasa Amazon ECS-optimized AMIs, chagua eneo unalotumia na unakili Kitambulisho cha AMI kwa ajili yake. Kwa mfano, kwa eneo la us-mashariki-1, kitambulisho cha sasa wakati wa kuandika ni ami-00c7c1cf5bdc913ed. Kitambulisho hiki lazima kichopwe kwenye Bainisha kipengee maalum cha thamani.

Aina ya mfano - onyesha aina ya mfano. Chagua moja ambayo inafaa zaidi kazi yako.

Jozi muhimu (ingia) - taja cheti ambacho unaweza kuunganisha kwa mfano kupitia SSH, ikiwa ni lazima.

Mipangilio ya mtandao - taja vigezo vya mtandao. Jukwaa la mtandao katika hali nyingi kunapaswa kuwa na Wingu la Kibinafsi la Kibinafsi (VPC). Vikundi vya usalama - vikundi vya usalama kwa matukio yako. Kwa kuwa tutatumia usawazishaji mbele ya matukio, ninapendekeza kutaja kikundi hapa ambacho kinaruhusu miunganisho inayoingia tu kutoka kwa usawazishaji. Hiyo ni, utakuwa na vikundi 2 vya usalama, moja ya mizani, ambayo inaruhusu miunganisho ya ndani kutoka mahali popote kwenye bandari 80 (http) na 443 (https), na ya pili kwa mashine, ambayo inaruhusu miunganisho inayoingia kwenye bandari yoyote kutoka kwa kikundi cha mizani. . Miunganisho ya nje katika vikundi vyote viwili lazima ifunguliwe kwa kutumia itifaki ya TCP kwa bandari zote kwa anwani zote. Unaweza kupunguza bandari na anwani kwa viunganisho vinavyotoka, lakini basi unahitaji kufuatilia mara kwa mara kwamba hujaribu kufikia kitu kwenye bandari iliyofungwa.

Hifadhi (kiasi) - taja vigezo vya diski kwa mashine. Saizi ya diski haiwezi kuwa chini ya ile iliyobainishwa kwenye AMI; kwa ECS Iliyoboreshwa ni 30 GiB.

Maelezo ya juu - taja vigezo vya ziada.

Chaguo la ununuzi - ikiwa tunataka kununua mifano ya kawaida. Tunataka, lakini hatutachagua kisanduku hiki hapa; tutaisanidi katika Kikundi cha Kuongeza Kiotomatiki, kuna chaguo zaidi hapo.

Wasifu wa mfano wa IAM - onyesha jukumu ambalo matukio yatazinduliwa. Ili matukio yaendeshe katika ECS, yanahitaji ruhusa, ambazo kwa kawaida hupatikana katika jukumu ecsInstanceRole. Katika baadhi ya matukio inaweza kuundwa, ikiwa sio, basi hapa maelekezo jinsi ya kufanya hivi. Baada ya uumbaji, tunaionyesha kwenye template.
Ifuatayo kuna vigezo vingi, kimsingi unaweza kuacha maadili ya msingi kila mahali, lakini kila moja ina maelezo wazi. Mimi huwasha mfano ulioboreshwa wa EBS na chaguzi zisizo na kikomo za T2/T3 ikiwa zitatumika ya kupasuka Mifano.

Data ya mtumiaji - onyesha data ya mtumiaji. Tutahariri faili /etc/ecs/ecs.config, ambayo ina usanidi wa wakala wa ECS.
Mfano wa jinsi data ya mtumiaji inaweza kuonekana kama:

#!/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 - parameta inaonyesha kuwa mfano ni wa kikundi kilicho na jina lililopewa, ambayo ni kwamba, nguzo hii itaweza kuweka kazi zake kwenye seva hii. Bado hatujaunda kikundi, lakini tutatumia jina hili tunapokiunda.

ECS_ENABLE_SPOT_INSTANCE_DRAINING=true — kigezo kinabainisha kuwa wakati ishara inapokewa ili kuzima mfano wa doa, kazi zote zilizo juu yake zinapaswa kuhamishiwa kwenye hali ya Kutoa maji.

ECS_CONTAINER_STOP_TIMEOUT=1m - parameter inabainisha kuwa baada ya kupokea ishara ya SIGINT, kazi zote zina dakika 1 kabla ya kuuawa.

ECS_ENGINE_AUTH_TYPE=docker - parameta inaonyesha kuwa mpango wa Docker unatumika kama utaratibu wa idhini

ECS_ENGINE_AUTH_DATA=... - Vigezo vya uunganisho kwenye sajili ya vyombo vya kibinafsi, ambapo picha zako za Docker zimehifadhiwa. Ikiwa ni ya umma, basi huna haja ya kutaja chochote.

Kwa madhumuni ya kifungu hiki, nitatumia picha ya umma kutoka kwa Docker Hub, kwa hivyo taja vigezo ECS_ENGINE_AUTH_TYPE и ECS_ENGINE_AUTH_DATA hakuna haja.

Nzuri kujua: Inashauriwa kusasisha AMI mara kwa mara, kwa sababu matoleo mapya yanasasisha matoleo ya Docker, Linux, wakala wa ECS, nk Ili usisahau kuhusu hili, unaweza weka arifa kuhusu kutolewa kwa matoleo mapya. Unaweza kupokea arifa kupitia barua pepe na kusasisha wewe mwenyewe, au unaweza kuandika kitendakazi cha Lambda ambacho kitaunda kiotomatiki toleo jipya la Kiolezo cha Uzinduzi kwa kutumia AMI iliyosasishwa.

Kikundi cha Kuongeza Kiotomatiki cha EC2

Kikundi cha Kuongeza Kiotomatiki kina jukumu la kuzindua na kuongeza matukio. Vikundi vinadhibitiwa katika sehemu ya EC2 -> Kuongeza Kiotomatiki -> Vikundi vya Kuongeza Kiotomatiki.

Fungua kiolezo — chagua kiolezo kilichoundwa katika hatua ya awali. Tunaacha toleo la msingi.

Chaguzi za ununuzi na aina za mifano - taja aina za matukio kwa nguzo. Kuzingatia kuzindua kiolezo hutumia aina ya mfano kutoka kwa Kiolezo cha Uzinduzi. Kuchanganya chaguo za ununuzi na aina za mifano hukuruhusu kusanidi kwa urahisi aina za mifano. Tutatumia.

Hiari On-Mahitaji msingi - idadi ya matukio ya kawaida, yasiyo ya papo hapo ambayo yatafanya kazi kila wakati.

Asilimia ya Mahitaji juu ya msingi - uwiano wa asilimia ya matukio ya kawaida na ya doa, 50-50 yatasambazwa kwa usawa, 20-80 kwa kila mfano wa kawaida 4 doa zitatolewa. Kwa madhumuni ya mfano huu, nitaonyesha 50-50, lakini kwa kweli sisi mara nyingi hufanya 20-80, katika hali nyingine 0-100.

Aina za mifano - hapa unaweza kutaja aina za ziada za matukio ambayo yatatumika kwenye nguzo. Hatukuwahi kuitumia kwa sababu sielewi maana ya hadithi. Labda hii ni kutokana na mipaka ya aina maalum za matukio, lakini zinaweza kuongezeka kwa urahisi kwa msaada. Ikiwa unajua programu, nitafurahi kuisoma kwenye maoni)

Kujenga API Scalable kwenye AWS Spot Matukio

Mtandao — mipangilio ya mtandao, chagua VPC na nyati ndogo za mashine, mara nyingi unapaswa kuchagua nyati zote zinazopatikana.

Mzigo wa kupakia - Mipangilio ya usawa, lakini tutafanya hivi kando, hatutagusa chochote hapa. Ukaguzi wa afya pia itasanidiwa baadaye.

Saizi ya kikundi - tunaonyesha mipaka ya idadi ya mashine kwenye nguzo na nambari inayotakiwa ya mashine mwanzoni. Idadi ya mashine kwenye nguzo haitawahi kuwa chini ya kiwango cha chini kilichobainishwa na zaidi ya kiwango cha juu zaidi, hata kama kipimo kinapaswa kutokea kulingana na vipimo.

Sera za kuongeza viwango - kuongeza vigezo, lakini tutaongeza kulingana na kazi za ECS zinazoendesha, kwa hivyo tutasanidi kuongeza baadaye.

Ulinzi wa kiwango cha mfano - ulinzi wa matukio kutokana na kufutwa wakati wa kupunguza. Tunaiwezesha ili ASG isifute mashine ambayo ina kazi zinazoendesha. ECS Capacity Provider itazima ulinzi kwa matukio ambayo hayana majukumu.

Ongeza vitambulisho - unaweza kubainisha tagi kwa matukio (kwa hili, kisanduku cha kuteua cha matukio mapya ya Tagi lazima kikaguliwe). Ninapendekeza kutaja lebo ya Jina, basi matukio yote ambayo yamezinduliwa ndani ya kikundi yatakuwa na jina moja, na ni rahisi kuziangalia kwenye console.

Kujenga API Scalable kwenye AWS Spot Matukio

Baada ya kuunda kikundi, fungua na uende kwenye sehemu ya Mipangilio ya Juu Kwa nini sio chaguzi zote zinazoonekana kwenye console kwenye hatua ya uumbaji.

Sera za kusitisha - sheria zinazozingatiwa wakati wa kufuta matukio. Zinatumika kwa utaratibu. Kawaida sisi hutumia zile zilizo kwenye picha hapa chini. Kwanza, matukio yenye Kiolezo cha Uzinduzi cha zamani zaidi yanafutwa (kwa mfano, ikiwa tulisasisha AMI, tuliunda toleo jipya, lakini matukio yote yameweza kubadili). Kisha matukio ambayo yanakaribia saa inayofuata ya bili huchaguliwa. Na kisha wale wa zamani zaidi huchaguliwa kulingana na tarehe ya uzinduzi.

Kujenga API Scalable kwenye AWS Spot Matukio

Nzuri kujua: kusasisha mashine zote kwenye nguzo, zinazofaa kutumia Upyaji wa Mfano. Ukichanganya hii na chaguo la kukokotoa la Lambda kutoka kwa hatua ya awali, utakuwa na mfumo wa kusasisha mfano wa kiotomatiki kabisa. Kabla ya kusasisha mashine zote, lazima uzime ulinzi wa kiwango cha mfano kwa matukio yote kwenye kikundi. Sio usanidi katika kikundi, lakini ulinzi kutoka kwa mashine wenyewe, hii inafanywa kwenye kichupo cha usimamizi wa Instance.

Mizani ya Upakiaji wa Programu na Kikundi Lengwa cha EC2

Sawazisha imeundwa katika sehemu ya EC2 → Kusawazisha Mzigo → Visawazishaji vya Mizigo. Tutatumia Usawazishaji wa Upakiaji wa Maombi; ulinganisho wa aina tofauti za wasawazishaji unaweza kusomwa ukurasa wa huduma.

Wasikilizaji - inaeleweka kufanya bandari 80 na 443 na kuelekeza kutoka 80 hadi 443 kwa kutumia sheria za kusawazisha baadaye.

Kanda za Upatikanaji — katika hali nyingi, tunachagua maeneo ya ufikiaji kwa kila mtu.

Sanidi Mipangilio ya Usalama - cheti cha SSL cha msawazishaji kimeonyeshwa hapa, chaguo rahisi zaidi ni tengeneza cheti katika ACM. Kuhusu tofauti Sera ya Usalama inaweza kusomwa ndani nyaraka, unaweza kuiacha ikiwa imechaguliwa kwa chaguo-msingi ELBSecurityPolicy-2016-08. Baada ya kuunda balancer, utaiona Jina la DNS, ambayo unahitaji kusanidi CNAME kwa kikoa chako. Kwa mfano, hivi ndivyo inavyoonekana katika Cloudflare.

Kujenga API Scalable kwenye AWS Spot Matukio

Kikundi cha Usalama — tengeneza au chagua kikundi cha usalama cha kusawazisha, niliandika zaidi kuhusu hili hapo juu katika sehemu ya Uzinduzi wa EC2 → Mipangilio ya Mtandao.

Kundi la lengo - tunaunda kikundi ambacho kina jukumu la kuelekeza maombi kutoka kwa sawazisha hadi kwa mashine na kuangalia upatikanaji wao ili kuchukua nafasi yao ikiwa kuna shida. Aina ya lengo lazima iwe Mfano, Itifaki ya и Port yoyote, ikiwa unatumia HTTPS kwa mawasiliano kati ya sawazisha na matukio, basi unahitaji kupakia cheti kwao. Kwa madhumuni ya mfano huu, hatutafanya hivi, tutaacha tu bandari 80.

Ukaguzi wa afya - vigezo vya kuangalia utendaji wa huduma. Katika huduma halisi, hili linapaswa kuwa ombi tofauti ambalo linatekeleza sehemu muhimu za mantiki ya biashara; kwa madhumuni ya mfano huu, nitaacha mipangilio chaguo-msingi. Ifuatayo, unaweza kuchagua muda wa ombi, muda wa kuisha, misimbo ya mafanikio, n.k. Katika mfano wetu, tutaonyesha Nambari za Mafanikio 200-399, kwa sababu picha ya Docker ambayo itatumika inarudisha msimbo wa 304.

Kujenga API Scalable kwenye AWS Spot Matukio

Sajili Malengo - hapa magari ya kikundi yanachaguliwa, lakini kwa upande wetu hii itafanywa na ECS, kwa hiyo tunaruka hatua hii tu.

Nzuri kujua: kwa kiwango cha kusawazisha unaweza kuwezesha kumbukumbu ambazo zitahifadhiwa katika S3 kwa njia fulani muundo. Kutoka hapo zinaweza kusafirishwa kwa huduma za wahusika wengine kwa uchanganuzi, au unaweza kuuliza maswali ya SQL moja kwa moja kwenye data katika S3 ukitumia kwa kutumia Athena. Ni rahisi na hufanya kazi bila msimbo wowote wa ziada. Pia ninapendekeza kuanzisha uondoaji wa magogo kutoka kwa ndoo ya S3 baada ya muda maalum.

Ufafanuzi wa Kazi ya ECS

Katika hatua za awali, tuliunda kila kitu kinachohusiana na miundombinu ya huduma; sasa tunaendelea kuelezea makontena ambayo tutazindua. Hii inafanywa katika sehemu ya ECS → Ufafanuzi wa Kazi.

Zindua utangamano wa aina - chagua EC2.

Utekelezaji wa jukumu la IAM - chagua ecsTaskExecutionRole. Kutumia, magogo yameandikwa, upatikanaji wa vigezo vya siri hutolewa, nk.

Katika sehemu ya Ufafanuzi wa Kontena, bofya Ongeza Kontena.

Image - kiunga cha picha na nambari ya mradi; kwa mfano huu nitatumia picha ya umma kutoka kwa Docker Hub mfano wa bitnami/nodi:0.0.1.

Mipaka ya Kumbukumbu - vikomo vya kumbukumbu kwa kontena. Kikomo Kigumu - kikomo ngumu, ikiwa chombo kinapita zaidi ya thamani maalum, amri ya kuua docker itatekelezwa, chombo kitakufa mara moja. Kikomo laini - kikomo laini, chombo kinaweza kwenda zaidi ya thamani maalum, lakini parameter hii itazingatiwa wakati wa kuweka kazi kwenye mashine. Kwa mfano, ikiwa mashine ina 4 GiB ya RAM, na kikomo laini cha kontena ni 2048 MiB, basi mashine hii inaweza kuwa na upeo wa kazi 2 zinazoendesha na chombo hiki. Kwa kweli, 4 GiB ya RAM ni kidogo chini ya 4096 MiB, hii inaweza kutazamwa kwenye kichupo cha Matukio ya ECS kwenye nguzo. Kikomo laini hakiwezi kuwa kikubwa kuliko kikomo kigumu. Ni muhimu kuelewa kwamba ikiwa kuna vyombo kadhaa katika kazi moja, basi mipaka yao imefupishwa.

Ramani za bandari - ndani Bandari ya mwenyeji Tunaonyesha 0, hii inamaanisha kuwa bandari itakabidhiwa kwa nguvu na itafuatiliwa na Kundi Lengwa. Bandari ya Kontena - bandari ambayo programu yako inaendesha mara nyingi imeainishwa katika amri ya utekelezaji, au kupewa nambari yako ya maombi, Dockerfile, nk. Kwa mfano wetu tutatumia 3000 kwa sababu imeorodheshwa ndani Dockerfile picha inayotumika.

Uchunguzi wa afya - Vigezo vya ukaguzi wa afya ya chombo, visichanganywe na vilivyosanidiwa katika Kundi Lengwa.

mazingira - mipangilio ya mazingira. Vitengo vya CPU - sawa na mipaka ya Kumbukumbu, tu kuhusu processor. Kila msingi wa kichakataji ni vitengo 1024, kwa hivyo ikiwa seva ina kichakataji cha msingi-mbili na kontena imewekwa 512, basi kazi 4 zilizo na chombo hiki zinaweza kuzinduliwa kwenye seva moja. Vitengo vya CPU kila wakati vinahusiana na idadi ya cores; hakuwezi kuwa na kidogo kati yao, kama ilivyo kwa kumbukumbu.

Amri - amri ya kuanza huduma ndani ya chombo, vigezo vyote vimeainishwa kutengwa na koma. Hii inaweza kuwa gunicorn, npm, nk. Ikiwa haijabainishwa, thamani ya maagizo ya CMD kutoka kwa faili ya Docker itatumika. Tunaashiria npm,start.

Vigezo vya mazingira - Vigezo vya mazingira ya chombo. Hii inaweza kuwa data rahisi ya maandishi au vigezo vya siri kutoka Meneja wa Siri au Hifadhi ya Parameter.

Uhifadhi na Uwekaji Magogo - hapa tutaweka kumbukumbu katika Kumbukumbu za CloudWatch (huduma ya kumbukumbu kutoka kwa AWS). Ili kufanya hivyo, wezesha tu kisanduku cha kuteua cha Kusanidi Kiotomatiki cha Kumbukumbu za CloudWatch. Baada ya kuunda Ufafanuzi wa Kazi, kikundi cha kumbukumbu kitaundwa kiotomatiki katika CloudWatch. Kwa chaguomsingi, kumbukumbu huhifadhiwa ndani yake kwa muda usiojulikana; ninapendekeza kubadilisha kipindi cha Uhifadhi kutoka kwa Never Expire hadi kipindi kinachohitajika. Hii inafanywa katika vikundi vya Kumbukumbu vya CloudWatch, unahitaji kubofya kipindi cha sasa na uchague kipya.

Kujenga API Scalable kwenye AWS Spot Matukio

Cluster ya ECS na Mtoa Uwezo wa ECS

Nenda kwenye sehemu ya ECS → Nguzo ili kuunda kikundi. Tunachagua EC2 Linux + Networking kama kiolezo.

Jina la kikundi - muhimu sana, tunafanya hapa jina sawa kama ilivyoainishwa kwenye parameta ya Kiolezo cha Uzinduzi ECS_CLUSTER, kwa upande wetu - DemoApiClusterProd. Angalia kisanduku tiki cha Unda nguzo tupu. Kwa hiari, unaweza kuwezesha Maarifa ya Kontena ili kuona vipimo vya huduma katika CloudWatch. Ikiwa ulifanya kila kitu kwa usahihi, basi katika sehemu ya Matukio ya ECS utaona mashine ambazo ziliundwa katika kikundi cha Auto Scaling.

Kujenga API Scalable kwenye AWS Spot Matukio

Nenda kwenye kichupo Watoa Uwezo na kuunda mpya. Acha nikukumbushe kuwa inahitajika kudhibiti uundaji na kuzimwa kwa mashine kulingana na idadi ya kazi za ECS. Ni muhimu kutambua kwamba mtoa huduma anaweza tu kupewa kikundi kimoja.

Kikundi cha Kuongeza Kiotomatiki — chagua kikundi kilichoundwa hapo awali.

Upimaji unaodhibitiwa - iwezeshe ili mtoa huduma aweze kuongeza huduma.

Uwezo unaolengwa % - ni asilimia ngapi ya mashine zilizojaa kazi tunahitaji. Ikiwa utataja 100%, basi mashine zote zitakuwa na shughuli nyingi kila wakati. Ikiwa unataja 50%, basi nusu ya magari itakuwa bure kila wakati. Katika kesi hii, ikiwa kuna kuruka kwa kasi kwa mzigo, teksi mpya zitafika mara moja kwenye magari ya bure, bila kusubiri matukio ya kupelekwa.

Ulinzi unaodhibitiwa wa kukomesha - Wezesha, parameta hii inaruhusu mtoa huduma kuondoa ulinzi wa matukio kutoka kwa kufutwa. Hii hutokea wakati hakuna kazi zinazoendelea kwenye mashine na inaruhusu uwezo wa Lengo%.

Huduma ya ECS na usanidi wa kuongeza kiwango

Hatua ya mwisho :) Ili kuunda huduma, unahitaji kwenda kwenye kikundi kilichoundwa hapo awali kwenye kichupo cha Huduma.

Aina ya uzinduzi — unahitaji kubofya kwenye mkakati wa Badili hadi kwa mtoa uwezo na uchague watoa huduma iliyoundwa awali.

Kujenga API Scalable kwenye AWS Spot Matukio

Ufafanuzi wa Kazi — chagua Ufafanuzi wa Task ulioundwa hapo awali na masahihisho yake.

Jina la huduma — ili kuzuia mkanganyiko, sisi huonyesha kila mara sawa na Ufafanuzi wa Task.

Aina ya huduma - Daima Replica.

Idadi ya kazi - idadi inayotakiwa ya kazi amilifu katika huduma. Kigezo hiki kinadhibitiwa na kuongeza, lakini lazima bado kibainishwe.

Asilimia ya chini ya afya и Asilimia ya juu zaidi - kuamua tabia ya kazi wakati wa kupeleka. Thamani chaguo-msingi ni 100 na 200, ikionyesha kwamba wakati wa kupeleka idadi ya kazi itaongezeka mara kadhaa, na kisha kurudi kwa thamani inayotakiwa. Ikiwa una kazi 1 inayoendesha, min=0, na max=100, basi wakati wa kupeleka itauawa, na baada ya hapo mpya itafufuliwa, yaani, itakuwa chini. Ikiwa kazi 1 inaendelea, min=50, max=150, basi kupelekwa haitatokea kabisa, kwa sababu kazi 1 haiwezi kugawanywa kwa nusu au kuongezeka kwa mara moja na nusu.

Aina ya upelekaji - acha sasisho la Rolling.

Violezo vya Uwekaji - sheria za kuweka kazi kwenye mashine. Chaguomsingi ni AZ Balanced Spread - hii ina maana kwamba kila kazi mpya itawekwa kwenye tukio jipya hadi mashine katika maeneo yote ya upatikanaji itakapopanda. Kwa kawaida tunafanya BinPack - CPU na Spread - AZ; kwa sera hii, majukumu yanawekwa kwa wingi iwezekanavyo kwenye mashine moja kwa kila CPU. Ikiwa ni muhimu kuunda mashine mpya, imeundwa katika eneo jipya la upatikanaji.

Kujenga API Scalable kwenye AWS Spot Matukio

Aina ya kusawazisha mzigo — chagua Kisawazisha cha Upakiaji wa Programu.

Jukumu la IAM la huduma - chagua ecsServiceRole.

Pakia jina la kusawazisha — chagua kisawazisha kilichoundwa hapo awali.

Kipindi cha neema ya kuangalia afya — tulia kabla ya kufanya ukaguzi wa afya baada ya kutekeleza kazi mpya, kwa kawaida tunaiweka kwa sekunde 60.

Chombo cha kupakia salio - katika kipengee cha jina la kikundi kinacholengwa, chagua kikundi kilichoundwa hapo awali, na kila kitu kitajazwa moja kwa moja.

Kujenga API Scalable kwenye AWS Spot Matukio

Huduma ya Kuongeza Kiotomatiki - Vigezo vya kuongeza huduma. Chagua Sanidi Kuongeza Kiotomatiki kwa Huduma ili kurekebisha hesabu inayotaka ya huduma yako. Tunaweka idadi ya chini na ya juu ya kazi wakati wa kuongeza.

Jukumu la IAM la Kuongeza Kiotomatiki kwa Huduma - chagua AWSServiceRoleForApplicationAutoScaling_ECSService.

Sera za kuongeza majukumu kiotomatiki - kanuni za kuongeza kiwango. Kuna aina 2:

  1. Ufuatiliaji wa lengo — kufuatilia vipimo lengwa (matumizi ya CPU/RAM au idadi ya maombi kwa kila kazi). Kwa mfano, tunataka wastani wa mzigo wa kichakataji uwe 85%, inapokuwa juu, kazi mpya zitaongezwa hadi kufikia thamani inayolengwa. Ikiwa mzigo ni wa chini, basi kazi zitaondolewa, kinyume chake, isipokuwa ulinzi dhidi ya kupunguza chini umewezeshwa (Zima kipengele cha kuongeza).
  2. Kuongeza hatua - majibu kwa tukio la kiholela. Hapa unaweza kusanidi majibu kwa tukio lolote (Alarm CloudWatch), linapotokea, unaweza kuongeza au kuondoa idadi maalum ya kazi, au kutaja idadi kamili ya kazi.

Huduma inaweza kuwa na sheria kadhaa za kuongeza, hii inaweza kuwa na manufaa, jambo kuu ni kuhakikisha kwamba hawana migogoro na kila mmoja.

Hitimisho

Ikiwa ulifuata maagizo na kutumia picha sawa ya Docker, huduma yako inapaswa kurudisha ukurasa kama huu.

Kujenga API Scalable kwenye AWS Spot Matukio

  1. Tumeunda template kulingana na ambayo mashine zote katika huduma zinazinduliwa. Pia tulijifunza jinsi ya kusasisha mashine wakati kiolezo kinabadilika.
  2. Tumesanidi uchakataji wa mawimbi ya kielelezo cha mfano wa kusimama, kwa hivyo ndani ya dakika moja baada ya kuipokea, kazi zote zinazoendeshwa huondolewa kwenye mashine, kwa hivyo hakuna kinachopotea au kukatizwa.
  3. Tuliinua mizani ili kusambaza mzigo sawasawa kwenye mashine.
  4. Tumeunda huduma inayofanya kazi mara moja, ambayo hupunguza gharama za mashine kwa takriban mara 3.
  5. Tumeweka mipangilio ya kupima kiotomatiki katika pande zote mbili ili kushughulikia ongezeko la mizigo ya kazi bila kulipia gharama za muda wa kupumzika.
  6. Tunatumia Capacity Provider ili programu idhibiti miundombinu (mashine) na si vinginevyo.
  7. Sisi ni kubwa.

Ikiwa una miiba inayoweza kutabirika, kwa mfano unatangaza katika kampeni kubwa ya barua pepe, unaweza kusanidi kuongeza kwa ratiba.

Unaweza pia kupima kulingana na data kutoka sehemu tofauti za mfumo wako. Kwa mfano, tuna utendaji kutuma ofa za matangazo ya kibinafsi watumiaji wa programu ya simu. Wakati mwingine kampeni hutumwa kwa watu 1M+. Baada ya usambazaji huo, daima kuna ongezeko kubwa la maombi kwa API, kwani watumiaji wengi huingia kwenye programu kwa wakati mmoja. Kwa hivyo tukiona kwamba kuna viashiria vya kawaida zaidi katika foleni ya kutuma arifa za utumaji wa matangazo, tunaweza kuzindua mara moja mashine na kazi kadhaa za ziada ili kuwa tayari kupakiwa.

Nitafurahi ikiwa unaniambia katika maoni kesi za kuvutia za kutumia matukio ya doa na ECS au kitu kuhusu kuongeza.

Hivi karibuni kutakuwa na makala kuhusu jinsi tunavyochakata maelfu ya matukio ya uchanganuzi kwa sekunde kwenye rundo lisilo na seva (pamoja na pesa) na jinsi utumaji wa huduma unavyofanya kazi kwa kutumia GitLab CI na Terraform Cloud.

Jiandikishe kwetu, itakuwa ya kuvutia!

Watumiaji waliojiandikisha pekee ndio wanaweza kushiriki katika utafiti. Weka sahihitafadhali.

Je, unatumia matukio ya doa katika uzalishaji?

  • 22,2%Ndiyo6

  • 66,7%No18

  • 11,1%Nilijifunza juu yao kutoka kwa nakala na ninapanga kuzitumia3

Watumiaji 27 walipiga kura. Watumiaji 5 walijizuia.

Chanzo: mapenzi.com

Kuongeza maoni