Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

Aloha kākou! ʻO Kirill koʻu inoa, ʻo wau ʻo CTO ma Adapty. ʻO ka hapa nui o kā mākou papa hana ma AWS, a i kēia lā e kamaʻilio wau e pili ana i ka hōʻemi ʻana i nā kumukūʻai server e 3 mau manawa ma o ka hoʻohana ʻana i nā manawa kiko i kahi ʻenehana hana, a me pehea e hoʻonohonoho ai i kā lākou auto-scaling. ʻO ka mua, e ʻike ʻia ke ʻano o ka hana ʻana, a laila nā kuhikuhi kikoʻī no ka hoʻomaka ʻana.

He aha nā Spot Instances?

Kakau ʻO nā manawa he mau kikowaena o nā mea hoʻohana AWS ʻē aʻe i kēia manawa, a kūʻai aku lākou iā lākou ma ke kumukūʻai nui (Kākau ʻo Amazon a hiki i 90%, i kā mākou ʻike ~ 3x, ʻokoʻa ma muli o ka ʻāina, AZ a me ke ʻano hiʻohiʻona). ʻO kā lākou ʻokoʻa nui mai nā mea maʻamau, hiki iā lākou ke hoʻopau i kēlā me kēia manawa. No laila, no ka manawa lōʻihi, ua manaʻo mākou he mea maʻamau ka hoʻohana ʻana iā lākou no nā wahi puʻupaʻa, a i ʻole no nā hana o ka helu ʻana i kekahi mea, me nā hopena waena i mālama ʻia ma S3 a i ka waihona, akā ʻaʻole no ke kūʻai. Aia nā ʻaoʻao ʻekolu e hiki ai iā ʻoe ke hoʻohana i nā kiko ma ka hana ʻana, akā nui nā koʻokoʻo no kā mākou hihia, no laila ʻaʻole mākou i hoʻokō iā lākou. ʻO ke ala i wehewehe ʻia ma ka ʻatikala e hana holoʻokoʻa i loko o ka hana AWS maʻamau, me ka ʻole o nā palapala hou, nā lei aliʻi, etc.

Aia ma lalo iho kekahi mau screenshots e hōʻike ana i ka mōʻaukala kumu kūʻai no nā manawa kiko.

m5.nui ma ka eu-komohana-1 (Ireland). Ua paʻa ka nui o ke kumu kūʻai no 3 mau mahina, e mālama ana i kēia manawa 2.9x.

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

m5.nui ma ka ʻāina us-hikina-1 (N. Virginia). Ke hoʻololi mau nei ke kumukūʻai ma luna o 3 mau mahina, e mālama nei i kēia manawa mai ka 2.3x a i ka 2.8x ma muli o ka wahi i loaʻa.

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

t3.liʻiliʻi ma ka ʻāina us-hikina-1 (N. Virginia). Ua paʻa ke kumu kūʻai no 3 mau mahina, e mālama ana i kēia manawa 3.4x.

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

Hoʻolālā lawelawe

Hōʻike ʻia ka papa hana kumu o ka lawelawe a mākou e kamaʻilio ai ma kēia ʻatikala ma ka kiʻi ma lalo nei.

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

Mea Hoʻohālikelike Hoʻouka → EC2 Target Group → Elastic Container Service

Hoʻohana ʻia ka Application Load Balancer (ALB) ma ke ʻano he mea kaulike, e hoʻouna ana i nā noi i ka EC2 Target Group (TG). Na TG ke kuleana no ka wehe ʻana i nā awa ma nā hihia no nā ALB a me ka hoʻopili ʻana iā lākou i nā awa o nā ipu Elastic Container Service (ECS). ʻO ECS kahi analogue o Kubernetes ma AWS, nāna e hoʻokele i nā pahu Docker.

Hiki i hoʻokahi laʻana ke loaʻa nā pahu holo me nā awa like, no laila ʻaʻole hiki iā mākou ke hoʻonohonoho paʻa iā lākou. Ua haʻi ʻo ECS iā TG e hoʻomaka ana ia i kahi hana hou (ma nā huaʻōlelo Kubernetes i kapa ʻia he pod), nānā ʻo ia i nā awa manuahi ma ka laʻana a hāʻawi i kekahi o lākou i ka hana i hoʻomaka. Nānā pinepine ʻo TG inā ke hana nei ka hihia a me ka API me ka hoʻohana ʻana i ka nānā olakino, a inā ʻike ʻo ia i nā pilikia, pau ka hoʻouna ʻana i nā noi ma laila.

EC2 Nā Pūʻulu Scaling Auto + Nā mea hoʻolako hiki i ka ECS

ʻAʻole hōʻike ka kiʻi i luna i ka lawelawe EC2 Auto Scaling Groups (ASG). Mai ka inoa hiki iā ʻoe ke hoʻomaopopo he kuleana ia no ka hoʻonui ʻana i nā manawa. Eia naʻe, a hiki i kēia manawa, ʻaʻole i loaʻa i ka AWS kahi mana i kūkulu ʻia e mālama i ka helu o nā mīkini holo mai ECS. Hiki i ka ECS ke hoʻonui i ka helu o nā hana, no ka laʻana, ma ka hoʻohana ʻana i ka CPU, RAM a i ʻole ka helu o nā noi. Akā inā loaʻa nā hana i nā manawa manuahi, a laila ʻaʻole i hana ʻia nā mīkini hou.

