Iwulite API Scalable na AWS Spot Instances

Ndewo, unu niile! Aha m bụ Kirill, abụ m CTO na Adapty. Ọtụtụ n'ime ihe owuwu anyị dị na AWS, taa, m ga-ekwu maka otu anyị si ebelata ụgwọ ihe nkesa site na ugboro 3 site na iji ọnọdụ ntụpọ na gburugburu ebe mmepụta ihe, yana otu esi edozi akpaaka ha. Nke mbụ, a ga-enwe ntụle nke otu o si arụ ọrụ, wee nwezie ntuziaka zuru ezu maka ịmalite.

Kedu ihe bụ ntụpọ ntụpọ?

ntụpọ ihe atụ bụ ihe nkesa nke ndị ọrụ AWS ndị ọzọ na-abaghị uru ugbu a, ha na-erekwa ha na nnukwu ego (Amazon dere ruo 90%, na ahụmahụ anyị ~ 3x, dịgasị iche dabere na mpaghara, AZ na ụdị ihe atụ). Isi ihe dị iche ha na ndị na-emekarị bụ na ha nwere ike gbanyụọ n'oge ọ bụla. Ya mere, ruo ogologo oge, anyị kwenyere na ọ bụ ihe dị mma iji ha maka gburugburu ebe obibi na-amaghị nwoke, ma ọ bụ maka ọrụ nke ịgbakọ ihe, yana nsonaazụ etiti echekwara na S3 ma ọ bụ na nchekwa data, ma ọ bụghị maka ire ere. Enwere ihe ngwọta nke atọ nke na-enye gị ohere iji ntụpọ na mmepụta ihe, mana enwere ọtụtụ crutches maka ikpe anyị, ya mere anyị emeghị ha. Ụzọ a kọwara n'isiokwu ahụ na-arụ ọrụ kpamkpam n'ime ọrụ AWS ọkọlọtọ, na-enweghị ihe odide ọzọ, okpueze, wdg.

N'okpuru bụ nseta ihuenyo ole na ole na-egosi akụkọ ọnụahịa maka ihe atụ.

m5.large na eu-west-1 (Ireland) mpaghara. Ọnụ ahịa kwụsiri ike maka ọnwa 3, na-echekwa 2.9x ugbu a.

Iwulite API Scalable na AWS Spot Instances

m5.large na us-east-1 mpaghara (N. Virginia). Ọnụahịa ahụ na-agbanwe mgbe niile karịa ọnwa 3, na-echekwa ugbu a site na 2.3x ruo 2.8x dabere na mpaghara nnweta.

Iwulite API Scalable na AWS Spot Instances

t3.obere na mpaghara us-east-1 (N. Virginia). Ọnụ ahịa kwụsiri ike maka ọnwa 3, na-echekwa 3.4x ugbu a.

Iwulite API Scalable na AWS Spot Instances

Ọrụ ije

E gosipụtara ihe owuwu nke isi ọrụ nke anyị ga-ekwu maka ya n'isiokwu a na eserese dị n'okpuru.

Iwulite API Scalable na AWS Spot Instances

Ngwa Ibu Ibu Balancer → EC2 Target Group → Elastic Container Service

A na-eji Balancer Load Balancer (ALB) dị ka ihe nkwụnye ego, nke na-eziga arịrịọ na EC2 Target Group (TG). TG na-ahụ maka imepe ọdụ ụgbọ mmiri na ihe atụ maka ALB na ijikọ ha na ọdụ ụgbọ mmiri nke Elastic Container Service (ECS). ECS bụ analog nke Kubernetes na AWS, nke na-ejikwa arịa Docker.

Otu ihe atụ nwere ike ịnwe ọtụtụ akpa na-agba ọsọ nwere otu ọdụ ụgbọ mmiri, yabụ anyị enweghị ike ịtọ ha nke ọma. ECS na-agwa TG na ọ na-amalite ọrụ ọhụrụ (na okwu Kubernetes nke a na-akpọ pod), ọ na-enyocha ọdụ ụgbọ mmiri n'efu na ihe atụ ma nyefee otu n'ime ha ọrụ arụpụtara. TG na-enyochakwa ma ihe atụ na API na-arụ ọrụ na ya site na iji nlele ahụike, ma ọ bụrụ na ọ hụ nsogbu ọ bụla, ọ kwụsịrị izipu arịrịọ ebe ahụ.

Otu dị iche iche na-enyocha akpaaka EC2 + Ndị na-enye ikike ECS

Eserese dị n'elu anaghị egosi ọrụ EC2 Auto Scaling Groups (ASG). Site n'aha ị nwere ike ịghọta na ọ bụ ya na-ahụ maka ikpochapụ ihe. Agbanyeghị, ruo n'oge na-adịbeghị anya, AWS enweghị ikike arụnyere iji jikwaa ọnụ ọgụgụ igwe na-agba ọsọ sitere na ECS. ECS mere ka o kwe omume ịbawanye ọnụ ọgụgụ ọrụ, dịka ọmụmaatụ, site na ojiji CPU, RAM ma ọ bụ ọnụọgụ arịrịọ. Mana ọ bụrụ na ọrụ nwere oge niile n'efu, mgbe ahụ emepụtaghị igwe ọhụrụ na-akpaghị aka.

