Сохтани API-и миқёспазир дар мисолҳои AWS Spot

Салом ба ҳама! Номи ман Кирилл, ман CTO дар Adapty ҳастам. Аксари меъмории мо дар AWS ҷойгир аст ва имрӯз ман дар бораи он сӯҳбат хоҳам кард, ки чӣ гуна мо бо истифода аз мисолҳои спот дар муҳити истеҳсолӣ хароҷоти серверро 3 маротиба кам кардем ва инчунин чӣ гуна танзим кардани автоматии онҳо. Аввалан шарҳи он, ки чӣ тавр кор мекунад, ва сипас дастурҳои муфассал барои оғоз.

Мисолҳои Spot чист?

Нуқта инстансияҳо серверҳои корбарони дигари AWS мебошанд, ки айни замон бекоранд ва онҳоро бо тахфифи калон мефурӯшанд (Amazon то 90% менависад, дар таҷрибаи мо ~ 3x, вобаста ба минтақа, AZ ва навъи инстансия фарқ мекунад). Фарқи асосии онҳо аз муқаррарӣ дар он аст, ки онҳо метавонанд дар вақти дилхоҳ хомӯш шаванд. Аз ин рӯ, муддати тӯлонӣ мо боварӣ доштем, ки истифодаи онҳо барои муҳитҳои бокира ё барои вазифаҳои ҳисобкунии чизе муқаррарӣ аст, бо натиҷаҳои мобайнӣ дар S3 ё дар пойгоҳи додаҳо захира карда мешаванд, аммо на барои фурӯш. Қарорҳои тарафи сеюм мавҷуданд, ки ба шумо имкон медиҳанд, ки доғҳоро дар истеҳсолот истифода баред, аммо барои парвандаи мо асобағолҳои зиёде мавҷуданд, бинобар ин мо онҳоро амалӣ накардаем. Равиши дар мақола тавсифшуда комилан дар доираи функсияҳои стандартии AWS бидуни скриптҳои иловагӣ, тоҷҳо ва ғайра кор мекунад.

Дар зер якчанд скриншотҳо мавҷуданд, ки таърихи нархҳоро барои мисолҳои спот нишон медиҳанд.

m5.калон дар минтақаи eu-west-1 (Ирландия). Нарх асосан дар давоми 3 моҳ мӯътадил буд ва ҳоло 2.9x сарфа мекунад.

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

m5.large дар минтақаи шарқии ИМА-1 (Н. Вирҷиния). Нарх дар тӯли 3 моҳ пайваста тағир меёбад ва дар айни замон вобаста ба минтақаи мавҷудият аз 2.3x то 2.8x сарфа мешавад.

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

t3.хурд дар минтакаи шарки-1 (Н. Виржиния). Нарх дар тӯли 3 моҳ мӯътадил буд ва ҳоло 3.4 маротиба сарфа мекунад.

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

Архитектураи хидматрасонӣ

Меъмории асосии хидмат, ки мо дар бораи ин мақола сӯҳбат хоҳем кард, дар диаграммаи зер нишон дода шудааст.

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

Тавозуни сарбории барнома → Гурӯҳи Ҳадафи EC2 → Хидмати контейнери эластики

Тавозуни сарбории барнома (ALB) ҳамчун мувозинат истифода мешавад, ки дархостҳоро ба Гурӯҳи Ҳадафи EC2 (TG) мефиристад. TG барои кушодани портҳо дар мисолҳо барои ALB ва пайваст кардани онҳо ба портҳои контейнерҳои Elastic Container Service (ECS) масъул аст. ECS як аналоги Kubernetes дар AWS мебошад, ки контейнерҳои Docker-ро идора мекунад.

Як мисол метавонад якчанд контейнерҳои коркунанда бо портҳои якхела дошта бошад, аз ин рӯ мо наметавонем онҳоро собит танзим кунем. ECS ба TG мегӯяд, ки он як вазифаи навро оғоз мекунад (дар истилоҳоти Kubernetes ин подк номида мешавад), он портҳои ройгонро дар инстансия тафтиш мекунад ва яке аз онҳоро ба вазифаи оғозшуда таъин мекунад. TG инчунин мунтазам тафтиш мекунад, ки оё инстансия ва API дар он бо истифодаи санҷиши саломатӣ кор мекунанд ва агар ягон мушкилотро бинад, фиристодани дархостҳоро ба он ҷо қатъ мекунад.

Гурӯҳҳои миқёси худкори EC2 + Таъминкунандагони иқтидори ECS

Диаграммаи боло хидмати EC2 Auto Scaling Groups (ASG) -ро нишон намедиҳад. Аз ном шумо метавонед фаҳмед, ки он барои миқёси мисолҳо масъул аст. Аммо, то ба наздикӣ, AWS қобилияти дарунсохт барои идора кардани шумораи мошинҳои коркунанда аз ECS надошт. ECS имкон дод, ки шумораи вазифаҳо, масалан, аз рӯи истифодаи CPU, RAM ё шумораи дархостҳо миқёси калон дода шавад. Аммо агар вазифаҳо ҳама ҳолатҳои ройгонро ишғол мекарданд, он гоҳ мошинҳои нав ба таври худкор эҷод карда намешаванд.