Ua loli kēia me ka hiki ʻana mai o ECS Capacity Providers (ECS CP). I kēia manawa hiki ke hoʻopili ʻia kēlā me kēia lawelawe ma ECS me kahi ASG, a inā ʻaʻole kūpono nā hana i nā manawa holo, a laila e hoʻāla ʻia nā mea hou (akā i loko o nā palena ASG i hoʻokumu ʻia). Hana pū kēia i ka ʻaoʻao ʻē aʻe, inā ʻike ʻo ECS CP i nā manawa hana ʻole me ka hana ʻole, a laila hāʻawi ia i ke kauoha ASG e pani iā ​​​​lākou. Loaʻa i ka ECS CP ka hiki ke kuhikuhi i ka pākēneka o ka hoʻouka ʻana, no laila e manuahi mau kekahi helu o nā mīkini no ka hana wikiwiki ʻana; E kamaʻilio wau e pili ana i kēia ma hope.

EC2 Launch Templates

ʻO ka lawelawe hope aʻu e kamaʻilio ai ma mua o ka hele ʻana i nā kikoʻī e pili ana i ka hana ʻana i kēia ʻōnaehana ʻo EC2 Launch Templates. Hāʻawi ia iā ʻoe e hana i kahi template e like me ka hoʻomaka ʻana o nā mīkini a pau, i ʻole e hana hou i kēia mai ka wā ʻōpala i kēlā me kēia manawa. Maanei hiki iā ʻoe ke koho i ke ʻano o ka mīkini e hoʻomaka ai, pūʻulu palekana, kiʻi disk a me nā ʻāpana ʻē aʻe he nui. Hiki iā ʻoe ke kuhikuhi i ka ʻikepili mea hoʻohana e hoʻouka ʻia i nā manawa āpau i hoʻokuʻu ʻia. Hiki iā ʻoe ke holo i nā palapala i ka ʻikepili mea hoʻohana, no ka laʻana, hiki iā ʻoe ke hoʻoponopono i nā ʻike o kahi faila Nā hoʻonohonoho ʻoihana ECS.

ʻO kekahi o nā ʻāpana hoʻonohonoho koʻikoʻi no kēia ʻatikala ECS_ENABLE_SPOT_INSTANCE_DRAINING= ʻoiaʻiʻo. Inā hiki ke hoʻohana ʻia kēia ʻāpana, a laila i ka manawa e loaʻa ai iā ECS kahi hōʻailona e lawe ʻia ana kahi hiʻohiʻona, hoʻololi ia i nā hana a pau e hana ana ma ke kūlana Draining. ʻAʻole e hāʻawi ʻia nā hana hou i kēia manawa; inā he mau hana e makemake ana e ʻōwili ʻia i kēia manawa, e kāpae ʻia. Ua pau ka hele ʻana mai o nā noi mai ka mea kaulike. ʻO ka hoʻolaha ʻana o ka hoʻopau ʻana i nā manawa he 2 mau minuke ma mua o ka hanana maoli. No laila, inā ʻaʻole hana kāu lawelawe i nā hana ma mua o 2 mau minuke a ʻaʻole mālama i kekahi mea i ka disk, a laila hiki iā ʻoe ke hoʻohana i nā manawa kikoʻī me ka nalowale ʻole o ka ʻikepili.

E pili ana i ka disk - AWS i kēia manawa ua hana Hiki iā ʻoe ke hoʻohana i ka Elastic File System (EFS) me ECS; me kēia hoʻolālā, ʻaʻole ʻo ka disk he mea pale, akā ʻaʻole mākou i hoʻāʻo i kēia, no ka mea, ʻaʻole pono mākou i ka disk e mālama i ka mokuʻāina. Ma ka maʻamau, ma hope o ka loaʻa ʻana o SIGINT (hoʻouna ʻia ke hoʻololi ʻia kahi hana i ke kūlana Draining), e hoʻopau ʻia nā hana holo āpau ma hope o 30 kekona, ʻoiai inā ʻaʻole i pau; hiki iā ʻoe ke hoʻololi i kēia manawa me ka hoʻohana ʻana i ka palena. ECS_CONTAINER_STOP_TIMEOUT. ʻO ka mea nui ʻaʻole ia e hoʻonohonoho iā ia ma mua o 2 mau minuke no nā mīkini kiko.

Ke hana ʻana i kahi lawelawe

E neʻe kākou i ka hana ʻana i ka lawelawe i wehewehe ʻia. Ma ke kaʻina hana, e wehewehe hou wau i kekahi mau mea pono i ʻōlelo ʻole ʻia ma luna. Ma keʻano laulā, he ʻōlelo aʻo kēia i kēlā me kēia pae, akā ʻaʻole wau e noʻonoʻo i kekahi mau mea maʻamau a i ʻole, nā hihia kikoʻī loa. Hana ʻia nā hana a pau ma ka AWS visual console, akā hiki ke hana hou ʻia me ka hoʻohana ʻana i CloudFormation a i ʻole Terraform. Ma Adapty hoʻohana mākou iā Terraform.

EC2 Launch Template

Hana kēia lawelawe i kahi hoʻonohonoho o nā mīkini e hoʻohana ʻia. Hoʻokele ʻia nā templates ma ka EC2 -> Instances -> Launch templates section.

Kiʻi mīkini Amazon (AMI) - e kuhikuhi i ke kiʻi disk kahi e hoʻomaka ai nā manawa āpau. No ka ECS, i ka hapanui o nā hihia, pono e hoʻohana i ke kiʻi i hoʻopaʻa ʻia mai Amazon. Hoʻololi mau ʻia a loaʻa nā mea āpau e pono ai ka ECS e hana. No ka ʻike ʻana i ka ID kiʻi o kēia manawa, e hele i ka ʻaoʻao Nā AMI i hoʻopaʻa ʻia e Amazon ECS, koho i ka ʻāina āu e hoʻohana nei a kope i ka AMI ID no ia mea. No ka laʻana, no ka ʻāina us-hikina-1, ʻo ka ID o kēia manawa i ka manawa kākau ami-00c7c1cf5bdc913ed. Pono e hoʻokomo ʻia kēia ID i loko o ka Specify a custom value item.