Nke a agbanweela site na ọbịbịa nke ECS Capacity Providers (ECS CP). Ugbu a ọrụ ọ bụla dị na ECS nwere ike jikọta ya na ASG, ma ọ bụrụ na ọrụ ndị ahụ adabaghị na ihe ndị na-agba ọsọ, mgbe ahụ, a ga-ebuli ndị ọhụrụ (ma n'ime njedebe ASG guzobere). Nke a na-arụkwa ọrụ n'akụkụ nke ọzọ, ọ bụrụ na ECS CP na-ahụ oge efu na-enweghị ọrụ, mgbe ahụ ọ ga-enye ASG iwu ka mechie ha. ECS CP nwere ikike ịkọwapụta pasentị e lekwasịrị anya nke ibu ihe atụ, nke mere na ụfọdụ igwe na-enwere onwe ya mgbe niile maka ịrụ ọrụ ngwa ngwa; Aga m ekwu maka nke a obere oge.

EC2 Mwepụta Templates

Ọrụ ikpeazụ m ga-ekwu maka ya tupu m abanye n'ime nkọwa gbasara imepụta akụrụngwa a bụ EC2 Launch Templates. Ọ na-enye gị ohere ịmepụta template dịka nke igwe niile ga-amalite, ka ị ghara imeghachi nke a site na ncha oge ọ bụla. N'ebe a, ị nwere ike họrọ ụdị igwe ịmalite, otu nchekwa, oyiyi diski na ọtụtụ paramita ndị ọzọ. Ị nwekwara ike ezipụta data onye ọrụ nke a ga-ebugo na oge niile ewepụtara. Ị nwere ike ịme scripts na data onye ọrụ, dịka ọmụmaatụ, ị nwere ike dezie ọdịnaya nke faịlụ Nhazi ndị nnọchite ECS.

Otu n'ime usoro nhazi kachasị mkpa maka isiokwu a bụ ECS_ENABLE_SPOT_INSTANCE_DRAINING= eziokwu. Ọ bụrụ na agbanyere paramita a, ozugbo ECS nwetara akara na a na-ewepụ ihe atụ, ọ na-ebufe ọrụ niile na-arụ ọrụ na ya na ọkwa Driing. Ọ nweghị ọrụ ọhụrụ a ga-ekenye na ihe atụ a; ọ bụrụ na enwere ọrụ chọrọ ibugharị ya ugbu a, a ga-akagbu ha. Arịrịọ sitere n'aka onye na-ahụ maka ihe ngbanwe kwụsịkwara ịbịa. Ịma ọkwa nhichapụ ihe atụ na-abịa nkeji 2 tupu ihe omume ahụ n'ezie. Ya mere, ọ bụrụ na ọrụ gị anaghị arụ ọrụ ogologo oge karịa nkeji 2 ma ọ dịghị echekwa ihe ọ bụla na diski, mgbe ahụ ị nwere ike iji ọnọdụ ntụpọ na-enweghị atụfu data.

Banyere diski - AWS n'oge na-adịbeghị anya mere Ọ ga-ekwe omume iji Elastic File System (EFS) yana ECS; na atụmatụ a, ọbụnadị diski ahụ abụghị ihe mgbochi, ma anyị anwaleghị nke a, ebe ọ bụ na ụkpụrụ anyị adịghị mkpa diski iji chekwaa steeti ahụ. Site na ndabara, mgbe ị nwetasịrị SIGINT (zitere mgbe a na-ebufe ọrụ na ọkwa Driing), ọrụ niile na-agba ọsọ ga-akwụsị mgbe 30 sekọnd, ọbụlagodi ma ọ bụrụ na emechabeghị; ị nwere ike ịgbanwe oge a site na iji paramita. ECS_CONTAINER_STOP_TIMEOUT. Isi ihe abụghị ịtọ ya ihe karịrị 2 nkeji maka igwe ntụpọ.

Ịmepụta ọrụ

Ka anyị gaa n'ihu n'ịmepụta ọrụ akọwara. N'ime usoro a, m ga-akọwakwa ọtụtụ isi ihe bara uru nke ekwughị n'elu. N'ozuzu, nke a bụ ntụziaka nzọụkwụ site na nzọụkwụ, ma agaghị m atụle ụfọdụ ihe ndị bụ isi ma ọ bụ, n'ụzọ megidere, kpọmkwem ikpe. A na-eme omume niile na console visual AWS, mana enwere ike imepụtagharị ya na mmemme site na iji CloudFormation ma ọ bụ Terraform. Na Adapty anyị na-eji Terraform.

EC2 Mwepụta Template

Ọrụ a na-emepụta nhazi nke igwe nke a ga-eji. A na-ejikwa ndebiri na EC2 -> Ọnọdụ -> ngalaba ndebiri.

Foto igwe Amazon (AMI) - ezipụta onyonyo diski nke a ga-eji malite usoro niile. Maka ECS, n'ọtụtụ ọnọdụ ọ bara uru iji ihe oyiyi kachasị mma sitere na Amazon. A na-emelite ya mgbe niile ma nwee ihe niile dị mkpa maka ECS ịrụ ọrụ. Iji chọpụta NJ onyonyo dị ugbu a, gaa na ibe ahụ Amazon ECS kacha mma AMI, họrọ mpaghara ị na-eji wee detuo AMI ID maka ya. Dịka ọmụmaatụ, maka mpaghara us-east-1, ID dị ugbu a n'oge ederede bụ ami-00c7c1cf5bdc913ed. A ga-etinyerịrị NJ a n'ime Ezipụta ihe bara uru omenala.

Ụdị ihe atụ - gosi ụdị ihe atụ. Họrọ nke kacha dabara maka ọrụ gị.

Otu ụzọ (nbanye) - ezipụta asambodo nke ị nwere ike ijikọ na ihe atụ site na SSH, ọ bụrụ na ọ dị mkpa.

Ntọala netwọk - ezipụta paramita netwọkụ. Ikpo okwu netwọk n'ọtụtụ oge a ga-enwe igwe ojii nkeonwe (VPC). Ndị otu nche - otu nchekwa maka ọnọdụ gị. Ebe ọ bụ na anyị ga-eji ihe nhazi n'ihu ihe atụ, ana m akwado ịkọwa otu ebe a nke na-enye ohere njikọ na-abata naanị site na nhazi. Nke ahụ bụ, ị ga-enwe otu nchekwa 2, otu maka onye nhazi, nke na-enye ohere njikọ inbound site na ebe ọ bụla na ọdụ ụgbọ mmiri 80 (http) na 443 (https), na nke abụọ maka igwe, nke na-enye ohere njikọ na-abata na ọdụ ụgbọ mmiri ọ bụla sitere na otu nhazi. . A ghaghị imeghe njikọ ọpụpụ na otu abụọ ahụ site na iji usoro TCP na ọdụ ụgbọ mmiri niile na adreesị niile. Ị nwere ike amachi ọdụ ụgbọ mmiri na adreesị maka njikọ na-apụ apụ, mana mgbe ahụ ịkwesịrị nyochaa mgbe niile na ị naghị agbalị ịnweta ihe na ọdụ ụgbọ mmiri mechiri emechi.

Nchekwa (olu) - ezipụta paramita diski maka igwe. Ogo diski enweghị ike ịbụ ihe na-erughị nke akọwapụtara na AMI; maka ECS kacha mma ọ bụ 30 GiB.

Nkọwa dị elu - ezipụta ọzọ parameters.

Nhọrọ ịzụta - ma anyị chọrọ ịzụta ntụpọ ntụpọ. Anyị chọrọ, mana anyị agaghị elele igbe a ebe a; anyị ga-ahazi ya na Auto Scaling Group, enwere nhọrọ ndị ọzọ ebe ahụ.

profaịlụ nke IAM - gosi ọrụ a ga-eji malite ihe omume ahụ. Ka ihe atụ wee gbaa ọsọ na ECS, ha chọrọ ikike, nke a na-ahụkarị na ọrụ ahụ ecsNgwaọrụ. N'ọnọdụ ụfọdụ enwere ike ịmepụta ya, ọ bụrụ na ọ bụghị, mgbe ahụ, ebe a ntuziaka na otu esi eme nke a. Mgbe e kere eke, anyị na-egosi ya na template.
Na-esote enwere ọtụtụ paramita, n'ụzọ bụ isi ị nwere ike ịhapụ ụkpụrụ ndabara n'ebe ọ bụla, mana nke ọ bụla n'ime ha nwere nkọwa doro anya. Ana m eme ka atụ EBS kachasị mma yana nhọrọ T2/T3 Unlimited ma ọ bụrụ na ejiri ya mgbawa ufodu.

Data onye ọrụ - gosi data onye ọrụ. Anyị ga-edezi faịlụ /etc/ecs/ecs.config, nke nwere nhazi ihe nnọchite ECS.
Ọmụmaatụ nke ihe data onye ọrụ nwere ike ịdị ka:

#!/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 - oke na-egosi na ihe atụ bụ nke ụyọkọ nwere aha enyere, ya bụ, ụyọkọ a ga-enwe ike idobe ọrụ ya na nkesa a. Anyị emebebeghị ụyọkọ, mana anyị ga-eji aha a mgbe ị na-eke ya.

ECS_ENABLE_SPOT_INSTANCE_DRAINING=true - paramita ahụ na-akọwapụta na mgbe enwetara mgbaama iji gbanyụọ ntụpọ ntụpọ, a ga-ebufe ọrụ niile dị na ya na ọkwa Drining.

ECS_CONTAINER_STOP_TIMEOUT=1m - paramita ahụ na-akọwapụta na mgbe ị nwetasịrị akara SIGINT, ọrụ niile nwere nkeji 1 tupu e gbuo ya.

ECS_ENGINE_AUTH_TYPE=docker - oke na-egosi na a na-eji atụmatụ Docker dị ka usoro ikike

ECS_ENGINE_AUTH_DATA=... - njikọ njikọ na ndekọ akpa nkeonwe, ebe echekwara onyonyo Docker gị. Ọ bụrụ na ọ bụ ọha, mgbe ahụ ịkwesighi ịkọwapụta ihe ọ bụla.

Maka ebumnuche nke edemede a, m ga-eji onyonyo ọhaneze sitere na Docker Hub, yabụ kọwaa paramita ECS_ENGINE_AUTH_TYPE и ECS_ENGINE_AUTH_DATA enweghị mkpa.

Ọ dị mma ịma: A na-atụ aro ka ị na-emelite AMI mgbe niile, n'ihi na nsụgharị ọhụrụ na-emelite nsụgharị nke Docker, Linux, ECS agent, wdg. Ka ị ghara ichefu nke a, ị nwere ike. melite ọkwa banyere ntọhapụ nke ọhụrụ nsụgharị. Ị nwere ike ịnweta ọkwa site na email wee jiri aka kwalite, ma ọ bụ ị nwere ike dee ọrụ Lambda nke ga-emepụta ụdị Mwepụta ọhụrụ na AMI emelitere na-akpaghị aka.

Otu EC2 Auto Scaling Group

Otu Auto Scaling Group na-ahụ maka ịmalite na ịcha ihe atụ. A na-ejikwa otu dị iche iche na EC2 -> Ntụle akpaaka -> ngalaba otu nlegharị anya akpaaka.

Mwepụta template - họrọ template emepụtara na nzọụkwụ gara aga. Anyị na-ahapụ ụdị ndabara.

Nhọrọ ịzụta na ụdị ihe atụ - kọwapụta ụdị ihe atụ maka ụyọkọ. Jidebere template mmalite na-eji ụdị ihe atụ sitere na Template Launch. Jikọta nhọrọ ịzụrụ na ụdị ihe atụ na-enye gị ohere ịhazi ụdị ihe atụ n'ụzọ dị nro. Anyị ga-eji ya.

Nhọrọ On-Deman base - ọnụ ọgụgụ nke oge niile, na-abụghị ntụpọ nke ga-arụ ọrụ mgbe niile.

Pasent-achọrọ n'elu ntọala - pasent pasent nke oge na ntụpọ, 50-50 ga-ekesa otu, 20-80 maka oge ọ bụla 4 ntụpọ ga-ebuli. Maka ebumnuche nke ihe atụ a, m ga-egosi 50-50, ma n'eziokwu anyị na-emekarị 20-80, n'ọnọdụ ụfọdụ 0-100.

Ụdị ihe atụ - ebe a ị nwere ike ịkọwapụta ụdị ikpe ndị ọzọ a ga-eji na ụyọkọ ahụ. Ọ dịghị mgbe anyị ji ya mee ihe n'ihi na aghọtachaghị m ihe akụkọ ahụ pụtara. Ikekwe nke a bụ n'ihi oke na ụdị ihe atụ ụfọdụ, mana enwere ike ịbawanye ha ngwa ngwa site na nkwado. Ọ bụrụ na ị maara ngwa ahụ, m ga-enwe obi ụtọ ịgụ ya na nkọwa)