Ин бо пайдоиши ECS Capacity Providers (ECS CP) тағйир ёфт. Акнун ҳар як хидмат дар ECS метавонад бо ASG алоқаманд бошад ва агар вазифаҳо ба мисолҳои иҷрошаванда мувофиқат накунанд, пас хидматҳои нав бардошта мешаванд (вале дар ҳудуди муқарраршудаи ASG). Ин инчунин ба самти муқобил кор мекунад, агар ECS CP мисолҳои бекориро бе вазифаҳо бубинад, он гоҳ ба ASG фармон медиҳад, ки онҳоро хомӯш кунад. ECS CP қобилияти муайян кардани фоизи мақсадноки боркунии мисолро дорад, то шумораи муайяни мошинҳо ҳамеша барои миқёси тези вазифаҳо озод бошанд; Ман дар ин бора каме дертар сӯҳбат хоҳам кард.

Шаблонҳои оғози EC2

Хидмати охирине, ки ман пеш аз муфассал дар бораи эҷоди ин инфрасохтор дар бораи он сӯҳбат хоҳам кард, ин EC2 Launch Templates мебошад. Он ба шумо имкон медиҳад, ки қолаберо созед, ки мувофиқи он ҳама мошинҳо оғоз мешаванд, то ҳар дафъа ин корро аз сифр такрор накунед. Дар ин ҷо шумо метавонед навъи мошинро барои оғозёбӣ, гурӯҳи амниятӣ, тасвири диск ва бисёр параметрҳои дигар интихоб кунед. Шумо инчунин метавонед маълумоти корбарро муайян кунед, ки ба ҳама ҳолатҳои оғозшуда бор карда мешаванд. Шумо метавонед скриптҳоро дар маълумоти корбар иҷро кунед, масалан, шумо метавонед мундариҷаи файлро таҳрир кунед Конфигуратсияҳои агенти ECS.

Яке аз муҳимтарин параметрҳои конфигуратсия барои ин мақола аст ECS_ENABLE_SPOT_INSTANCE_DRAINING=дуруст. Агар ин параметр фаъол бошад, пас, вақте ки ECS сигналеро мегирад, ки инстансияи нуқтаро гирифта истодааст, он тамоми вазифаҳоеро, ки дар он кор мекунанд, ба ҳолати Дренаж интиқол медиҳад. Ба ин мисол ягон вазифаи нав таъин карда намешавад; агар вазифаҳое вуҷуд дошта бошанд, ки ҳозир ба он иҷро кардан мехоҳанд, онҳо бекор карда мешаванд. Дархостҳо аз мувозинат низ омаданро қатъ мекунанд. Огоҳӣ дар бораи нест кардани мисол 2 дақиқа пеш аз ҳодисаи воқеӣ меояд. Аз ин рӯ, агар хидмати шумо вазифаҳоро аз 2 дақиқа зиёд иҷро накунад ва ҳеҷ чизро дар диск захира накунад, шумо метавонед мисолҳои спотро бе гум кардани маълумот истифода баред.

Дар бораи диск - AWS ба наздикӣ кор кард Якҷоя бо ECS системаи файлии эластикиро (EFS) истифода бурдан мумкин аст; бо ин схема ҳатто диск монеа нест, аммо мо ин корро накардем, зеро аслан барои нигоҳ доштани ҳолати диск ба мо лозим нест. Бо нобаёнӣ, пас аз гирифтани SIGINT (ҳангоми интиқол додани супориш ба ҳолати Дренаж фиристода мешавад), ҳама вазифаҳои иҷрошаванда пас аз 30 сония қатъ карда мешаванд, ҳатто агар онҳо ҳанӯз ба анҷом нарасидаанд; шумо метавонед ин вақтро бо истифода аз параметр тағир диҳед ECS_CONTAINER_STOP_TIMEAUT. Чизи асосиаш он аст, ки онро барои мошинҳои спот бештар аз 2 дақиқа муқаррар накунед.

Эҷоди хидмат

Биёед ба эҷоди хидмати тавсифшуда гузарем. Дар ин раванд, ман ба таври иловагӣ якчанд нуктаҳои муфидро тавсиф мекунам, ки дар боло зикр нашудаанд. Умуман, ин дастури қадам ба қадам аст, аммо ман баъзе ҳолатҳои хеле асосӣ ва ё баръакс, хеле мушаххасро баррасӣ намекунам. Ҳама амалҳо дар консоли визуалии AWS иҷро мешаванд, аммо онҳоро метавон ба таври барномавӣ бо истифода аз CloudFormation ё Terraform дубора тавлид кард. Дар Adapty мо Terraform-ро истифода мебарем.

Шаблони оғози EC2

Ин хидмат конфигуратсияи мошинҳоеро, ки истифода мешаванд, эҷод мекунад. Шаблонҳо дар бахши EC2 -> Мисолҳо -> Оғози қолибҳо идора карда мешаванд.

Тасвири мошини Amazon (AMI) — тасвири дискро муайян кунед, ки бо он ҳамаи инстансияҳо оғоз карда мешаванд. Барои ECS, дар аксари ҳолатҳо истифодаи тасвири оптимизатсияшуда аз Амазонка меарзад. Он мунтазам нав карда мешавад ва ҳама чизро барои кор кардани ECS дар бар мегирад. Барои дарёфти ID-и тасвири ҷорӣ, ба саҳифа равед AMI-ҳои Amazon ECS оптимизатсияшуда, минтақаеро, ки шумо истифода мебаред, интихоб кунед ва ID-и AMI-ро барои он нусхабардорӣ кунед. Масалан, барои минтақаи шарқии мо-1, ID-и ҷорӣ дар вақти навиштан аст ami-00c7c1cf5bdc913ed. Ин идентификатор бояд ба банди "Муайян кардани арзиши фармоишӣ" ворид карда шавад.