ʻAno hoʻohālike - hōʻike i ke ʻano o ke ʻano. E koho i ka mea i kūpono i kāu hana.

Pākuʻi kī (ʻeʻe) - e kuhikuhi i kahi palapala e hiki ai iā ʻoe ke hoʻopili i ka laʻana ma o SSH, inā pono.

Nā hoʻonohonoho pūnaewele - e kuhikuhi i nā ʻāpana pūnaewele. Paena pūnaewele ma ka hapanui o na hihia, pono e loaa he Virtual Private Cloud (VPC). Nā hui palekana - nā hui palekana no kāu mau hihia. No ka mea e hoʻohana mākou i kahi mea kaulike i mua o nā manawa, paipai wau e kuhikuhi i kahi hui ma aneʻi e ʻae i nā pilina komo mai ka mea kaulike wale nō. ʻO ia hoʻi, e loaʻa iā ʻoe nā pūʻulu palekana 2, hoʻokahi no ka mea kaulike, e hiki ai i nā pilina inbound mai nā wahi āpau ma nā awa 80 (http) a me 443 (https), a ʻo ka lua no nā mīkini, e ʻae ai i nā pilina komo ma nā awa mai ka hui kaulike. . Pono e wehe ʻia nā pilina i waho ma nā pūʻulu ʻelua me ka hoʻohana ʻana i ka protocol TCP i nā awa āpau i nā helu helu āpau. Hiki iā ʻoe ke kaupalena i nā awa a me nā helu wahi no nā pili i waho, akā pono ʻoe e nānā mau ʻaʻole ʻoe e hoʻāʻo e komo i kekahi mea ma kahi awa paʻa.

Waihona (nui) - e kuhikuhi i nā ʻāpana diski no nā mīkini. ʻAʻole hiki ke emi ka nui o ka disk ma mua o ka mea i kuhikuhi ʻia ma ka AMI; no ka ECS Optimized ʻo 30 GiB.

Nā kikoʻī kiʻekiʻe - e kuhikuhi i nā ʻāpana ʻē aʻe.

Koho kūʻai - inā makemake mākou e kūʻai i nā manawa kiko. Makemake mākou, akā ʻaʻole mākou e nānā i kēia pahu ma ʻaneʻi; e hoʻonohonoho mākou iā ia i ka Auto Scaling Group, aia nā koho hou aʻe ma laila.

Hōʻike hōʻike IAM - hōʻike i ke kuleana e hoʻomaka ai nā hihia. I mea e holo ai nā manawa ma ECS, pono lākou i nā ʻae, i loaʻa maʻamau i ka hana ecsInstanceRole. I kekahi mau mea hiki ke hana ʻia, inā ʻaʻole, a laila ma aneʻi manual pehea e hana ai i keia. Ma hope o ka hana ʻana, hōʻike mākou iā ia i ka template.
Ma hope aʻe he nui nā ʻāpana, hiki iā ʻoe ke waiho i nā waiwai paʻamau ma nā wahi āpau, akā loaʻa i kēlā me kēia o lākou kahi wehewehe wehewehe. Hiki iaʻu ke hoʻohana mau i nā koho EBS-optimized a me T2/T3 Unlimited inā hoʻohana ʻia hikiwawe nā manawa.

ʻIkepili mea hoʻohana - hōʻike i ka ʻikepili mea hoʻohana. E hoʻoponopono mākou i ka faila /etc/ecs/ecs.config, i loaʻa i ka hoʻonohonoho ʻelele ECS.
He laʻana o ke ʻano o ka ʻikepili mea hoʻohana:

#!/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 - ke hōʻike nei ka ʻāpana i ka hui pū me ka inoa i hāʻawi ʻia, ʻo ia hoʻi, hiki i kēia pūʻulu ke kau i kāna mau hana ma kēia kikowaena. ʻAʻole mākou i hana i kahi hui, akā e hoʻohana mākou i kēia inoa i ka wā e hana ai.

ECS_ENABLE_SPOT_INSTANCE_DRAINING=true - ke kuhikuhi nei ka palena i ka wā e loaʻa ai kahi hōʻailona e hoʻopau i kahi laʻana, pono e hoʻoneʻe ʻia nā hana a pau i ke kūlana Draining.

ECS_CONTAINER_STOP_TIMEOUT=1m - ke kuhikuhi nei ka palena ma hope o ka loaʻa ʻana o kahi hōʻailona SIGINT, loaʻa nā hana āpau i 1 mau minuke ma mua o ka pepehi ʻia ʻana.

ECS_ENGINE_AUTH_TYPE=docker - ke hōʻike nei ka ʻāpana e hoʻohana ʻia ka hoʻolālā Docker ma ke ʻano he mana ʻae

ECS_ENGINE_AUTH_DATA=... - nā ʻāpana pili i ka waihona waihona pahu pilikino, kahi i mālama ʻia ai kāu mau kiʻi Docker. Inā he lehulehu, a laila ʻaʻole pono ʻoe e kuhikuhi i kekahi mea.

No nā kumu o kēia ʻatikala, e hoʻohana wau i kahi kiʻi ākea mai Docker Hub, no laila e kuhikuhi i nā ʻāpana ECS_ENGINE_AUTH_TYPE и ECS_ENGINE_AUTH_DATA ʻaʻohe pono.