Iwulite API Scalable na AWS Spot Instances

Network - ntọala netwọk, họrọ VPC na subnets maka igwe, n'ọtụtụ oge ị ga-ahọrọ subnets niile dị.

Ibu Ibu nguzozi - ntọala balancer, mana anyị ga-eme nke a iche iche, anyị agaghị emetụ ihe ọ bụla aka ebe a. Nyocha ahụike a ga-ahazikwa ma emechaa.

Nha otu - anyị na-egosi oke na ọnụ ọgụgụ igwe na ụyọkọ na ọnụ ọgụgụ igwe achọrọ na mmalite. Ọnụọgụ igwe dị na ụyọkọ agaghị adị ala karịa nke kacha nta akọwapụtara yana karịa nke kachasị, ọbụlagodi ma ọ bụrụ na scaling kwesịrị ime dịka metrics si dị.

Amụma ịka ihe - scaling parameters, mana anyị ga-atụle dabere na ọrụ ECS na-agba ọsọ, yabụ anyị ga-ahazi nhazi ahụ ma emechaa.

Nchedo ọnụ ọgụgụ ihe atụ - nchebe nke oge site na ihichapụ mgbe a na-agbada. Anyị na-eme ya ka ASG ghara ihichapụ igwe nwere ọrụ na-arụ ọrụ. Onye na-enye ike ECS ga-ewepụ nchedo maka oge na-enweghị ọrụ.

