Бәріңе сәлем! Менің атым Кирилл, мен Adapty компаниясының техникалық директорымын. Біздің архитектурамыздың көпшілігі AWS жүйесінде және бүгін мен өндіріс ортасында спот даналарын пайдалану арқылы сервер шығындарын 3 есеге төмендеткеніміз, сондай-ақ олардың автоматты масштабтауын қалай орнату керектігі туралы айтатын боламын. Алдымен оның қалай жұмыс істейтініне шолу жасалады, содан кейін бастауға арналған егжей-тегжейлі нұсқаулар болады.
Spot инстанциялары дегеніміз не?
Төменде спот даналарының баға тарихын көрсететін бірнеше скриншоттар берілген.
m5.eu-west-1 (Ирландия) аймағындағы үлкен. Баға негізінен 3 ай бойы тұрақты болды, қазір 2.9 есе үнемдейді.
м5.үлкен АҚШ-шығыс-1 аймағында (Н. Вирджиния). Баға 3 ай ішінде үнемі өзгеріп отырады, қазір қолжетімділік аймағына байланысты 2.3 еседен 2.8 есеге дейін үнемдейді.
t3.us-шығыс-1 аймағында шағын (Н. Вирджиния). Баға 3 ай бойы тұрақты болды, қазір 3.4 есе үнемдейді.
Қызмет архитектурасы
Біз осы мақалада айтатын қызметтің негізгі архитектурасы төмендегі диаграммада көрсетілген.
Қолданба жүктемесін теңестіруші → EC2 мақсатты топ → серпімді контейнер қызметі
Қолданба жүктемесін теңестіруші (ALB) EC2 мақсатты тобына (TG) сұрау жіберетін теңгерім ретінде пайдаланылады. TG ALB үшін даналарда порттарды ашуға және оларды Elastic Container Service (ECS) контейнерлерінің порттарына қосуға жауапты. ECS — Docker контейнерлерін басқаратын AWS жүйесіндегі Kubernetes аналогы.
Бір данада бірдей порттары бар бірнеше жұмыс істейтін контейнерлер болуы мүмкін, сондықтан біз оларды тұрақты түрде орната алмаймыз. ECS TG-ге жаңа тапсырманы іске қосып жатқанын айтады (Кубернетес терминологиясында бұл подкаст деп аталады), ол данада бос порттарды тексереді және олардың біреуін іске қосылған тапсырмаға тағайындайды. Сондай-ақ, TG дананың және API интерфейсінің денсаулықты тексеру арқылы жұмыс істеп жатқанын үнемі тексереді және қандай да бір ақауларды көрсе, ол жерге сұрау жіберуді тоқтатады.
EC2 автоматты масштабтау топтары + ECS сыйымдылық провайдерлері
Жоғарыдағы диаграммада EC2 Auto Scaling Groups (ASG) қызметі көрсетілмеген. Атауынан оның даналарды масштабтауға жауапты екенін түсінуге болады. Дегенмен, соңғы уақытқа дейін AWS-де ECS-тен жұмыс істейтін машиналар санын басқарудың кірістірілген мүмкіндігі болған жоқ. ECS тапсырмалар санын, мысалы, процессорды пайдалану, жедел жад немесе сұраулар саны бойынша масштабтауға мүмкіндік берді. Бірақ егер тапсырмалар барлық бос даналарды алып жатса, онда жаңа машиналар автоматты түрде жасалмаған.
Бұл ECS Capacity Providers (ECS CP) пайда болуымен өзгерді. Енді ECS-тегі әрбір қызметті ASG-мен байланыстыруға болады және егер тапсырмалар орындалып жатқан даналарға сәйкес келмесе, жаңалары көтеріледі (бірақ белгіленген ASG шегінде). Бұл сондай-ақ қарама-қарсы бағытта жұмыс істейді, егер ECS CP тапсырмаларсыз бос даналарды көрсе, оларды өшіру үшін ASG пәрменін береді. ECS CP даналық жүктеменің мақсатты пайызын анықтау мүмкіндігіне ие, осылайша белгілі бір машиналар саны тапсырмаларды жылдам масштабтау үшін әрқашан бос болады; Мен бұл туралы сәл кейінірек айтамын.
EC2 іске қосу үлгілері
Бұл инфрақұрылымды жасау туралы егжей-тегжейлі айтпас бұрын мен айтатын соңғы қызмет - EC2 іске қосу үлгілері. Бұл әр уақытта нөлден қайталанбау үшін барлық машиналар іске қосылатын үлгіні жасауға мүмкіндік береді. Мұнда іске қосылатын машина түрін, қауіпсіздік тобын, диск кескінін және басқа да көптеген параметрлерді таңдауға болады. Сондай-ақ, барлық іске қосылған даналарға жүктеп салынатын пайдаланушы деректерін көрсетуге болады. Пайдаланушы деректерінде сценарийлерді іске қосуға болады, мысалы, файлдың мазмұнын өңдеуге болады
Осы мақаланың ең маңызды конфигурация параметрлерінің бірі болып табылады
Дискіге қатысты - жақында AWS
Қызметті құру
Сипатталған қызметті құруға көшейік. Бұл процесте мен жоғарыда айтылмаған бірнеше пайдалы тұстарды қосымша сипаттаймын. Жалпы алғанда, бұл қадамдық нұсқаулық, бірақ мен кейбір өте қарапайым немесе, керісінше, өте нақты жағдайларды қарастырмаймын. Барлық әрекеттер AWS көрнекі консолінде орындалады, бірақ оларды CloudFormation немесе Terraform көмегімен бағдарламалық түрде шығаруға болады. Adapty-де біз Terraform-ды қолданамыз.
EC2 іске қосу үлгісі
Бұл қызмет пайдаланылатын машиналар конфигурациясын жасайды. Үлгілер EC2 -> Даналар -> Үлгілерді іске қосу бөлімінде басқарылады.
Amazon машинасының кескіні (AMI) — барлық даналары іске қосылатын диск кескінін көрсетіңіз. ECS үшін көп жағдайда Amazon-дан оңтайландырылған кескінді пайдалану керек. Ол үнемі жаңартылып отырады және ECS жұмыс істеуі үшін қажеттінің барлығын қамтиды. Ағымдағы кескін идентификаторын білу үшін бетке өтіңіз
Дана түрі — дананың түрін көрсетіңіз. Тапсырмаңызға сәйкес келетінін таңдаңыз.
Кілттер жұбы (логин) — қажет болса, данаға SSH арқылы қосылуға болатын сертификатты көрсетіңіз.
Желі параметрлері — желі параметрлерін көрсетіңіз. Желілік платформа көп жағдайда виртуалды жеке бұлт (VPC) болуы керек. Қауіпсіздік топтары — сіздің даналарыңыз үшін қауіпсіздік топтары. Даналардың алдында балансизаторды қолданатындықтан, мен мұнда тек балансизатордан кіріс қосылымдарға рұқсат беретін топты көрсетуді ұсынамын. Яғни, сізде 2 (http) және 80 (https) порттарындағы кез келген жерден кіріс қосылымдарға мүмкіндік беретін теңгерімдеуші үшін 443 қауіпсіздік тобы болады, ал екіншісі баланстауыш тобының кез келген порттарында кіріс қосылымдарына мүмкіндік беретін машиналар үшін. . Екі топтағы шығыс қосылымдар TCP протоколы арқылы барлық мекенжайлардың барлық порттарына ашылуы керек. Сіз шығыс қосылымдар үшін порттар мен мекенжайларды шектей аласыз, бірақ содан кейін жабық портта бір нәрсеге қол жеткізуге тырыспағаныңызды үнемі бақылауыңыз керек.
Жад (томдар) — машиналар үшін диск параметрлерін көрсетіңіз. Диск өлшемі AMI-де көрсетілгеннен кем болмауы керек; ECS Optimized үшін ол 30 ГБ құрайды.
Жетілдірілген мәліметтер — қосымша параметрлерді көрсетіңіз.
Сатып алу опциясы — спот даналарын сатып алғымыз келе ме. Біз қалаймыз, бірақ бұл жерде бұл құсбелгіні қоймаймыз; біз оны Автоматты масштабтау тобында конфигурациялаймыз, онда басқа опциялар бар.
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
— параметр нүктелік дананы өшіру сигналы қабылданған кезде ондағы барлық тапсырмаларды «Төгу» күйіне ауыстыру керектігін көрсетеді.
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 агенті және т.б. нұсқаларын жаңартады. Бұл туралы ұмытпау үшін
EC2 автоматты масштабтау тобы
Автоматты масштабтау тобы даналарды іске қосу және масштабтау үшін жауап береді. Топтар EC2 -> Автоматты масштабтау -> Автоматты масштабтау топтары бөлімінде басқарылады.
Үлгіні іске қосу — алдыңғы қадамда жасалған үлгіні таңдаңыз. Біз әдепкі нұсқаны қалдырамыз.
Сатып алу опциялары және дана түрлері — кластерге арналған даналардың түрлерін көрсетіңіз. Іске қосу үлгісін іске қосу үлгісінен үлгі түрін пайдаланады. Сатып алу опциялары мен дана түрлерін біріктіру дана түрлерін икемді конфигурациялауға мүмкіндік береді. Біз оны қолданамыз.
Қосымша сұраныс бойынша база — әрқашан жұмыс істейтін тұрақты, дақсыз даналардың саны.
Сұраныс бойынша пайыздық базадан жоғары — тұрақты және спот даналарының пайыздық арақатынасы, 50-50 тең бөлінеді, әрбір тұрақты данаға 20-80 4 нүкте көтеріледі. Осы мысалдың мақсаттары үшін мен 50-50-ні көрсетемін, бірақ іс жүзінде біз көбінесе 20-80, кейбір жағдайларда 0-100 жасаймыз.
Дана түрлері — мұнда кластерде қолданылатын даналардың қосымша түрлерін көрсетуге болады. Біз оны ешқашан пайдаланбадық, өйткені мен әңгіменің мағынасын түсінбеймін. Мүмкін, бұл даналардың белгілі бір түрлеріне шектеулерге байланысты болуы мүмкін, бірақ оларды қолдау арқылы оңай көбейтуге болады. Егер сіз қосымшаны білсеңіз, мен оны түсініктемелерде оқуға қуаныштымын)
Желі — желі параметрлері, VPC және машиналар үшін ішкі желілерді таңдаңыз, көп жағдайда барлық қолжетімді ішкі желілерді таңдау керек.
Жүктемелерді теңестіру - теңгергіш параметрлері, бірақ біз мұны бөлек жасаймыз, мұнда ештеңеге қол тигізбейміз. Денсаулықты тексеру кейінірек конфигурацияланады.
Топ мөлшері — біз кластердегі машиналар санының шектеулерін және іске қосу кезінде қажетті машиналар санын көрсетеміз. Кластердегі машиналар саны ешқашан көрсетілген минимумнан кем және максимумнан көп болмайды, тіпті егер масштабтау метрикаға сәйкес орын алса да.
Масштабтау саясаты — масштабтау параметрлері, бірақ біз іске қосылған ECS тапсырмалары негізінде масштабтаймыз, сондықтан масштабтауды кейінірек конфигурациялаймыз.
Дана масштабын қорғау — масштабты азайту кезінде даналарды жоюдан қорғау. Біз оны ASG орындалатын тапсырмалары бар құрылғыны жоймауы үшін қосамыз. ECS Capacity Provider тапсырмалары жоқ даналарды қорғауды өшіреді.
Тегтер қосыңыз — даналар үшін тегтерді көрсетуге болады (бұл үшін Жаңа даналарды белгілеу құсбелгісін қою керек). Мен Name тегін көрсетуді ұсынамын, содан кейін топ ішінде іске қосылған барлық даналар бірдей атқа ие болады және оларды консольде қарау ыңғайлы.
Топты жасағаннан кейін оны ашып, «Қосымша конфигурациялар» бөліміне өтіңіз.Неліктен барлық опциялар жасау кезеңінде консольде көрінбейді.
Тоқтату саясаты — даналарды жою кезінде ескерілетін ережелер. Олар ретімен қолданылады. Біз әдетте төмендегі суреттегілерді қолданамыз. Біріншіден, ең ескі іске қосу үлгісі бар даналар жойылады (мысалы, егер біз AMI жаңартылған болса, біз жаңа нұсқаны жасадық, бірақ барлық даналар оған ауыса алды). Содан кейін келесі есеп айырысу сағатына ең жақын даналар таңдалады. Содан кейін ең ескілері іске қосу күніне қарай таңдалады.
білу пайдалы: кластердегі барлық машиналарды жаңарту үшін, пайдалануға ыңғайлы
Application Load Balancer және EC2 Target Group
Баланс EC2 → Жүктемені теңестіру → Жүктеме теңестірушілер бөлімінде жасалады. Біз Application Load Balancer қолданамыз; әр түрлі теңдестіргіштердің салыстыруын мына жерден оқуға болады
Тыңдаушылар - 80 және 443 порттарын жасау және кейінірек балансирлеу ережелерін пайдаланып 80-ден 443-ке қайта бағыттау мағынасы бар.
Қол жетімділік аймақтары — көп жағдайда біз барлығына қолжетімділік аймақтарын таңдаймыз.
Қауіпсіздік параметрлерін конфигурациялаңыз — мұнда теңгерушіге арналған SSL сертификаты көрсетілген, ең қолайлы нұсқа ELBSecurityPolicy-2016-08
. Балансты жасағаннан кейін сіз оны көресіз DNS атауыдоменіңіз үшін CNAME конфигурациялауыңыз қажет. Мысалы, бұл Cloudflare-де осылай көрінеді.
Қауіпсіздік тобы — балансизатор үшін қауіпсіздік тобын жасаңыз немесе таңдаңыз, мен бұл туралы жоғарыда EC2 іске қосу үлгісі → Желі параметрлері бөлімінде толығырақ жаздым.
Мақсатты топ — біз теңгерімдегі сұраныстарды машиналарға бағыттауға және ақаулық туындаған жағдайда оларды ауыстыру үшін олардың қолжетімділігін тексеруге жауапты топ құрамыз. Мақсат түрі болуы керек, Хаттама и порт кез келген, егер балансизатор мен даналар арасындағы байланыс үшін HTTPS қолдансаңыз, оларға сертификатты жүктеп салуыңыз керек. Бұл мысалдың мақсаттары үшін біз мұны жасамаймыз, біз жай ғана 80 портты қалдырамыз.
Денсаулықты тексеру — қызметтің функционалдығын тексеру параметрлері. Нақты қызметте бұл бизнес логикасының маңызды бөліктерін жүзеге асыратын жеке сұрау болуы керек; осы мысалдың мақсаттары үшін мен әдепкі параметрлерді қалдырамын. Содан кейін сұрау аралығын, күту уақытын, сәттілік кодтарын және т.б. таңдауға болады. Біздің мысалда біз 200-399 Сәттілік кодтарын көрсетеміз, себебі пайдаланылатын Docker кескіні 304 кодын қайтарады.
Мақсаттарды тіркеу — мұнда топқа арналған машиналар таңдалады, бірақ біздің жағдайда мұны ECS жасайды, сондықтан біз бұл қадамды өткізіп жібереміз.
білу пайдалы: баланстауыш деңгейінде белгілі бір уақытта S3 ішінде сақталатын журналдарды қосуға болады
ECS тапсырмасының анықтамасы
Алдыңғы қадамдарда біз сервистік инфрақұрылымға қатысты барлығын жасадық, енді біз іске қосатын контейнерлерді сипаттауға көшеміз. Бұл ECS → Task Definitions бөлімінде орындалады.
Іске қосу түрінің үйлесімділігі - EC2 таңдаңыз.
Тапсырманы орындау IAM рөлі - таңдау ecsTaskExecutionRole
. Оның көмегімен журналдар жазылады, құпия айнымалыларға рұқсат беріледі және т.б.
Контейнер анықтамалары бөлімінде Контейнерді қосу түймешігін басыңыз.
бейне — жоба коды бар суретке сілтеме; бұл мысал үшін мен Docker Hub-тен жалпыға ортақ кескінді қолданамын
Жад шектеулері — контейнерге арналған жад шектеулері. Қатаң шектеу — қатаң шектеу, егер контейнер көрсетілген мәннен асып кетсе, докерді өлтіру командасы орындалады, контейнер бірден өледі. Жұмсақ лимит — жұмсақ шек, контейнер көрсетілген мәннен шығуы мүмкін, бірақ бұл параметр машиналарда тапсырмаларды орналастыру кезінде ескерілетін болады. Мысалы, машинада 4 ГБ жедел жады болса және контейнердің жұмсақ шегі 2048 МБ болса, онда бұл құрылғыда осы контейнермен ең көбі 2 орындалатын тапсырма болуы мүмкін. Шындығында, 4 ГБ жедел жады 4096 МБ-тан сәл аз, оны кластердегі ECS даналары қойындысында көруге болады. Жұмсақ шектеу қатаң шектеуден үлкен болмауы керек. Түсіну керек, егер бір тапсырмада бірнеше контейнер болса, онда олардың шектері қорытындыланады.
Портты салыстыру - in Хост порты Біз 0-ді көрсетеміз, бұл порттың динамикалық түрде тағайындалатынын және Мақсатты топтың бақылауында болатынын білдіреді. Контейнер порты — қолданбаңыз жұмыс істейтін порт көбінесе орындау пәрменінде көрсетіледі немесе қолданба кодында, Dockerfile және т.б. тағайындалады. Біздің мысал үшін біз 3000-ды қолданамыз, себебі ол тізімде көрсетілген
Денсаулықты тексеру — мақсатты топта конфигурацияланғанмен шатастырмау үшін контейнер денсаулығын тексеру параметрлері.
қоршаған орта - орта параметрлері. CPU блоктары - жад шектеулеріне ұқсас, тек процессор туралы. Әрбір процессор өзегі 1024 бірлік, сондықтан серверде екі ядролы процессор болса және контейнер 512-ге орнатылған болса, бір серверде осы контейнермен 4 тапсырманы іске қосуға болады. CPU блоктары әрқашан өзектер санына сәйкес келеді; жадтағыдай олардың саны аз болуы мүмкін емес.
бұйрық — контейнер ішіндегі қызметті бастау пәрмені, барлық параметрлер үтірмен бөлінген. Бұл gunicorn, npm және т.б. болуы мүмкін. Көрсетілмесе, Dockerfile файлындағы CMD директивасының мәні пайдаланылады. көрсетеміз npm,start
.
Қоршаған ортаның айнымалылары — контейнер ортасының айнымалылары. Бұл қарапайым мәтіндік деректер немесе құпия айнымалылар болуы мүмкін
Сақтау және журналға жазу — мұнда біз CloudWatch Logs жүйесінде (AWS журналдарына арналған қызмет) жүйеге кіруді орнатамыз. Мұны істеу үшін CloudWatch журналдарын автоматты түрде конфигурациялау құсбелгісін қойыңыз. Тапсырма анықтамасын жасағаннан кейін журналдар тобы CloudWatch қолданбасында автоматты түрде жасалады. Әдепкі бойынша, журналдар онда шексіз сақталады; Мен Сақтау мерзімін Ешқашан бітпеуден қажетті кезеңге өзгертуді ұсынамын. Бұл CloudWatch Log топтарында жасалады, ағымдағы кезеңді басып, жаңасын таңдау керек.
ECS кластері және ECS сыйымдылық провайдері
Кластер жасау үшін ECS → Кластерлер бөліміне өтіңіз. Үлгі ретінде EC2 Linux + Networking таңдаймыз.
Кластер атауы - өте маңызды, біз мұнда шаблонды іске қосу параметрінде көрсетілген атауды жасаймыз ECS_CLUSTER
, біздің жағдайда - DemoApiClusterProd
. Бос кластерді жасау құсбелгісін қойыңыз. Қосымша түрде CloudWatch қызметіндегі көрсеткіштерді көру үшін Container Insights мүмкіндігін қосуға болады. Егер сіз бәрін дұрыс орындасаңыз, онда ECS Instances бөлімінде Автоматты масштабтау тобында жасалған машиналарды көресіз.
Қойындыға өтіңіз Сыйымдылықты қамтамасыз етушілер және жаңасын жасаңыз. Естеріңізге сала кетейін, ECS тапсырмаларының санына байланысты машиналарды жасауды және өшіруді бақылау қажет. Провайдер тек бір топқа тағайындалуы мүмкін екенін ескеру маңызды.
Автоматты масштабтау тобы — бұрын жасалған топты таңдаңыз.
Басқарылатын масштабтау — провайдер қызметті масштабтай алатындай етіп қосыңыз.
Мақсатты сыйымдылық % — бізге тапсырмалар жүктелген машиналардың қанша пайызы қажет. Егер сіз 100% көрсетсеңіз, онда барлық машиналар әрқашан орындалатын тапсырмалармен бос болады. Егер сіз 50% көрсетсеңіз, онда автомобильдердің жартысы әрқашан бос болады. Бұл жағдайда жүктің күрт секіруі орын алса, жаңа таксилер даналарды орналастыруды күтпей-ақ, бірден бос көліктерге жетеді.
Басқарылатын тоқтату қорғауы — қосу, бұл параметр провайдерге жоюдан даналарды қорғауды алып тастауға мүмкіндік береді. Бұл құрылғыда белсенді тапсырмалар болмаған кезде орын алады және Мақсатты сыйымдылыққа% мүмкіндік береді.
ECS қызметі және масштабтауды орнату
Соңғы қадам :) Қызметті жасау үшін Қызметтер қойындысында бұрын жасалған кластерге өту керек.
Іске қосу түрі — Сыйымдылық провайдеріне ауысу стратегиясын басып, бұрын жасалған провайдерлерді таңдау керек.
Тапсырма анықтамасы — бұрын жасалған тапсырма анықтамасын және оны қайта қарауды таңдаңыз.
Қызмет атауы — шатастырмау үшін біз әрқашан Task Definition сияқты көрсетеміз.
Қызмет түрі - әрқашан Көшірме.
Тапсырмалар саны — қызметтегі белсенді тапсырмалардың қажетті саны. Бұл параметр масштабтау арқылы басқарылады, бірақ әлі де көрсетілуі керек.
Ең аз сау пайыз и Максималды пайыз — орналастыру кезіндегі тапсырмалардың тәртібін анықтау. Әдепкі мәндер 100 және 200 болып табылады, бұл орналастыру кезінде тапсырмалар саны бірнеше есе артып, содан кейін қажетті мәнге оралатынын көрсетеді. Егер сізде 1 тапсырма орындалса, min=0 және max=100, онда орналастыру кезінде ол жойылады, содан кейін жаңасы көтеріледі, яғни бос уақыт болады. Егер 1 тапсырма орындалса, min=50, max=150, онда орналастыру мүлде болмайды, себебі 1 тапсырманы екіге бөлу немесе бір жарым есе көбейту мүмкін емес.
Орналастыру түрі — Rolling жаңартуын қалдырыңыз.
Орналастыру үлгілері — машиналарға тапсырмаларды орналастыру ережелері. Әдепкі мән – AZ Balanced Spread – бұл әрбір жаңа тапсырма барлық қолжетімділік аймақтарындағы машиналар көтерілгенше жаңа данаға орналастырылатынын білдіреді. Біз әдетте BinPack - CPU және Spread - AZ жасаймыз; бұл саясатпен тапсырмалар бір процессорға бір машинада мүмкіндігінше тығыз орналастырылады. Жаңа машина жасау қажет болса, ол жаңа қолжетімділік аймағында жасалады.
Жүктеме балансының түрі — Application Load Balancer таңдаңыз.
Қызмет IAM рөлі - таңдау ecsServiceRole
.
Жүктеме балансының атауы — бұрын жасалған балансизаторды таңдаңыз.
Денсаулықты тексерудің жеңілдік кезеңі — жаңа тапсырманы орындағаннан кейін денсаулықты тексеру алдында үзіліс жасаңыз, біз оны әдетте 60 секундқа орнатамыз.
Жүктеме балансы үшін контейнер — Мақсатты топ атауы элементінде бұрын жасалған топты таңдаңыз, сонда бәрі автоматты түрде толтырылады.
Автоматты масштабтау қызметі — қызметті масштабтау параметрлері. Қызметіңіздің қажетті санын реттеу үшін Қызметті автоматты масштабтауды конфигурациялау опциясын таңдаңыз. Масштабтау кезінде тапсырмалардың ең аз және максималды санын белгілейміз.
Қызметті автоматты масштабтау үшін IAM рөлі - таңдау AWSServiceRoleForApplicationAutoScaling_ECSService
.
Автоматты тапсырмаларды масштабтау саясаттары — масштабтау ережелері. 2 түрі бар:
- Мақсатты бақылау — мақсатты көрсеткіштерді бақылау (CPU/RAM пайдалану немесе әрбір тапсырма үшін сұраулар саны). Мысалы, процессордың орташа жүктемесі 85% болғанын қалаймыз, ол жоғарылағанда, ол мақсатты мәнге жеткенше жаңа тапсырмалар қосылады. Егер жүктеме аз болса, масштабты азайтудан қорғау қосылмайынша, тапсырмалар жойылады (Масштабтауды өшіру).
- Қадамды масштабтау - ерікті оқиғаға реакция. Мұнда кез келген оқиғаға реакцияны конфигурациялауға болады (CloudWatch Alarm), ол орын алған кезде тапсырмалардың көрсетілген санын қосуға немесе жоюға немесе тапсырмалардың нақты санын көрсетуге болады.
Қызметте бірнеше масштабтау ережелері болуы мүмкін, бұл пайдалы болуы мүмкін, бастысы олардың бір-біріне қайшы келмеуін қамтамасыз ету.
қорытынды
Нұсқауларды орындасаңыз және бірдей Docker кескінін пайдалансаңыз, қызметіңіз осындай бетті қайтаруы керек.
- Біз үлгіні жасадық, оған сәйкес қызметтегі барлық машиналар іске қосылады. Үлгі өзгерген кезде біз машиналарды қалай жаңарту керектігін де білдік.
- Біз нүктелік дананы тоқтату сигналын өңдеуді конфигурацияладық, сондықтан оны алғаннан кейін бір минут ішінде барлық орындалатын тапсырмалар құрылғыдан жойылады, сондықтан ештеңе жоғалмайды немесе үзілмейді.
- Жүкті машиналарға біркелкі бөлу үшін теңгерімді көтердік.
- Біз машина шығындарын шамамен 3 есе азайтатын спот даналарында жұмыс істейтін қызметті жасадық.
- Біз бос уақыт шығындарынсыз ұлғайған жұмыс жүктемелерін өңдеу үшін екі бағытта да автомасштабтауды конфигурацияладық.
- Қолданба инфрақұрылымды (машиналарды) басқаратындай етіп, басқа жолмен емес, біз Capacity Provider пайдаланамыз.
- Біз кереметпіз.
Жүктемеде болжамды өсулер болса, мысалы, үлкен электрондық пошта науқанында жарнама жасап жатсаңыз, масштабтауды келесі арқылы орнатуға болады.
Сондай-ақ жүйенің әртүрлі бөліктерінен алынған деректер негізінде масштабтауға болады. Мысалы, бізде функционалдылық бар
Түсініктемелерде нүктелік инстанцияларды және ECS пайдаланудың қызықты жағдайларын немесе масштабтау туралы бірдеңе айтсаңыз, мен қуаныштымын.
Жақында негізінен серверсіз стекте (ақшамен) секундына мыңдаған аналитикалық оқиғаларды қалай өңдейтініміз және GitLab CI және Terraform Cloud көмегімен қызметтерді орналастыру қалай жұмыс істейтіні туралы мақалалар шығады.
Бізге жазылыңыз, бұл қызықты болады!
Сауалнамаға тек тіркелген пайдаланушылар қатыса алады.
Өндірісте спот даналарын пайдаланасыз ба?
-
22,2%Иә6
-
66,7%№18
-
11,1%Мен олар туралы мақаладан білдім және оларды пайдалануды жоспарлап отырмын3
27 пайдаланушы дауыс берді. 5 пайдаланушы қалыс қалды.
Ақпарат көзі: www.habr.com