Навъи мисол — навъи мисолро нишон диҳед. Якеро интихоб кунед, ки ба вазифаи шумо беҳтарин мувофиқат кунад.

Ҷуфти калид (ворид) — сертификатеро муайян кунед, ки агар лозим бошад, бо он шумо метавонед ба инстансия тавассути SSH пайваст шавед.

Танзимоти шабака — параметрҳои шабакаро муайян кунед. Платформаи шабакавӣ дар аксари мавридҳо бояд абри хусусии виртуалӣ (VPC) бошад. Гурӯҳҳои амниятӣ — гурӯҳҳои амниятӣ барои мисолҳои шумо. Азбаски мо дар пеши мисолҳо мувозинатро истифода хоҳем кард, ман тавсия медиҳам, ки гурӯҳеро дар ин ҷо нишон диҳам, ки ба пайвастҳои воридотӣ танҳо аз мувозинат иҷозат диҳад. Яъне, шумо 2 гурӯҳи амниятӣ хоҳед дошт, яке барои мувозинат, ки имкон медиҳад пайвастҳои воридотӣ аз ҳама ҷо дар бандарҳои 80 (http) ва 443 (https) ва дуюм барои мошинҳо, ки имкон медиҳад пайвастҳои воридотӣ дар ҳама гуна портҳо аз гурӯҳи балансатор . Пайвастҳои содиротӣ дар ҳарду гурӯҳ бояд бо истифода аз протоколи TCP ба ҳамаи портҳо ба ҳама суроғаҳо кушода шаванд. Шумо метавонед портҳо ва суроғаҳоро барои пайвастҳои содиротӣ маҳдуд кунед, аммо пас шумо бояд доимо назорат кунед, ки шумо кӯшиши дастрасӣ ба чизе дар бандари пӯшида нестед.

Нигоҳдорӣ (ҳаҷм) — параметрҳои дискро барои мошинҳо муайян кунед. Андозаи диск наметавонад аз андозаи дар AMI муқарраршуда камтар бошад; барои ECS Optimized он 30 ГБ аст.

Тафсилоти пешрафта — параметрхои иловагиро муайян кунед.

Опсияи харид — оё мо мехоҳем, ки нусхаҳои спотро харем. Мо мехоҳем, аммо мо ин қуттиро дар ин ҷо тафтиш намекунем; мо онро дар Гурӯҳи Auto Scaling танзим мекунем, дар он ҷо имконоти бештар мавҷуданд.

Профили намунаи IAM — нақшеро, ки инстансияҳо бо он оғоз мешаванд, нишон диҳед. Барои он ки мисолҳо дар ECS кор кунанд, ба онҳо иҷозат лозим аст, ки одатан дар нақш пайдо мешаванд ecsInstanceRole. Дар баъзе мавридҳо онро метавон эҷод кард, агар не, пас дар ин ҷо дастур дар бораи чӣ тавр ин корро кардан. Пас аз эҷод, мо онро дар қолаб нишон медиҳем.
Дар оянда параметрҳои зиёде мавҷуданд, асосан шумо метавонед арзишҳои пешфарзро дар ҳама ҷо тарк кунед, аммо ҳар яки онҳо тавсифи равшан доранд. Агар истифода шавад, ман ҳамеша намунаи оптимизатсияи EBS ва имконоти T2/T3 Unlimited -ро фаъол мекунам тарканда ҳолатҳо.

Маълумоти корбар — нишон додани маълумоти корбар. Мо файлро таҳрир мекунем /etc/ecs/ecs.config, ки конфигуратсияи агенти ECS-ро дар бар мегирад.
Намунаи маълумоти корбар чӣ гуна буда метавонад:

#!/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 — параметр нишон медиҳад, ки инстансия ба кластер бо номи додашуда тааллуқ дорад, яъне ин кластер метавонад вазифаҳои худро дар ин сервер ҷойгир кунад. Мо то ҳол кластер эҷод накардаем, аммо ҳангоми сохтани он мо ин номро истифода хоҳем бурд.

ECS_ENABLE_SPOT_INSTANCE_DRAINING=true — параметр муайян мекунад, ки ҳангоми қабули сигнал барои хомӯш кардани мисоли спот, ҳамаи вазифаҳои он бояд ба ҳолати Draining интиқол дода шаванд.

ECS_CONTAINER_STOP_TIMEOUT=1m - параметр муайян мекунад, ки пас аз гирифтани сигнали SIGINT, ҳама вазифаҳо 1 дақиқа пеш аз кушта шудан доранд.

ECS_ENGINE_AUTH_TYPE=docker — параметр нишон медиҳад, ки схемаи Docker ҳамчун механизми иҷозатдиҳӣ истифода мешавад

ECS_ENGINE_AUTH_DATA=... — параметрҳои пайвастшавӣ ба феҳристи контейнерҳои хусусӣ, ки дар он тасвирҳои Docker-и шумо нигоҳ дошта мешаванд. Агар он оммавӣ бошад, пас ба шумо чизе муайян кардан лозим нест.

Барои мақсадҳои ин мақола, ман тасвири оммавиро аз Docker Hub истифода хоҳам кард, бинобар ин параметрҳоро муайян кунед ECS_ENGINE_AUTH_TYPE и ECS_ENGINE_AUTH_DATA лозим нест.