Tinye mkpado - ị nwere ike dee mkpado maka ihe atụ (maka nke a, a ga-enyocha igbe nlele mkpado ọhụrụ). Ana m akwado ịkọwa mkpado Aha, mgbe ahụ oge niile ewepụtara n'ime otu a ga-enwe otu aha, ọ dịkwa mma ilele ha na njikwa.

Iwulite API Scalable na AWS Spot Instances

Mgbe ịmechara otu ahụ, mepee ya ma gaa na ngalaba nhazi dị elu, gịnị kpatara na anaghị ahụ nhọrọ niile na njikwa na ọkwa okike.

Amụma nkwụsị - iwu ndị a na-eburu n'uche mgbe ị na-ehichapụ ihe. A na-etinye ha n'usoro. Anyị na-ejikarị ndị dị na foto dị n'okpuru ebe a. Nke mbụ, a na-ehichapụ ihe atụ nwere Template Launch kacha ochie (dịka ọmụmaatụ, ọ bụrụ na anyị emelitere AMI, anyị mepụtara ụdị ọhụrụ, mana oge niile jisiri ike gbanwee na ya). Mgbe ahụ, ahọpụtara ihe ndị kacha nso na elekere ịgba ụgwọ na-esote. Mgbe ahụ, a na-ahọpụta ndị kacha ochie dabere na ụbọchị mmalite.