Maikaʻi eʻike: Manaʻo ʻia e hoʻohou i ka AMI i nā manawa a pau, no ka mea, hoʻopau nā mana hou i nā mana o Docker, Linux, ECS agent, etc. No ka poina ʻole i kēia, hiki iā ʻoe ke hoʻonohonoho i nā leka hoʻomaopopo e pili ana i ka hoʻokuʻu ʻana i nā mana hou. Hiki iā ʻoe ke loaʻa nā leka hoʻomaopopo ma ka leka uila a me ka hoʻopou ma ka lima, a i ʻole hiki iā ʻoe ke kākau i kahi hana Lambda e hana aunoa i kahi mana hou o Launch Template me kahi AMI hou.

EC2 Pūʻulu Scaling Auto

Na ka Auto Scaling Group ke kuleana no ka hoʻomaka ʻana a me ka hoʻonui ʻana i nā manawa. Mālama ʻia nā pūʻulu ma ka ʻāpana EC2 -> Auto Scaling -> Auto Scaling Groups.

Hoʻokuʻu i ka laʻana - koho i ke kumu hoʻohālike i hana ʻia ma ka pae mua. Haʻalele mākou i ka mana paʻamau.

Nā koho kūʻai a me nā ʻano hiʻohiʻona - e kuhikuhi i nā ʻano o nā manawa no ka hui. E hoʻohana i ke ʻano hoʻohālike mai ka Launch Template. Hoʻohui i nā koho kūʻai a me nā ʻano mea hiki iā ʻoe ke hoʻonohonoho maʻalahi i nā ʻano hiʻohiʻona. E hoʻohana mākou.

Koho ma ke noi kumu - ka helu o nā manawa maʻamau, ʻaʻohe kiko e hana mau.

Pākēneka ma luna o ke kumu - ka pākēneka o nā manawa maʻamau a me nā wahi kiko, 50-50 e puʻunaue like, 20-80 no kēlā me kēia manawa maʻamau e hoʻonui ʻia 4 mau wahi. No nā kumu o kēia hiʻohiʻona, e hōʻike wau i ka 50-50, akā i ka ʻoiaʻiʻo, hana pinepine mākou i 20-80, i kekahi mau manawa 0-100.

ʻAno hoʻohālike - ma aneʻi hiki iā ʻoe ke kuhikuhi i nā ʻano ʻano like ʻole e hoʻohana ʻia i ka hui. ʻAʻole mākou i hoʻohana no ka mea ʻaʻole maopopo iaʻu ke ʻano o ka moʻolelo. Malia paha ma muli o nā palena o nā ʻano ʻano kikoʻī, akā hiki ke maʻalahi ke hoʻonui ʻia ma o ke kākoʻo. Inā ʻike ʻoe i ka noi, e hauʻoli wau e heluhelu iā ia ma nā ʻōlelo)

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

Leakaʻaʻike — nā hoʻonohonoho pūnaewele, koho i ka VPC a me nā subnets no nā mīkini, i ka nui o nā hihia pono ʻoe e koho i nā subnets āpau i loaʻa.

Load kaulike - nā hoʻonohonoho kaulike, akā e hana mākou i kēia kaʻawale, ʻaʻole mākou e hoʻopā i kekahi mea ma aneʻi. Nānā olakino e hoʻonohonoho ʻia ma hope.

Pēlā ʻāpana - hōʻike mākou i nā palena i ka helu o nā mīkini i ka hui a me ka nui o nā mīkini i makemake ʻia i ka hoʻomaka. ʻAʻole e emi iho ka nui o nā mīkini i loko o ka puʻupuʻu ma mua o ka palena liʻiliʻi i ʻōlelo ʻia a ʻoi aku ka nui ma mua o ka nui, ʻoiai inā e hana ʻia ka scaling e like me nā ana.

Nā kulekele hoʻonui - nā ʻāpana scaling, akā e hoʻonui mākou e pili ana i nā hana ECS e holo nei, no laila e hoʻonohonoho mākou i ka scaling ma hope.

Ka pale ʻana i ka scale-in - ka pale ʻana i nā manawa mai ka holoi ʻana i ka wā e hōʻemi ana i lalo. Hāʻawi mākou iā ia i ʻole e holoi ʻo ASG i ka mīkini e holo ana nā hana. E hoʻopau ka ECS Capacity Provider i ka pale no nā manawa ʻaʻohe hana.