Хуб медонед: Тавсия дода мешавад, ки AMI-ро мунтазам нав кунед, зеро версияҳои нав версияҳои Docker, Linux, агенти ECS ва ғайраҳоро нав мекунанд. Барои фаромӯш накунед, ки шумо метавонед инро фаромӯш накунед. огоҳиҳоро танзим кунед дар бораи баровардани версияхои нав. Шумо метавонед огоҳиномаҳоро тавассути почтаи электронӣ қабул кунед ва ба таври дастӣ навсозӣ кунед, ё шумо метавонед функсияи Lambda нависед, ки ба таври худкор версияи нави Шаблонро бо AMI навсозӣ эҷод мекунад.

Гурӯҳи миқёси худкори EC2

Гурӯҳи Auto Scaling барои оғоз ва миқёси мисолҳо масъул аст. Гурӯҳҳо дар қисмати EC2 -> Миқёси худкор -> Гурӯҳҳои худкори миқёскунӣ идора карда мешаванд.

Шаблонро оғоз кунед — қолаби дар қадами қаблӣ сохташударо интихоб кунед. Мо версияи пешфарзро тарк мекунем.

Имкониятҳои харид ва намудҳои мисол — намудҳои мисолҳоро барои кластер муайян кунед. Риояи Шаблон барои оғозёбӣ навъи мисолро аз Шаблони оғозёбӣ истифода мебарад. Якҷоя кардани имконоти харид ва намудҳои намуна ба шумо имкон медиҳад, ки намудҳои намунаҳоро чандир танзим кунед. Мо онро истифода мебарем.

Пойгоҳи ихтиёрии Талабот — шумораи инстанцияхои доимй, бенуксон, ки хамеша кор мекунанд.

Фоизи аз рӯи талабот болотар аз база — таносуби фоизии инстанцияхои мукаррарй ва спотй, 50—50 баробар таксим карда мешавад, барои хар як намунаи мукаррарй 20—80 4 дона зиёд карда мешавад. Барои мақсадҳои ин мисол, ман 50-50-ро нишон медиҳам, аммо дар асл мо аксар вақт 20-80, дар баъзе мавридҳо 0-100 мекунем.

Намудҳои мисол — дар ин ҷо шумо метавонед намудҳои иловагии мисолҳоро, ки дар кластер истифода мешаванд, муайян кунед. Мо ҳеҷ гоҳ онро истифода набурдем, зеро ман маънои ҳикояро дарк намекунам. Шояд ин ба маҳдудиятҳои намудҳои мушаххаси мисолҳо вобаста бошад, аммо онҳоро тавассути дастгирӣ ба осонӣ зиёд кардан мумкин аст. Агар шумо барномаро медонед, ман бо хурсандӣ онро дар шарҳҳо хоҳам хонд)

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

шабакаи — танзимоти шабака, VPC ва зершабакаҳоро барои мошинҳо интихоб кунед, дар аксари ҳолатҳо шумо бояд ҳамаи зершабакаҳои дастрасро интихоб кунед.

Мувозинати бори - танзимоти мувозинат, аммо мо инро алоҳида иҷро мекунем, мо дар ин ҷо ба ҳеҷ чиз даст намерасонем. Санҷишҳои саломатӣ низ дертар танзим карда мешавад.

Андозаи гурӯҳ — мо лимити микдори мошинхоро дар кластер ва микдори дилхохи мошинхоро дар ибтидо нишон медихем. Шумораи мошинҳо дар кластер ҳеҷ гоҳ аз ҳадди ақали муқарраршуда камтар ва бештар аз ҳадди аксар нахоҳад буд, ҳатто агар миқёс мувофиқи ченакҳо сурат гирад.

Сиёсати миқёс — параметрҳои миқёс, аммо мо дар асоси вазифаҳои иҷрошудаи ECS миқёс мекунем, аз ин рӯ миқёсро дертар танзим мекунем.

Муҳофизати миқёси мисол — њифзи инстансияњо аз нестшавї њангоми кам кардани миќёс. Мо онро фаъол мекунем, то ASG мошинеро, ки вазифаҳои иҷрошаванда дорад, нест накунад. ECS Capacity Provider муҳофизатро барои мисолҳое, ки вазифа надоранд, ғайрифаъол мекунад.

Иловаи барчаспҳо — шумо метавонед барчасбҳоро барои мисолҳо муайян кунед (барои ин, қуттии аломати сабти мисолҳои нав бояд қайд карда шавад). Ман тавсия медиҳам, ки теги Номро нишон диҳед, пас ҳамаи мисолҳое, ки дар дохили гурӯҳ оғоз мешаванд, як ном доранд ва дидани онҳо дар консол қулай аст.

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

Пас аз таъсиси гурӯҳ, онро кушоед ва ба бахши конфигуратсияҳои пешрафта гузаред.Чаро дар марҳилаи офариниш ҳама имконот дар консол намоён нестанд.

Сиёсати қатъкунӣ — қоидаҳое, ки ҳангоми нест кардани мисолҳо ба назар гирифта мешаванд. Онҳо бо тартиби татбиқ карда мешаванд. Мо одатан онҳоеро, ки дар расм дар зер оварда шудаанд, истифода мебарем. Аввалан, инстансияҳо бо қадимтарин Шаблони оғозёбӣ нест карда мешаванд (масалан, агар мо AMI-ро навсозӣ кунем, мо версияи навро эҷод кардем, аммо ҳамаи инстансияҳо тавонистанд ба он гузаранд). Сипас мисолҳое интихоб карда мешаванд, ки ба соати навбатии ҳисобдорӣ наздиктаранд. Ва он гоҳ қадимтаринҳо дар асоси санаи оғозёбӣ интихоб карда мешаванд.

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