Iwulite API Scalable na AWS Spot Instances

Ọ dị mma ịma: imelite igwe niile na ụyọkọ, adabara iji Ntughari ume ọhụrụ. Ọ bụrụ na ijikọ nke a na ọrụ Lambda site na nzọụkwụ gara aga, ị ga-enwe sistemu mmelite akpaka zuru oke. Tupu imelite igwe niile, ị ga-emerịrị ihe nchekwa n'ihe atụ maka oge niile n'ime otu. Ọ bụghị nhazi n'ime otu ahụ, mana nchebe site na igwe n'onwe ha, a na-eme nke a na taabụ njikwa ọnọdụ.

Ngwa Load Balancer na EC2 Target Group

A na-emepụta ihe nhazi na ngalaba EC2 → Load Balance → Load Balancers. Anyị ga-eji Ngwa Load Balancer; enwere ike ịgụ atụnyere ụdị nhazi dị iche iche na ibe ọrụ.

Ndị na-ege ntị - ọ bụ ihe ezi uche dị na ya ime ọdụ ụgbọ mmiri 80 na 443 wee bugharịa site na 80 ruo 443 site na iji iwu nhazi mgbe emechara.

Mpaghara nnweta - n'ọtụtụ oge, anyị na-ahọrọ mpaghara nnweta maka onye ọ bụla.

Hazie Ntọala Nchekwa - A na-egosi asambodo SSL maka onye nhazi ebe a, nhọrọ kachasị adaba bụ mee akwụkwọ na ACM. Banyere ndịiche Security Policy enwere ike ịgụ na akwụkwọ, ị nwere ike hapụ ya na ndabara họrọ ELBSecurityPolicy-2016-08. Mgbe ịmepụtara ihe nkwụnye ego, ị ga-ahụ ya Aha DNS, nke ịchọrọ ịhazi CNAME maka ngalaba gị. Dịka ọmụmaatụ, otu a ka ọ dị na Cloudflare.

Iwulite API Scalable na AWS Spot Instances

Otu nchekwa - mepụta ma ọ bụ họrọ otu nchekwa maka onye na-edozi ihe, edere m ihe ndị ọzọ gbasara nke a dị n'elu na EC2 Launch Template → Network settings section.

Òtù na-eche - anyị na-emepụta otu nke na-ahụ maka ịnyefe arịrịọ site n'aka onye nhazi na igwe na ịlele ha dị iji dochie ha n'ọnọdụ nsogbu. Getdị ebumnuche kwesịrị ịbụ ihe atụ, Protocol и Port ọ bụla, ọ bụrụ na ị na-eji HTTPS maka nkwurịta okwu n'etiti onye na-eme ihe na ihe atụ, mgbe ahụ ị ga-ebugo ha akwụkwọ. Maka ebumnuche nke ihe atụ a, anyị agaghị eme nke a, anyị ga-ahapụ naanị ọdụ ụgbọ mmiri 80.

Nyocha ahụike - paramita maka ịlele arụmọrụ nke ọrụ ahụ. Na ezigbo ọrụ, nke a kwesịrị ịbụ arịrịọ dị iche iche nke na-emejuputa akụkụ dị mkpa nke mgbagha azụmahịa; maka ebumnuche nke ihe atụ a, m ga-ahapụ ntọala ndabara. Na-esote, ị nwere ike họrọ oge arịrịọ, oge nkwụsị, koodu ịga nke ọma, wdg N'ihe atụ anyị, anyị ga-egosi koodu ịga nke ọma 200-399, n'ihi na ihe oyiyi Docker nke a ga-eji na-eweghachite koodu 304.

Iwulite API Scalable na AWS Spot Instances

Deba aha ebumnuche - ebe a, a na-ahọrọ ụgbọ ala maka otu, mana n'ọnọdụ anyị, ECS ga-eme nke a, yabụ anyị na-awụpụ nzọụkwụ a.

Ọ dị mma ịma: na ọkwa balancer ị nwere ike ime ka ndekọ nke a ga-echekwa na S3 na ụfọdụ usoro. Site n'ebe ahụ enwere ike ibuga ha na ọrụ ndị ọzọ maka nyocha, ma ọ bụ ị nwere ike ịme ajụjụ SQL ozugbo na data dị na S3 site na iji. eji Athena. Ọ dị mma ma na-arụ ọrụ na-enweghị koodu mgbakwunye ọ bụla. M na-akwado ka mwube mwepụ nke ndekọ na S3 ịwụ mgbe a kapịrị ọnụ oge.

Nkọwa ọrụ ECS

N'ime usoro ndị gara aga, anyị mepụtara ihe niile metụtara akụrụngwa ọrụ; ugbu a, anyị na-aga n'ihu ịkọwa arịa ndị anyị ga-ebuba. Emere nke a na ngalaba nkọwa ọrụ ECS →.

Mwepụta ndakọrịta ụdị - họrọ EC2.

Ọrụ IAM na-arụ ọrụ - họrọ ecsTaskExecutionRole. Iji ya mee ihe, a na-ede akwụkwọ ndekọ, ịnweta mgbanwe nzuzo na-enye, wdg.

Na ngalaba nkọwa akpa, pịa Tinye akpa.