Hoʻohui i nā hōʻailona - hiki iā ʻoe ke kuhikuhi i nā hōʻailona no nā manawa (no kēia, pono e nānā ʻia ka pahu pahu Tag hou. Manaʻo wau e kuhikuhi i ka inoa inoa, a laila ʻo nā manawa āpau i hoʻokuʻu ʻia i loko o ka hui e loaʻa ka inoa like, a maʻalahi ke nānā iā lākou i ka console.

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

Ma hope o ka hana ʻana i ka hui, wehe iā ia a hele i ka ʻāpana Advanced configurations No ke aha ʻaʻole ʻike ʻia nā koho āpau i ka console ma ke kahua hana.

Nā kulekele hoʻopau - nā lula i mālama ʻia i ka wā e holoi ai i nā manawa. Hoʻohana ʻia lākou ma ke ʻano. Hoʻohana maʻamau mākou i nā mea ma ke kiʻi ma lalo nei. ʻO ka mea mua, holoi ʻia nā mea me ka Laimana Launch kahiko loa (no ka laʻana, inā mākou i hōʻano hou i ka AMI, hana mākou i kahi mana hou, akā hiki i nā manawa āpau ke hoʻololi iā ia). A laila koho ʻia nā manawa kokoke loa i ka hola hoʻolimalima e hiki mai ana. A laila koho ʻia nā mea kahiko ma muli o ka lā hoʻomaka.

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

Maikaʻi eʻike: e hoʻonui i nā mīkini a pau i loko o kahi hui, kūpono e hoʻohana Hōʻano hou. Inā hoʻohui ʻoe i kēia me ka hana Lambda mai ka ʻanuʻu mua, e loaʻa iā ʻoe kahi ʻōnaehana hōʻano hou. Ma mua o ka hoʻonui ʻana i nā mīkini a pau, pono ʻoe e hoʻopau i ka pale ʻana i ka scale-in no nā manawa āpau i ka hui. ʻAʻole hoʻonohonoho i ka hui, akā pale mai nā mīkini ponoʻī, hana ʻia kēia ma ka pā hoʻokele Instance.

Noi Load Balancer a me EC2 Target Group

Hoʻokumu ʻia ka mea kaulike ma ka ʻāpana EC2 → Load Balancing → Load Balancers. E hoʻohana mākou i ka Application Load Balancer; hiki ke heluhelu ʻia kahi hoʻohālikelike o nā ʻano kaulike like ʻole ʻaoʻao lawelawe.

Nā mea hoʻolohe - kūpono ke hana i nā awa 80 a me 443 a hoʻihoʻi hou mai 80 a 443 me ka hoʻohana ʻana i nā lula kaulike ma hope.

Nā Wā loaʻa - ma ka hapanui o nā hihia, koho mākou i nā ʻāpana hiki i kēlā me kēia kanaka.

E hoʻonohonoho i nā hoʻonohonoho palekana - ua hōʻike ʻia ka palapala SSL no ka mea kaulike ma aneʻi, ʻo ka koho kūpono loa hana i palapala ma ACM. E pili ana i nā ʻokoʻa Kulekele palekana hiki ke heluhelu ma palapala, hiki iā ʻoe ke waiho iā ia i koho ʻia ma ka paʻamau ELBSecurityPolicy-2016-08. Ma hope o ka hana ʻana i ka mea kaulike, e ʻike ʻoe Inoa DNS, pono ʻoe e hoʻonohonoho i ka CNAME no kāu kikowaena. No ka laʻana, penei ke ʻano o Cloudflare.

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

Pūʻulu palekana - hana a koho paha i kahi hui palekana no ka mea kaulike, ua kākau hou wau e pili ana i kēia ma luna o ka EC2 Launch Template → Network settings section.

Pūʻulu kūlana - hana mākou i kahi hui i kuleana no ka hoʻokele ʻana i nā noi mai ka mea kaulike i nā mīkini a nānā i ko lākou loaʻa ʻana i mea e pani ai iā lākou inā pilikia. ʻAno pahuhopu pono ke Instance, Hōʻoia и ʻO Port kekahi, inā ʻoe e hoʻohana i ka HTTPS no ke kamaʻilio ma waena o ka mea kaulike a me nā manawa, pono ʻoe e hoʻouka i kahi palapala hōʻoia iā lākou. No nā kumu o kēia hiʻohiʻona, ʻaʻole mākou e hana i kēia, e haʻalele wale mākou i ke awa 80.

Nānā olakino - nā ʻāpana no ka nānā ʻana i ka hana o ka lawelawe. Ma kahi lawelawe maoli, pono kēia he noi kaʻawale e hoʻokō i nā ʻāpana koʻikoʻi o ka loiloi ʻoihana; no ke kumu o kēia hiʻohiʻona, e haʻalele wau i nā hoʻonohonoho paʻamau. Ma hope aʻe, hiki iā ʻoe ke koho i ka manawa noi, ka manawa pau, nā code kūleʻa, a me nā mea ʻē aʻe. Ma kā mākou laʻana, e hōʻike mākou i nā code Success 200-399, no ka mea, ʻo ke kiʻi Docker e hoʻohana ʻia e hoʻihoʻi i kahi code 304.

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

Hoʻopaʻa inoa i nā pahuhopu - ma ʻaneʻi ua koho ʻia nā kaʻa no ka hui, akā i kā mākou hihia e hana ʻia kēia e ECS, no laila e hoʻokuʻu wale mākou i kēia kaʻina.

Maikaʻi eʻike: ma ka pae kaulike hiki iā ʻoe ke hoʻohana i nā lāʻau e mālama ʻia ma S3 i kekahi hōʻano. Mai laila mai hiki ke lawe ʻia aku i nā lawelawe ʻaoʻao ʻekolu no ka analytics, a i ʻole hiki iā ʻoe ke hana pololei i nā nīnau SQL ma ka ʻikepili ma S3 me hoʻohana iā Athena. He mea maʻalahi a hana ʻole me ke code hou. Manaʻo wau e hoʻonohonoho i ka wehe ʻana i nā lāʻau mai ka pā S3 ma hope o kahi manawa i ʻōlelo ʻia.

Wehewehe Hana ECS

Ma nā ʻanuʻu mua, ua hana mākou i nā mea āpau e pili ana i ka ʻoihana lawelawe; i kēia manawa ke neʻe nei mākou i ka wehewehe ʻana i nā ipu a mākou e hoʻomaka ai. Hana ʻia kēia ma ka ʻāpana ECS → Task Definitions.

Hoʻokuʻu ʻano like - koho iā EC2.

Hana IAM hana - koho ecsTaskExecutionRole. Ke hoʻohana nei, ua kākau ʻia nā lāʻau, hāʻawi ʻia ke komo i nā ʻano huna, etc.

Ma ka ʻaoʻao wehewehe ʻo Container, kaomi i ka Add Container.

Image - loulou i ke kiʻi me ke code papahana; no kēia laʻana e hoʻohana wau i kahi kiʻi lehulehu mai Docker Hub bitnami/node-example:0.0.1.

Nā palena hoʻomanaʻo - nā palena hoʻomanaʻo no ka ipu. palena paakiki - ka palena paʻakikī, inā hele ka ipu ma mua o ka waiwai i kuhikuhi ʻia, e hoʻokō ʻia ke kauoha pepehi docker, e make koke ka ipu. Palena palupalu - ka palena palupalu, hiki i ka ipu ke hele ma mua o ka waiwai i kuhikuhi ʻia, akā e noʻonoʻo ʻia kēia ʻāpana i ka wā e kau ai i nā hana ma nā mīkini. No ka laʻana, inā loaʻa i kahi mīkini he 4 GiB o RAM, a ʻo ka palena palupalu o kahi pahu he 2048 MiB, a laila hiki i kēia mīkini ke loaʻa i ka nui o 2 mau hana holo me kēia pahu. I ka ʻoiaʻiʻo, ʻoi aku ka liʻiliʻi o 4 GiB o RAM ma mua o 4096 MiB, hiki ke ʻike ʻia kēia ma ka ECS Instances tab i ka hui. ʻAʻole hiki ke ʻoi aku ka palena palupalu ma mua o ka palena paʻakikī. He mea nui e hoʻomaopopo inā he nui nā pahu i hoʻokahi hana, a laila e hōʻuluʻulu ʻia ko lākou mau palena.

Palapala palapala awa - ma awa hookipa Hōʻike mākou i ka 0, ʻo ia hoʻi, e hāʻawi ʻia ke awa me ka ikaika a nānā ʻia e ka Pūʻulu Target. Awa pahu — ʻO ke awa kahi e holo ai kāu noi e kuhikuhi pinepine ʻia ma ke kauoha hoʻokō, a i hāʻawi ʻia i kāu code noi, Dockerfile, etc. No kā mākou laʻana e hoʻohana mākou i 3000 no ka mea ua helu ʻia i loko dockerfile ke kiʻi e hoʻohana ʻia nei.

Nānā olakino - nā ʻāpana nānā olakino pahu, ʻaʻole e huikau me ka mea i hoʻonohonoho ʻia i ka Pūʻulu Target.

'ia - hoʻonohonoho kaiapuni. ʻāpana CPU - like me nā palena hoʻomanaʻo, e pili ana i ka mea hana. He 1024 mau ʻāpana kēlā me kēia kaʻina hana, no laila inā loaʻa i ka server kahi mea hana ʻelua-core a hoʻonohonoho ʻia ka pahu i 512, a laila hiki ke hoʻokuʻu ʻia nā hana 4 me kēia ipu ma hoʻokahi kikowaena. Pili mau nā ʻāpana CPU i ka helu o nā cores; ʻaʻole hiki ke emi iki o lākou, e like me ka hoʻomanaʻo.

E kauoha aku - he kauoha e hoʻomaka i kahi lawelawe i loko o kahi pahu, ua hoʻokaʻawale ʻia nā ʻāpana āpau e nā koma. Hiki i kēia ke gunicorn, npm, etc. Inā ʻaʻole i kuhikuhi ʻia, e hoʻohana ʻia ka waiwai o ke kuhikuhi CMD mai ka Dockerfile. Hōʻike mākou npm,start.

Nā hoʻololi kaiapuni - nā mea hoʻololi kaiapuni ipu. Hiki paha kēia i nā ʻikepili kikokikona maʻalahi a i ʻole nā ​​mea hoʻololi huna mai Luna Hoomalu ai ole ia, Hale Kuai Lahui.

Hoʻopaʻa a me ka hoʻopaʻa inoa - eia mākou e hoʻonohonoho i ka hoʻopaʻa inoa ʻana ma CloudWatch Logs (kahi lawelawe no nā lāʻau mai AWS). No ka hana ʻana i kēia, hiki iā ʻoe ke hoʻololi i ka pahu hōʻoia Auto-configure CloudWatch Logs. Ma hope o ka hana ʻana i ka Definition Task, e hana ʻia kahi hui o nā lāʻau i CloudWatch. Ma ka maʻamau, mālama ʻia nā lāʻau i loko o ka manawa pau ʻole; Manaʻo wau e hoʻololi i ka manawa Paʻa mai Never Expire i ka manawa i koi ʻia. Hana ʻia kēia ma nā hui CloudWatch Log, pono ʻoe e kaomi i ka manawa o kēia manawa a koho i kahi hou.

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

ECS Cluster a me ka ECS Capacity Provider

E hele i ka ʻāpana ECS → Clusters e hana i kahi hui. Koho mākou i ka EC2 Linux + Networking ma ke ʻano hoʻohālike.

inoa hui - mea nui loa, hana mākou ma ʻaneʻi i ka inoa like e like me ka mea i ʻōlelo ʻia ma ka ʻāpana Launch Template ECS_CLUSTER, i kā mākou hihia - DemoApiClusterProd. E hoʻopaʻa i ka pahu hana hana pūʻulu hakahaka. ʻO ke koho, hiki iā ʻoe ke ʻae i ka Container Insights e nānā i nā metric no nā lawelawe ma CloudWatch. Inā hana pololei ʻoe i nā mea āpau, a laila ma ka ʻāpana ECS Instances e ʻike ʻoe i nā mīkini i hana ʻia ma ka hui Auto Scaling.

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

E hele i ka pā Nā mea hoʻolako hiki a hana i kahi hou. E hoʻomanaʻo wau iā ʻoe e pono e kāohi i ka hana ʻana a me ka pani ʻana i nā mīkini e pili ana i ka nui o nā hana ECS e holo nei. He mea nui e hoʻomaopopo he hiki ke hāʻawi ʻia kahi mea lawelawe i hoʻokahi hui.

Pūʻulu hoʻonui ʻakomi - koho i ka hui i hana mua ʻia.

Hoʻoponopono ʻia ka scaling - hiki iā ia ke hoʻonui i ka lawelawe.

% - he aha ka pakeneka o nā mīkini i hoʻouka ʻia me nā hana e pono ai mākou. Inā ʻoe e kuhikuhi i ka 100%, a laila e paʻa mau nā mīkini āpau i nā hana holo. Inā ʻoe e kuhikuhi i ka 50%, a laila e manuahi mau ka hapalua o nā kaʻa. I kēia hihia, inā he lele ʻoi loa i ka ukana, e hele koke nā kaʻa kaʻa hou i nā kaʻa manuahi, me ka ʻole o ka kali ʻana i nā manawa e kau ʻia.

Mālama ʻia ka hoʻopau ʻana — hiki, ʻae kēia ʻāpana i ka mea hāʻawi e wehe i ka pale o nā manawa mai ka holoi ʻana. Hana ʻia kēia inā ʻaʻohe hana ʻeleu ma ka mīkini a hiki i ka mana Target%.

ʻO ka lawelawe ECS a me ka hoʻonohonoho ʻana i ka scaling

ʻO ka hana hope :) No ka hana ʻana i kahi lawelawe, pono ʻoe e hele i ka pūʻulu i hana mua ʻia ma ka pā Services.