Хуб медонед: барои навсозӣ кардани ҳама мошинҳо дар кластер, барои истифода қулай Навсозии мисол. Агар шумо инро бо функсияи Lambda аз қадами қаблӣ якҷоя кунед, шумо системаи навсозии намунаҳои пурра автоматӣ хоҳед дошт. Пеш аз навсозии ҳамаи мошинҳо, шумо бояд муҳофизати миқёси мисолро барои ҳама мисолҳои гурӯҳ хомӯш кунед. На конфигуратсия дар гурӯҳ, балки муҳофизат аз худи мошинҳо, ин дар ҷадвали идоракунии мисол анҷом дода мешавад.

Тавозуни Load Application ва EC2 Target Group

Мувозинат дар бахши EC2 → Мувозинати сарборӣ → Мувозинатдиҳандаҳои сарборӣ сохта шудааст. Мо барномаи Load Balancer -ро истифода мебарем; муқоисаи намудҳои гуногуни мувозинатҳоро дар он хондан мумкин аст саҳифаи хидматрасонӣ.

Гӯшхарошон - сохтани бандарҳои 80 ва 443 ва масир аз 80 ба 443 бо истифода аз қоидаҳои тавозуни дертар маъно дорад.

Минтақаҳои мавҷудият — дар аксари мавридҳо мо минтақаҳои дастрасиро барои ҳама интихоб мекунем.

Танзимоти Амниятро танзим кунед — сертификати SSL барои мувозинат дар ин ҷо нишон дода шудааст, варианти мувофиқтарин аст шаҳодатнома тартиб диҳед дар ACM. Дар бораи фарқиятҳо сиёсати амниятӣ хондан мумкин аст хуччатхо, шумо метавонед онро бо нобаёнӣ интихоб гузоред ELBSecurityPolicy-2016-08. Пас аз сохтани мувозинат, шумо онро мебинед Номи DNS, ки шумо бояд CNAME-ро барои домени худ танзим кунед. Масалан, дар Cloudflare чунин ба назар мерасад.

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

Гурӯҳи амниятӣ — барои мувозинат як гурӯҳи амниятӣ эҷод ё интихоб кунед, ман дар ин бора дар боло дар қисмати EC2 Launch Template → Settings Network навиштам.

Гурӯҳи мақсаднок — мо гурУхеро ташкил мекунем, ки барои фиристодани дархостхои балансатор ба мошинхо ва тафтиши мавчудияти онхо бо максади иваз кардани онхо дар мавриди мушкилот масъул аст. Навъи адаф бояд мисол бошад, Протокол и бандаргоҳ ягон, агар шумо HTTPS-ро барои иртибот байни мувозинат ва мисолҳо истифода баред, пас шумо бояд ба онҳо сертификат бор кунед. Барои мақсадҳои ин мисол, мо ин корро намекунем, мо танҳо порти 80-ро тарк мекунем.

Санҷишҳои саломатӣ — параметрҳо барои санҷиши фаъолияти хидмат. Дар хидмати воқеӣ, ин бояд як дархости алоҳида бошад, ки қисмҳои муҳими мантиқи тиҷоратро амалӣ мекунад; бо мақсади ин мисол, ман танзимоти пешфарзро тарк хоҳам кард. Баъдан, шумо метавонед фосилаи дархост, вақт, рамзҳои муваффақият ва ғайраро интихоб кунед. Дар мисоли мо, мо рамзҳои муваффақияти 200-399-ро нишон медиҳем, зеро тасвири Docker, ки истифода мешавад, рамзи 304-ро бармегардонад.

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

Бақайдгирии Ҳадафҳо — дар ин ҷо мошинҳо барои гурӯҳ интихоб мешаванд, аммо дар ҳолати мо ин корро ECS анҷом медиҳад, бинобар ин мо танҳо ин қадамро мегузарем.

Хуб медонед: дар сатҳи мувозинат шумо метавонед гузоришҳоро фаъол созед, ки дар S3 дар вақти муайян захира карда мешаванд формат. Аз он ҷо онҳо метавонанд ба хидматҳои тарафи сеюм барои таҳлил содир карда шаванд ё шумо метавонед дархостҳои SQL-ро мустақиман дар маълумоти S3 бо бо истифода аз Афина. Ин қулай аст ва бе ягон рамзи иловагӣ кор мекунад. Ман инчунин тавсия медиҳам, ки тоза кардани гузоришҳоро аз сатили S3 пас аз як муддати муайян муқаррар кунед.

Таърифи вазифаҳои ECS

Дар қадамҳои қаблӣ, мо ҳама чизҳои марбут ба инфрасохтори хидматрасониро эҷод кардем; ҳоло мо ба тавсифи контейнерҳое, ки мо оғоз мекунем, мегузарем. Ин дар қисмати ECS → Таърифҳои вазифаҳо анҷом дода мешавад.

Мутобиқати навъи оғоз - EC2-ро интихоб кунед.

Нақши IAM дар иҷрои вазифа - интихоб кунед ecsTaskExecutionRole. Бо истифода аз он, гузоришҳо навишта мешаванд, дастрасӣ ба тағирёбандаҳои махфӣ дода мешавад ва ғайра.