Image - jikọọ na onyonyo a na koodu oru ngo; maka ọmụmaatụ a, m ga-eji onyonyo ọha sitere na Docker Hub bitnami/node-ihe atụ:0.0.1.

Oke ebe nchekwa - oke ebe nchekwa maka akpa. Oke siri ike - oke ike, ma ọ bụrụ na akpa ahụ gafere uru a kapịrị ọnụ, a ga-egbu iwu docker kill, akpa ahụ ga-anwụ ozugbo. Oke dị nro - oke dị nro, akpa ahụ nwere ike ịgafe uru a kapịrị ọnụ, mana a ga-eburu n'uche nke a mgbe ị na-etinye ọrụ na igwe. Dịka ọmụmaatụ, ọ bụrụ na igwe nwere 4 GiB nke RAM, na njedebe dị nro nke akpa bụ 2048 MiB, mgbe ahụ igwe a nwere ike ịnwe oke ọrụ 2 na-agba ọsọ na akpa a. N'ezie, 4 GiB nke RAM dị ntakịrị karịa 4096 MiB, enwere ike ịlele nke a na taabụ ECS na ụyọkọ. Oke dị nro enweghị ike ibu karịa oke siri ike. Ọ dị mkpa ịghọta na ọ bụrụ na e nwere ọtụtụ arịa na otu ọrụ, mgbe ahụ, a na-achịkọta oke ha.

Maapụ ọdụ ụgbọ mmiri - na ọdụ ụgbọ mmiri ndị ọbịa Anyị na-egosi 0, nke a pụtara na a ga-ekenye ọdụ ụgbọ mmiri n'ike n'ike ma ndị otu Target ga-enyocha ya. Ọdụ ụgbọ mmiri - A na-akọwakarị ọdụ ụgbọ mmiri nke ngwa gị na-arụ na iwu mmezu, ma ọ bụ kenye ya na koodu ngwa gị, Dockerfile, wdg. Maka ọmụmaatụ anyị, anyị ga-eji 3000 n'ihi na edepụtara ya dockerfile onyonyo a na-eji.

Nyocha ahụike - akpa nlele nlele ahụike, ka ọ ghara inwe mgbagwoju anya na nke ahaziri na Group Target.

Environment - ntọala gburugburu ebe obibi. Ngalaba CPU - yiri oke ebe nchekwa, naanị banyere processor. Isi ihe nrụpụta ọ bụla bụ nkeji 1024, yabụ ọ bụrụ na ihe nkesa ahụ nwere processor dual-core na akpa ahụ ka edobere 512, enwere ike ịmalite ọrụ 4 nwere akpa a n'otu sava. Nkeji CPU na-adakọ ọnụ na ọnụọgụ cores mgbe niile; enweghị ike ịdị ntakịrị ntakịrị n'ime ha, dịka ọ dị na ebe nchekwa.

iwu - iwu ka ịmalite ọrụ n'ime akpa, a na-akọwapụta paramita niile site na rikomas. Nke a nwere ike ịbụ gunicorn, npm, wdg. Ọ bụrụ na akọwapụtaghị ya, a ga-eji uru ntuziaka CMD sitere na Dockerfile. Anyị na-egosi npm,start.

Mgbanwe gburugburu - akpa gburugburu mgbanwe. Nke a nwere ike ịbụ data ederede dị mfe ma ọ bụ mgbanwe nzuzo sitere na Onye njikwa ihe nzuzo ma ọ bụ Ụlọ ahịa Parameter.

Nchekwa na ndekọ - ebe a, anyị ga-edozi ịbanye na CloudWatch Logs (ọrụ maka ndekọ sitere na AWS). Iji mee nke a, naanị mee igbe nlele CloudWatch Logs Auto-configure. Ka emechara nkọwapụta Task, a ga-emepụta otu ndekọ na-akpaghị aka na CloudWatch. Site na ndabara, a na-echekwa ndekọ n'ime ya ruo mgbe ebighị ebi; Ana m akwado ịgbanwe oge njide site na Emebila ka ọ bụrụ oge achọrọ. Emere nke a na otu CloudWatch Log, ịkwesịrị pịa oge dị ugbu a wee họrọ nke ọhụrụ.

Iwulite API Scalable na AWS Spot Instances

Ụyọkọ ECS na Onye na-enye ike ECS

Gaa na ngalaba ECS → ụyọkọ iji mepụta ụyọkọ. Anyị na-ahọrọ EC2 Linux + ịkparịta ụka n'Ịntanet ka template.

Aha ụyọkọ - dị ezigbo mkpa, anyị na-eme ebe a otu aha ahụ akọwapụtara na paramita Mwepụta ECS_CLUSTER, n'ọnọdụ anyị - DemoApiClusterProd. Lelee igbe nlele Mepụta ụyọkọ efu. Nhọrọ, ị nwere ike mee ka nghọta Container lelee metrik maka ọrụ na CloudWatch. Ọ bụrụ na ịmere ihe niile n'ụzọ ziri ezi, mgbe ahụ na ngalaba ECS, ị ga-ahụ igwe ndị emepụtara n'ime otu Auto Scaling Group.

Iwulite API Scalable na AWS Spot Instances

Gaa na taabụ Ndị na-enye ikike ma mepụta nke ọhụrụ. Ka m chetara gị na ọ dị mkpa iji chịkwaa mmepụta na nkwụsị nke igwe dabere na ọnụ ọgụgụ nke ọrụ ECS na-agba ọsọ. Ọ dị mkpa iburu n'obi na a ga-ekenye onye na-enye ọrụ naanị otu otu.