ʻAno hoʻolana — Pono ʻoe e kaomi i ka Switch to capacity provider strategy a koho i nā mea hoʻolako i hana mua ʻia.

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

Wehewehe hana - koho i ka wehewehe hana i hana mua ʻia a me kāna hoʻoponopono.

Inoa inoa - no ka pale ʻana i ka huikau, hōʻike mau mākou i ka like me Task Definition.

ʻAno lawelawe - Hoʻopiʻi mau.

Ka helu o nā hana - ka helu i makemake ʻia o nā hana ikaika i ka lawelawe. Hoʻomalu ʻia kēia ʻāpana e ka scaling, akā pono e kuhikuhi ʻia.

ʻO ka pākēneka olakino liʻiliʻi и Ka hapa nui - hoʻoholo i ke ʻano o nā hana i ka wā e kau ai. ʻO 100 a me 200 ka helu paʻamau, e hōʻike ana i ka manawa o ka hoʻolālā e hoʻonui ʻia ka nui o nā hana, a laila hoʻi i ka waiwai i makemake ʻia. Inā loaʻa iā ʻoe 1 hana e holo nei, min = 0, a max = 100, a laila i ka wā o ke kau ʻana e pepehi ʻia ia, a ma hope o ia e hoʻāla ʻia kahi mea hou, ʻo ia hoʻi, ʻo ia ka downtime. Inā holo ka hana 1, min=50, max=150, a laila, ʻaʻole hiki ke hoʻoili ʻia, no ka mea ʻaʻole hiki ke puʻunaue ʻia ka hana 1 i ka hapalua a i ʻole hoʻonui ʻia i hoʻokahi manawa a me ka hapa.