Дар қисмати Таърифҳои контейнер, Иловаи контейнерро клик кунед.

Садо — истинод ба тасвир бо рамзи лоиҳа; барои ин мисол ман тасвири оммавиро аз Docker Hub истифода хоҳам кард bitnami / гиреҳ-мисол: 0.0.1.

Маҳдудиятҳои хотира — маҳдудиятҳои хотира барои контейнер. Маҳдудияти сахт — маҳдудияти сахт, агар контейнер аз арзиши муқарраршуда зиёд бошад, фармони куштори docker иҷро мешавад, контейнер фавран мемирад. Маҳдудияти нарм — лимити нарм, контейнер метавонад аз арзиши муайяншуда зиёд бошад, аммо ин параметр ҳангоми гузоштани супоришҳо дар мошинҳо ба назар гирифта мешавад. Масалан, агар мошин дорои 4 ГБ хотираи оперативӣ бошад ва маҳдудияти нарми контейнер 2048 МБ бошад, пас ин мошин метавонад бо ин контейнер ҳадди аксар 2 вазифаи иҷрошаванда дошта бошад. Дар асл, 4 ГБ RAM каме камтар аз 4096 МБ аст, онро дар ҷадвали ECS Instances дар кластер дидан мумкин аст. Маҳдудияти нарм наметавонад аз маҳдудияти сахт зиёд бошад. Фаҳмидани он муҳим аст, ки агар дар як вазифа якчанд контейнер мавҷуд бошад, пас маҳдудияти онҳо ҷамъбаст карда мешавад.

Харитасозии порт - дар Порти мизбон Мо 0-ро нишон медиҳем, ин маънои онро дорад, ки порт ба таври динамикӣ таъин карда мешавад ва аз ҷониби Гурӯҳи Ҳадаф назорат карда мешавад. Порти контейнерӣ — порте, ки барномаи шумо дар он кор мекунад, аксар вақт дар фармони иҷро нишон дода мешавад ё дар коди барномаи шумо, Dockerfile ва ғайра таъин карда мешавад. Барои мисоли мо мо 3000-ро истифода мебарем, зеро он дар рӯйхат оварда шудааст файли докер тасвири истифодашаванда.

Санҷиши саломатӣ — параметрҳои санҷиши саломатии контейнер, набояд бо параметре, ки дар Гурӯҳи Ҳадаф танзим шудааст, омехта нашавад.

муҳит - танзимоти муҳити зист. Воҳидҳои CPU - монанд ба Маҳдудияти хотира, танҳо дар бораи протсессори. Ҳар як ядрои протсессори 1024 адад аст, бинобар ин, агар сервер протсессори дугонаи ядроӣ дошта бошад ва контейнер ба 512 муқаррар карда шуда бошад, пас 4 вазифаро бо ин контейнер дар як сервер оғоз кардан мумкин аст. Воҳидҳои CPU ҳамеша ба шумораи ядроҳо мувофиқат мекунанд; онҳо наметавонанд каме камтар бошанд, ба монанди хотира.

фармон — фармон барои оғози хидмат дар дохили контейнер, ҳама параметрҳо бо вергул ҷудо карда шудаанд. Ин метавонад gunicorn, npm ва ғайра бошад. Агар нишон дода нашавад, арзиши дастури CMD аз Dockerfile истифода мешавад. ишора мекунем npm,start.

Тағйирёбандаҳои муҳити зист — тағирёбандаҳои муҳити контейнерӣ. Ин метавонад маълумоти матнии оддӣ ё тағирёбандаҳои махфӣ бошад Менеҷери асрор ё Дӯкони параметрҳо.

Нигоҳдорӣ ва бақайдгирӣ — дар ин ҷо мо сабти номро дар CloudWatch Logs (хизматрасонӣ барои гузоришҳо аз AWS) насб мекунем. Барои ин, танҳо қуттии сабти CloudWatch Logs-ро танзим кунед. Пас аз сохтани Таърифи Вазифа, як гурӯҳи гузоришҳо ба таври худкор дар CloudWatch эҷод карда мешавад. Бо нобаёнӣ, гузоришҳо дар он ба таври номуайян нигоҳ дошта мешаванд; Ман тавсия медиҳам, ки давраи нигоҳдорӣ аз ҳеҷ гоҳ ба охир нарасидааст ба давраи зарурӣ иваз карда шавад. Ин дар гурӯҳҳои CloudWatch Log анҷом дода мешавад, шумо бояд давраи ҷорӣро клик кунед ва навашро интихоб кунед.

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

Кластери ECS ва Таъминкунандаи иқтидори ECS

Барои сохтани кластер ба бахши ECS → Кластерҳо гузаред. Мо ҳамчун қолаб EC2 Linux + Networking -ро интихоб мекунем.

Номи кластер - хеле муҳим, мо дар ин ҷо ҳамон номеро, ки дар параметри Launch Template нишон дода шудааст, месозем ECS_CLUSTER, дар ҳолати мо - DemoApiClusterProd. Қуттии "Эҷоди кластери холӣ" -ро санҷед. Ихтиёрӣ, шумо метавонед Container Insights -ро барои дидани ченакҳои хидматҳо дар CloudWatch фаъол созед. Агар шумо ҳама чизро дуруст иҷро карда бошед, пас дар қисмати ECS Instances шумо мошинҳоеро мебинед, ки дар гурӯҳи Auto Scaling сохта шудаанд.

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