Otu nlegharị anya akpaaka - họrọ ndị mbụ kere.

chịkwaa scaling - mee ya ka onye na-eweta ya nwee ike ịbawanye ọrụ ahụ.

Ikike ebumnuche% - kedu pasent igwe ndị nwere ọrụ ndị anyị chọrọ. Ọ bụrụ na ị kọwapụta 100%, mgbe ahụ igwe niile ga-eji ọrụ na-arụ ọrụ mgbe niile. Ọ bụrụ na ị kọwapụta 50%, mgbe ahụ ọkara nke ụgbọ ala ga-abụ n'efu mgbe niile. N'okwu a, ọ bụrụ na a na-awụli elu dị nkọ na ibu, tagzi ọhụrụ ga-abanye ozugbo n'ụgbọ ala efu, na-echeghị ka a ga-ebuga ya.

Nchekwa nchupu jisiri ike - mee ka, oke a na-enye ohere ka onye na-eweta ya wepụ ihe nchebe nke oge na ihichapụ. Nke a na-eme mgbe enweghị ọrụ na-arụ ọrụ na igwe ma na-enye ohere ikike Target%.

Ọrụ ECS na nhazi nhazi

Nzọụkwụ ikpeazụ :) Iji mepụta ọrụ, ị ga-aga na ụyọkọ nke emebere na mbụ na taabụ Ọrụ.

Ụdị mmalite - mkpa ka ị pịa Gbanwee na atụmatụ ndị na-eweta ikike wee họrọ ndị na-eweta mbụ emepụtara.

Iwulite API Scalable na AWS Spot Instances

Nkọwa ọrụ - họrọ nkọwa ọrụ emepụtara na mbụ na ngbanwe ya.

Aha ọrụ - iji zere ọgba aghara, anyị na-egosipụta otu ihe ahụ dị ka nkọwa ọrụ.

Servicedị ọrụ - oyiri mgbe niile.

Ọnụọgụ nke ọrụ - ọnụ ọgụgụ achọrọ nke ọrụ arụ ọrụ na ọrụ ahụ. A na-achịkwa oke a site n'ịtụle, mana a ka ga-akọwarịrị ya.

Pasent ahụike kacha nta и Pasent kacha elu - chọpụta omume nke ọrụ n'oge nnyefe. Ụkpụrụ ndabara bụ 100 na 200, na-egosi na n'oge ntinye ego, ọnụ ọgụgụ nke ọrụ ga-abawanye ọtụtụ ugboro, wee laghachi na uru achọrọ. Ọ bụrụ na ị nwere ọrụ 1 na-agba ọsọ, min = 0, na max = 100, mgbe ahụ, n'oge ntinye ya, a ga-egbu ya, mgbe nke ahụ gasịrị, a ga-ebuli onye ọhụrụ, ya bụ, ọ ga-abụ oge nkwụsị. Ọ bụrụ na ọrụ 1 na-agba ọsọ, min = 50, max = 150, mgbe ahụ ntinye agaghị eme ma ọlị, n'ihi na enweghị ike ikewa otu ọrụ na ọkara ma ọ bụ mụbaa otu ugboro na ọkara.

Ụdị ntinye - hapụ Rolling update.

Ndebiri ntinye - iwu maka itinye ọrụ na igwe. Ihe ndabara bụ AZ Balanced Spread - nke a pụtara na a ga-etinye ọrụ ọhụrụ ọ bụla na nke ọhụrụ ruo mgbe igwe dị na mpaghara niile dị na-ebili. Anyị na-emekarị BinPack - CPU na Spread - AZ; na amụma a, a na-etinye ọrụ dịka o kwere mee n'otu igwe kwa CPU. Ọ bụrụ na ọ dị mkpa ịmepụta igwe ọhụrụ, a na-emepụta ya na mpaghara nnweta ọhụrụ.

Iwulite API Scalable na AWS Spot Instances

Ụdị nkwụnye ihe ibu - họrọ Ngwa ibu nha nha.

Ọrụ IAM ọrụ - họrọ ecsServiceRole.

Ibu ibu aha nkwụnye ego - họrọ nkwụnye ego nke emebere mbụ.

Oge amara ahụike nlele - kwụsịtụ tupu ịme nyocha ahụike mgbe ịmechara ọrụ ọhụrụ, anyị na-edobe ya na sekọnd 60.

Akpa iji kwụọ nguzozi — na Target otu aha ihe, họrọ mbụ kere otu, na ihe niile ga-ejupụta na-akpaghị aka.

Iwulite API Scalable na AWS Spot Instances

Ọrụ akpaaka scaling - ọrụ scaling parameters. Họrọ Hazie Ọrụ Nchekwa akpaaka ka ịhazie ọnụọgụ ọrụ gị chọrọ. Anyị na-esetịpụ opekempe na ọnụ ọgụgụ kachasị elu nke ọrụ mgbe ị na-atụgharị.

Ọrụ IAM maka Scaling Auto Service - họrọ AWSServiceRoleForApplicationAutoScaling_ECSService.