ʻAno hoʻolālā - haʻalele Rolling update.

Nā Papa Hoʻokomo - nā lula no ka kau ʻana i nā hana ma nā mīkini. ʻO ka paʻamau ʻo AZ Balanced Spread - ʻo ia hoʻi, e kau ʻia kēlā me kēia hana hou i kahi manawa hou a hiki i ka piʻi ʻana o nā mīkini ma nā wahi āpau. Hana maʻamau mākou i BinPack - CPU a me Spread - AZ; me kēia kulekele, hoʻonoho ʻia nā hana e like me ka hiki ma ka mīkini hoʻokahi no CPU. Inā pono e hana i kahi mīkini hou, hana ʻia ia i kahi ʻāpana loaʻa hou.

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

ʻAno kaulike hoʻouka — koho i ka mea hoʻoili hoʻouka noi.

Hana IAM lawelawe - koho ecsServiceRole.

Hoʻouka inoa kaulike - koho i ka mea kaulike i hana mua ʻia.

ʻO ka manawa manawaleʻa nānā olakino - hoʻomaha ma mua o ka hana ʻana i nā loiloi olakino ma hope o ka ʻōwili ʻana i kahi hana hou, hoʻonohonoho maʻamau mākou i 60 kekona.

ʻO ka pahu e hoʻouka i ke kaulike - ma ka inoa o ka hui Target, koho i ka hui i hana mua ʻia, a e hoʻopiha ʻia nā mea āpau.

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

Hoʻohana ʻana i ka hoʻonui ʻana — nā ʻāpana hoʻohālikelike lawelawe. E koho i ka Configure Service Auto Scaling e hoʻololi i ka helu makemake o kāu lawelawe. Hoʻonoho mākou i ka helu haʻahaʻa a me ka nui o nā hana i ka wā e hoʻonui ai.

ʻO ke kuleana IAM no ka Service Auto Scaling - koho AWSServiceRoleForApplicationAutoScaling_ECSService.