Ба ҷадвал равед Таъминкунандагони иқтидор ва нав эҷод кунед. Ба шумо хотиррасон мекунам, ки вобаста ба шумораи вазифаҳои иҷрошудаи ECS назорат эҷод ва хомӯш кардани мошинҳо лозим аст. Бояд қайд кард, ки провайдер метавонад танҳо ба як гурӯҳ таъин карда шавад.

Гурӯҳи миқёси худкор — гурӯҳи қаблан сохташударо интихоб кунед.

Миқёси идорашаванда — онро фаъол созед, то провайдер хадамотро васеъ кунад.

Иқтидори мақсаднок % — ба мо чанд фоизи мошинхое, ки бо супоришхо лозиманд. Агар шумо 100% муайян кунед, пас ҳама мошинҳо ҳамеша бо иҷрои вазифаҳо банд хоҳанд буд. Агар шумо 50% муайян кунед, пас нисфи мошинҳо ҳамеша ройгон хоҳанд буд. Дар ин ҳолат, агар ҷаҳиши якбора дар сарборӣ вуҷуд дошта бошад, таксиҳои нав фавран ба мошинҳои ройгон ворид мешаванд, бидуни интизории ҷойгиркунии мисолҳо.

Муҳофизати қатъи идорашаванда — фаъол кунед, ин параметр ба провайдер имкон медиҳад, ки муҳофизати мисолҳоро аз ҳазф хориҷ кунад. Ин вақте рух медиҳад, ки дар мошин ягон вазифаҳои фаъол мавҷуд нестанд ва имкон медиҳад, ки қобилияти Ҳадаф%.

Хадамоти ECS ва танзими миқёс

Қадами охирин :) Барои эҷод кардани хидмат, шумо бояд ба кластери қаблан сохташуда дар ҷадвали Хидматҳо гузаред.

Навъи оғозёбӣ — ба шумо лозим аст, ки гузариш ба стратегияи провайдери иқтидорро клик кунед ва провайдерҳои қаблан сохташударо интихоб кунед.

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

Таърифи вазифа — Таърифи вазифаҳои қаблан сохташуда ва таҷдиди онро интихоб кунед.

Номи хидмат — барои роҳ надодан ба иштибоҳ, мо ҳамеша ҳамон чизеро бо Таърифи Вазифа нишон медиҳем.

Навъи хидмат - ҳамеша Реплика.

Шумораи вазифаҳо — шумораи дилхоҳи вазифаҳои фаъол дар хидмат. Ин параметр тавассути миқёс назорат карда мешавад, аммо ба ҳар ҳол бояд муайян карда шавад.

Фоизи ҳадди ақали солим и Максимум фоиз — муайян кардани рафтори супоришхо хангоми тахеил. Қиматҳои пешфарз 100 ва 200 мебошанд, ки нишон медиҳанд, ки дар вақти ҷойгиркунӣ шумораи вазифаҳо якчанд маротиба зиёд мешаванд ва сипас ба арзиши дилхоҳ бармегарданд. Агар шумо 1 вазифаи иҷрошаванда дошта бошед, min=0 ва max=100, он гоҳ ҳангоми ҷойгиркунӣ он кушта мешавад ва баъд аз он вазифаи нав бардошта мешавад, яъне вақти бекорӣ хоҳад буд. Агар 1 вазифа иҷро шуда бошад, min=50, max=150, пас ҷойгиркунӣ умуман сурат намегирад, зеро 1 вазифаро ба ним тақсим кардан ё якуним маротиба зиёд кардан мумкин нест.

Навъи ҷойгиркунӣ — навсозии Rolling-ро тарк кунед.

Шаблонҳои ҷойгиркунӣ — коидахои дар дастгоххо гузоштани вазифахо. Пешфарз паҳншавии AZ Balanced Spread аст - ин маънои онро дорад, ки ҳар як вазифаи нав то баланд шудани мошинҳо дар ҳама минтақаҳои мавҷуда дар як мисоли нав ҷойгир карда мешавад. Мо одатан BinPack - CPU ва Spread - AZ -ро иҷро мекунем; Бо ин сиёсат, вазифаҳо ба қадри имкон зич дар як мошин барои як CPU ҷойгир карда мешаванд. Агар барои сохтани мошини нав зарур бошад, он дар минтақаи мавҷудияти нав сохта мешавад.

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

Навъи мутавозуни бор —-ро интихоб кунед Тавозуни сарбории барнома.

Нақши хидмати IAM - интихоб кунед ecsServiceRole.

Номи баланскунандаи бор — тавозуни қаблан сохташударо интихоб кунед.

Давраи имтиёзи санҷиши саломатӣ — пеш аз анҷом додани санҷиши саломатӣ пас аз иҷрои вазифаи нав таваққуф мекунем, мо одатан онро ба 60 сония муқаррар мекунем.

Контейнер барои бор кардани тавозуни — дар банди номи гурӯҳи мақсаднок, гурӯҳи қаблан сохташударо интихоб кунед ва ҳама чиз ба таври худкор пур карда мешавад.

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

Миқёси автоматии хидмат — параметрҳои миқёси хизматрасонӣ. Барои танзим кардани миқдори дилхоҳи хидмати худ, Танзими миқёси худкори хидматро интихоб кунед. Ҳангоми миқёс мо шумораи ҳадди ақал ва максималии вазифаҳоро муқаррар мекунем.

Нақши IAM барои миқёси автоматии хидмат - интихоб кунед AWSServiceRoleForApplicationAutoScaling_ECSService.

Сиёсати миқёси вазифаҳои худкор — коидахои микьёс. 2 намуд вуҷуд дорад:

  1. Пайгирии ҳадаф — пайгирии ченакҳои мақсаднок (истифодаи CPU/RAM ё шумораи дархостҳо барои ҳар як вазифа). Масалан, мо мехоҳем, ки сарбории миёнаи протсессор 85% бошад, вақте ки он баландтар мешавад, то он даме, ки он ба арзиши мақсаднок мерасад, вазифаҳои нав илова карда мешаванд. Агар сарборӣ камтар бошад, пас вазифаҳо хориҷ карда мешаванд, баръакс, агар муҳофизат аз коҳиши миқёс фаъол набошад (Миқёсро хомӯш кунед).
  2. Миқёси қадам - вокуниш ба ҳодисаи худсарона. Дар ин ҷо шумо метавонед вокунишро ба ҳама гуна ҳодиса танзим кунед (CloudWatch Alarm), вақте ки он рух медиҳад, шумо метавонед шумораи муайяни вазифаҳоро илова ё хориҷ кунед ё шумораи дақиқи вазифаҳоро муайян кунед.

Хизмат метавонад якчанд қоидаҳои миқёсро дошта бошад, ин метавонад муфид бошад, чизи асосӣ ин аст, ки онҳо бо ҳамдигар мухолифат накунанд.

хулоса

Агар шумо дастурҳоро иҷро карда бошед ва ҳамон тасвири Docker-ро истифода баред, хидмати шумо бояд чунин саҳифаро баргардонад.

Сохтани API-и миқёспазир дар мисолҳои AWS Spot

  1. Мо як қолаберо офаридаем, ки мувофиқи он ҳама мошинҳои хидматрасонӣ ба кор андохта мешаванд. Мо инчунин фаҳмидем, ки чӣ гуна мошинҳоро ҳангоми тағир додани шаблон навсозӣ кунем.
  2. Мо коркарди сигнали қатъи мисоли спотро танзим кардем, аз ин рӯ дар давоми як дақиқа пас аз қабули он, ҳама вазифаҳои иҷрошаванда аз мошин хориҷ карда мешаванд, бинобар ин ҳеҷ чиз гум намешавад ё қатъ намешавад.
  3. Мо балансаторро баланд кардем, то ки бор дар байни мошинхо баробар таксим карда шавад.
  4. Мо хидматеро таъсис додем, ки дар ҳолатҳои ҷой кор мекунад, ки хароҷоти мошинро тақрибан 3 маротиба кам мекунад.
  5. Мо миқёси автоматиро дар ҳарду самт танзим кардем, то сарбории афзояндаи корро бидуни хароҷоти бекорӣ идора кунем.
  6. Мо Provider Capacity-ро истифода мебарем, то барнома инфрасохторро (мошинҳо) идора кунад, на ба таври дигар.
  7. Мо бузургем.

Агар шумо суръатҳои пешгӯишаванда дар сарборӣ дошта бошед, масалан, шумо дар як маъракаи бузурги почтаи электронӣ таблиғ мекунед, шумо метавонед миқёсро тавассути ҷадвал.

Шумо инчунин метавонед дар асоси маълумот аз қисмҳои гуногуни системаи шумо миқёс кунед. Масалан, мо функсия дорем фиристодани пешниҳодҳои таблиғотии инфиродӣ истифодабарандагони замимаи мобилӣ. Баъзан маърака ба одамони 1M+ фиристода мешавад. Пас аз чунин тақсимот, ҳамеша афзоиши зиёди дархостҳо ба API мушоҳида мешавад, зеро бисёр корбарон дар як вақт ба барнома ворид мешаванд. Ҳамин тавр, агар мо мебинем, ки дар навбат барои фиристодани огоҳиномаҳои таблиғотии таблиғотӣ нишондиҳандаҳои стандартӣ ба таври назаррас бештар мавҷуданд, мо метавонем фавран якчанд мошинҳо ва вазифаҳои иловагиро оғоз кунем, то ба сарборӣ омода бошанд.

Агар шумо дар шарҳҳо ба ман ҳолатҳои ҷолиби истифодаи мисолҳои спотӣ ва ECS ё чизе дар бораи миқёскунӣ нақл кунед, ман шод хоҳам шуд.

Ба наздикӣ мақолаҳо дар бораи он хоҳанд буд, ки чӣ гуна мо ҳазорон рӯйдодҳои таҳлилиро дар як сония дар стеки асосан бе сервер (бо пул) коркард мекунем ва чӣ гуна густариши хидматҳо бо истифода аз GitLab CI ва Terraform Cloud кор мекунад.

Ба мо обуна шавед, ҷолиб хоҳад буд!

Танҳо корбарони сабтиномшуда метавонанд дар пурсиш иштирок кунанд. даромад, Лутфан.

Оё шумо дар истеҳсолот намунаҳои спотро истифода мебаред?

  • 22,2%Ҳа 6

  • 66,7%№18

  • 11,1%Ман дар бораи онҳо аз мақола омӯхтам ва нақша дорам, ки онҳоро истифода барам3

27 корбар овоз доданд. 5 корбар худдорӣ карданд.

Манбаъ: will.com

Илова Эзоҳ