Atumatu mkpakọ ọrụ akpaaka - iwu maka scaling. Enwere ụdị 2:

  1. Nleba anya ebumnuche - nyochaa metrik ebumnuche (ojiji CPU / RAM ma ọ bụ ọnụọgụ arịrịọ maka ọrụ ọ bụla). Dịka ọmụmaatụ, anyị na-achọ ka nkezi ihe nrụpụta ga-abụ 85%, mgbe ọ dị elu, a ga-agbakwunye ọrụ ọhụrụ ruo mgbe ọ ruru uru ebumnuche. Ọ bụrụ na ibu ahụ dị ala, mgbe ahụ, a ga-ewepụ ọrụ, n'ụzọ megidere ya, ọ gwụla ma agbanyeghi nchebe megide ịdaba ala (na-enyere aka)Gbanyụọ ọnụ ọgụgụ).
  2. Nhazi ọkwa - mmeghachi omume na ihe omume aka ike. N'ebe a, ị nwere ike hazie mmeghachi omume maka ihe omume ọ bụla (CloudWatch Alarm), mgbe ọ mere, ị nwere ike ịgbakwunye ma ọ bụ wepụ ọnụ ọgụgụ ọrụ akọwapụtara, ma ọ bụ kọwaa kpọmkwem ọnụ ọgụgụ ọrụ.

Ọrụ nwere ike ịnwe ọtụtụ iwu scaling, nke a nwere ike ịba uru, isi ihe bụ iji hụ na ha anaghị emegide ibe ha.

nkwubi

Ọ bụrụ na ị gbasoro ntuziaka ahụ wee jiri otu onyonyo Docker ahụ, ọrụ gị kwesịrị ịlaghachi ibe dị ka nke a.

Iwulite API Scalable na AWS Spot Instances

  1. Anyị ekepụtala template dịka nke eji arụ ọrụ igwe niile dị na ọrụ ahụ. Anyị mụtakwara otu esi emelite igwe mgbe template gbanwere.
  2. Anyị ahazila nhazi nke ntụpọ nkwụsị nkwụsịtụ, ya mere, n'ime nkeji ole na ole mgbe ị nwetasịrị ya, a na-ewepụ ọrụ niile na-agba ọsọ na igwe, n'ihi ya, ọ dịghị ihe na-efunahụ ma ọ bụ kwụsị.
  3. Anyị na-ebuli ihe nkwụnye ego iji kesaa ibu ahụ n'ofe igwe.
  4. Anyị ekepụtala ọrụ na-arụ ọrụ n'otu oge, nke na-ebelata ọnụ ahịa igwe ihe dịka ugboro atọ.
  5. Anyị ahazila autoscaling n'akụkụ abụọ ahụ iji jikwa oke ọrụ na-ebuwanye ibu na-eweteghị ụgwọ oge nkwụsịtụ.
  6. Anyị na-eji Onye na-enye ike ka ngwa ahụ na-ejikwa akụrụngwa (igwe) ọ bụghị n'ụzọ ọzọ.
  7. Anyị dị mma.

Ọ bụrụ na ị nwere spikes enwere ike ibu amụma na ibu, dịka ọmụmaatụ, ị na-akpọsa ozi na nnukwu mkpọsa ozi email, ị nwere ike melite scaling site na. nhazi oge.

Ị nwekwara ike ịrị elu dabere na data sitere na akụkụ dị iche iche nke sistemụ gị. Dịka ọmụmaatụ, anyị nwere ọrụ na-ezipụ onyinye nkwado n'otu n'otu ndị na-eji ngwa mkpanaka. Mgbe ụfọdụ, a na-ezigara mmadụ 1M+ mkpọsa. Mgbe nkesa dị otú ahụ gasịrị, a na-enwekarị mmụba dị ukwuu na arịrịọ API, ebe ọ bụ na ọtụtụ ndị ọrụ na-abanye na ngwa ahụ n'otu oge ahụ. Yabụ ọ bụrụ na anyị ahụ na enwere akara ngosi ọkọlọtọ karịa na kwụ n'ahịrị maka izipu ọkwa nkwalite nkwado, anyị nwere ike ịmalite ọtụtụ igwe na ọrụ ndị ọzọ ozugbo iji dịrị njikere maka ibu ahụ.

M ga-enwe obi ụtọ ma ọ bụrụ na ị gwa m na nkwupụta ndị na-adọrọ mmasị ikpe nke iji ntụpọ ntụpọ na ECS ma ọ bụ ihe banyere scaling.

N'oge na-adịghị anya, a ga-enwe akụkọ gbasara otu anyị si ahazi puku kwuru puku ihe nyocha kwa sekọnd na nchịkọta enweghị nkesa (na ego) yana otu ntinye ọrụ si arụ ọrụ site na iji GitLab CI na Terraform Cloud.

Debanye aha anyị, ọ ga-adọrọ mmasị!

Naanị ndị ọrụ edebanyere aha nwere ike isonye na nyocha a. banye, Biko.

Ị na-eji ihe atụ ntụpọ na mmepụta?

  • 22,2%Ee6

  • 66,7%Mba18

  • 11,1%Amụtara m banyere ha site n'otu akụkọ ma mee atụmatụ iji ha mee ihe3

Ndị ọrụ 27 tụrụ vootu. Ndị ọrụ 5 anabataghị.

isi: www.habr.com

Tinye a comment