Nā kulekele hoʻonui ʻakomi hana - nā lula no ka hoʻonui ʻana. Aia nā ʻano ʻelua:

  1. Ka hoʻopaʻa ʻana - ka nānā ʻana i nā metric target (hoʻohana CPU/RAM a i ʻole ka helu o nā noi no kēlā me kēia hana). No ka laʻana, makemake mākou i ka 85% o ka ukana awelika, i ka wā e piʻi aʻe ai, e hoʻohui ʻia nā hana hou a hiki i ke kumu waiwai. Inā haʻahaʻa ka haʻahaʻa, a laila e hoʻoneʻe ʻia nā hana, ma kahi ʻē aʻe, ke ʻole ka pale ʻana i ka scaling i lalo (Hoʻopau i ka pālākiō-i).
  2. Hoʻonui ʻanuʻu - ka pane ʻana i kahi hanana kūʻokoʻa. Maanei hiki iā ʻoe ke hoʻonohonoho i kahi pane i kekahi hanana (CloudWatch Alarm), i ka wā e hiki mai ai, hiki iā ʻoe ke hoʻohui a wehe paha i ka helu o nā hana, a i ʻole e kuhikuhi i ka helu pololei o nā hana.

Hiki i kahi lawelawe ke loaʻa i kekahi mau lula scaling, hiki ke hoʻohana ʻia, ʻo ka mea nui e hōʻoia i ka hakakā ʻole kekahi i kekahi.

hopena

Inā hahai ʻoe i nā ʻōlelo kuhikuhi a hoʻohana i ke kiʻi Docker like, pono kāu lawelawe e hoʻihoʻi i kahi ʻaoʻao e like me kēia.

Ke kūkulu ʻana i kahi API Scalable ma nā AWS Spot Instances

  1. Ua hana mākou i kahi mamana e like me ka hoʻomaka ʻana o nā mīkini a pau i ka lawelawe. Ua aʻo pū mākou i ka hoʻonui ʻana i nā mīkini ke loli ke ʻano.
  2. Ua hoʻonohonoho mākou i ka hana ʻana i ka hōʻailona hoʻomaha wahi, no laila i loko o hoʻokahi minuke ma hope o ka loaʻa ʻana, ua hoʻopau ʻia nā hana holo a pau mai ka mīkini, no laila ʻaʻohe mea i nalowale a keakea.
  3. Hoʻokiʻekiʻe mākou i ka mea kaulike e puʻunaue like i ka ukana ma waena o nā mīkini.
  4. Ua hana mākou i kahi lawelawe e holo ana ma nā manawa kiko, e hōʻemi ana i nā kumukūʻai mīkini ma kahi o 3 mau manawa.
  5. Ua hoʻonohonoho mākou i ka autoscaling ma nā ʻaoʻao ʻelua no ka mālama ʻana i nā haʻahaʻa haʻahaʻa me ka ʻole o ka loaʻa ʻana o nā kumukūʻai downtime.
  6. Hoʻohana mākou i ka Capacity Provider i mea e hoʻokele ai ka noi i nā ʻōnaehana (mīkini) a ʻaʻole ke ala ʻē aʻe.
  7. Nui mākou.

Inā loaʻa iā ʻoe nā spikes hiki ke wānana i ka ukana, no ka laʻana ke hoʻolaha nei ʻoe i kahi hoʻolaha leka uila nui, hiki iā ʻoe ke hoʻonohonoho i ka scaling e papa manawa.

Hiki iā ʻoe ke hoʻonui ma muli o ka ʻikepili mai nā ʻāpana like ʻole o kāu ʻōnaehana. No ka laʻana, loaʻa iā mākou ka hana ka hoʻouna ʻana i nā makana hoʻolaha pākahi mea hoʻohana o ka polokalamu kelepona. I kekahi manawa hoʻouna ʻia kahi hoʻolaha i 1M+ poʻe. Ma hope o ka hāʻawi ʻana, aia ka piʻi nui o nā noi i ka API, no ka mea he nui nā mea hoʻohana i komo i ka noi i ka manawa like. No laila inā ʻike mākou he ʻoi aku ka nui o nā hōʻailona maʻamau i ka pila no ka hoʻouna ʻana i nā leka hoʻolaha hoʻolaha, hiki iā mākou ke hoʻomaka koke i nā mīkini hou a me nā hana e mākaukau no ka ukana.

E hauʻoli wau inā ʻoe e haʻi mai iaʻu i nā ʻōlelo i nā hihia hoihoi o ka hoʻohana ʻana i nā manawa kiko a me ECS a i ʻole kekahi mea e pili ana i ka scaling.

ʻAʻole koke e loaʻa nā ʻatikala e pili ana i ke ʻano o kā mākou hana ʻana i nā kaukani hanana analytical i kēlā me kēia kekona ma kahi kikowaena serverless (me ke kālā) a me ke ʻano o ka hana ʻana o nā lawelawe me ka hoʻohana ʻana iā GitLab CI a me Terraform Cloud.

E kau inoa iā mākou, e hoihoi ia!

Hiki i nā mea hoʻohana i hoʻopaʻa inoa ʻia ke komo i ka noiʻi. Eʻe, e 'oluʻolu.

Ke hoʻohana nei ʻoe i nā hiʻohiʻona wahi i ka hana ʻana?

  • 22,2%ʻAe6

  • 66,7%ʻAʻole18

  • 11,1%Ua aʻo au e pili ana iā lākou mai kahi ʻatikala a hoʻolālā e hoʻohana iā lākou3

27 mea hoʻohana i koho. Ua hōʻole nā ​​mea hoʻohana 5.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka