Hammaga salom! Mening ismim Kirill, men Adapty kompaniyasida texnik direktorman. Bizning arxitekturamizning aksariyati AWS-da va bugun men ishlab chiqarish muhitida spot misollardan foydalangan holda server xarajatlarini 3 baravar kamaytirganimiz, shuningdek, ularning avtomatik o'lchamini qanday sozlash haqida gapirib beraman. Avval u qanday ishlashi haqida umumiy ma'lumot, keyin esa boshlash uchun batafsil ko'rsatmalar bo'ladi.
Spot misollar nima?
Quyida spot misollar uchun narxlar tarixini ko'rsatadigan bir nechta skrinshotlar mavjud.
m5.eu-west-1 (Irlandiya) mintaqasida katta. Narx 3 oy davomida asosan barqaror bo‘lib, hozirda 2.9x tejaydi.
m5.katta AQSh-sharq-1 mintaqasida (N. Virjiniya). Narx 3 oy davomida doimiy ravishda o'zgarib turadi, hozirda mavjudlik zonasiga qarab 2.3x dan 2.8x gacha tejaladi.
t3.us-sharq-1 mintaqasida kichik (N. Virjiniya). Narx 3 oy davomida barqaror bo‘lib, hozirda 3.4 baravar tejaldi.
Xizmat arxitekturasi
Ushbu maqolada biz gaplashadigan xizmatning asosiy arxitekturasi quyidagi diagrammada ko'rsatilgan.
Ilova yuki balansi → EC2 maqsadli guruhi → elastik konteyner xizmati
Application Load Balancer (ALB) EC2 Target Group (TG) ga so'rovlarni yuboradigan muvozanatlashtiruvchi sifatida ishlatiladi. TG ALB uchun namunalardagi portlarni ochish va ularni Elastik konteyner xizmati (ECS) konteynerlari portlariga ulash uchun javobgardir. ECS bu Docker konteynerlarini boshqaradigan AWSdagi Kubernetesning analogidir.
Bitta nusxada bir xil portlarga ega bir nechta ishlaydigan konteynerlar bo'lishi mumkin, shuning uchun biz ularni aniq o'rnatolmaymiz. ECS TG ga yangi vazifani ishga tushirayotganini aytadi (Kubernetes terminologiyasida bu pod deb ataladi), u misoldagi bepul portlarni tekshiradi va ulardan birini ishga tushirilgan vazifaga tayinlaydi. TG shuningdek, namuna va API uning ustida ishlayotganligini sog'liq tekshiruvi yordamida muntazam tekshirib turadi va agar biror muammo aniqlansa, u yerga so'rov yuborishni to'xtatadi.
EC2 Avtomatik Scaling Groups + ECS Capacity Provayderlar
Yuqoridagi diagrammada EC2 Avtomatik Scaling Groups (ASG) xizmati ko'rsatilmagan. Nomidan siz misollarni masshtablash uchun javobgar ekanligini tushunishingiz mumkin. Biroq, yaqin vaqtgacha AWS ECS-dan ishlaydigan mashinalar sonini boshqarish uchun o'rnatilgan qobiliyatga ega emas edi. ECS vazifalar sonini, masalan, protsessordan foydalanish, operativ xotira yoki so'rovlar soni bo'yicha kengaytirish imkonini berdi. Ammo agar vazifalar barcha bo'sh nusxalarni egallagan bo'lsa, unda yangi mashinalar avtomatik ravishda yaratilmaydi.
Bu ECS Capacity Providers (ECS CP) paydo bo'lishi bilan o'zgardi. Endi ECSdagi har bir xizmat ASG bilan bog'lanishi mumkin va agar vazifalar ishlaydigan misollarga mos kelmasa, yangilari ko'tariladi (lekin belgilangan ASG chegaralarida). Bu ham teskari yo'nalishda ishlaydi, agar ECS CP vazifalarsiz bo'sh holatlarni ko'rsa, ularni o'chirish uchun ASG buyrug'ini beradi. ECS CP misol yukining maqsadli foizini belgilash qobiliyatiga ega, shuning uchun ma'lum miqdordagi mashinalar har doim vazifalarni tez o'lchash uchun bepul bo'ladi; Men bu haqda biroz keyinroq gaplashaman.
EC2 ishga tushirish shablonlari
Ushbu infratuzilmani yaratish haqida batafsil gapirishdan oldin gaplashadigan oxirgi xizmat EC2 Launch Templates. Bu har safar noldan takrorlanmaslik uchun barcha mashinalar ishga tushadigan shablonni yaratishga imkon beradi. Bu erda siz ishga tushirish uchun mashina turini, xavfsizlik guruhini, disk tasvirini va boshqa ko'plab parametrlarni tanlashingiz mumkin. Siz barcha ishga tushirilgan nusxalarga yuklanadigan foydalanuvchi ma'lumotlarini ham belgilashingiz mumkin. Siz foydalanuvchi ma'lumotlarida skriptlarni ishga tushirishingiz mumkin, masalan, fayl mazmunini tahrirlashingiz mumkin
Ushbu maqola uchun eng muhim konfiguratsiya parametrlaridan biri
Disk haqida - AWS yaqinda
Xizmat yaratish
Keling, tavsiflangan xizmatni yaratishga o'tamiz. Jarayonda men yuqorida aytib o'tilmagan bir nechta foydali fikrlarni qo'shimcha ravishda tasvirlab beraman. Umuman olganda, bu bosqichma-bosqich ko'rsatma, lekin men juda oddiy yoki aksincha, juda aniq holatlarni ko'rib chiqmayman. Barcha harakatlar AWS vizual konsolida amalga oshiriladi, ammo ularni CloudFormation yoki Terraform yordamida dasturiy tarzda qayta ishlab chiqarish mumkin. Adapty-da biz Terraformdan foydalanamiz.
EC2 ishga tushirish shabloni
Ushbu xizmat foydalaniladigan mashinalar konfiguratsiyasini yaratadi. Shablonlar EC2 -> Instances -> Ishga tushirish shablonlari bo'limida boshqariladi.
Amazon mashinasi tasviri (AMI) — barcha nusxalar ishga tushiriladigan disk tasvirini belgilang. ECS uchun ko'p hollarda Amazon-dan optimallashtirilgan tasvirdan foydalanishga arziydi. U muntazam ravishda yangilanadi va ECS ishlashi uchun zarur bo'lgan hamma narsani o'z ichiga oladi. Joriy rasm identifikatorini bilish uchun sahifaga o'ting
Namuna turi — misol turini ko'rsating. Vazifangizga eng mos keladiganini tanlang.
Kalitlar juftligi (kirish) — agar kerak bo'lsa, SSH orqali instansiyaga ulanishingiz mumkin bo'lgan sertifikatni belgilang.
Tarmoq sozlamalari — tarmoq parametrlarini belgilang. Tarmoq platformasi ko'p hollarda Virtual Private Cloud (VPC) bo'lishi kerak. Xavfsizlik guruhlari — misollaringiz uchun xavfsizlik guruhlari. Biz misollar oldida balanslashtiruvchidan foydalanamiz, men bu erda faqat balanslashtiruvchidan kiruvchi ulanishlarga ruxsat beruvchi guruhni ko'rsatishni tavsiya qilaman. Ya'ni, sizda 2 ta xavfsizlik guruhi bo'ladi, biri balanslashtiruvchi uchun, bu 80 (http) va 443 (https) portlarida istalgan joydan kirish ulanishlarini ta'minlaydi, ikkinchisi esa balanslash guruhining istalgan portlarida kiruvchi ulanishlarni ta'minlaydigan mashinalar uchun. . Ikkala guruhdagi chiquvchi ulanishlar TCP protokoli yordamida barcha manzillarning barcha portlariga ochilishi kerak. Chiquvchi ulanishlar uchun portlar va manzillarni cheklashingiz mumkin, ammo keyin siz yopiq portda biror narsaga kirishga harakat qilmayotganingizni doimiy ravishda kuzatib borishingiz kerak.
Saqlash (hajmlar) — mashinalar uchun disk parametrlarini belgilang. Disk hajmi AMIda ko'rsatilganidan kam bo'lishi mumkin emas; ECS Optimized uchun bu 30 GiB.
Kengaytirilgan tafsilotlar — qo'shimcha parametrlarni belgilang.
Sotib olish opsiyasi — biz spot misollarni sotib olishni xohlaymizmi. Biz xohlaymiz, lekin biz bu katakchani belgilamaymiz; biz uni Avtomatik Scaling guruhida sozlaymiz, u erda ko'proq imkoniyatlar mavjud.
IAM namunasi profili — misollar ishga tushiriladigan rolni ko'rsating. Misollar ECSda ishlashi uchun ular odatda rolda topiladigan ruxsatlarga muhtoj ecsInstanceRole. Ba'zi hollarda uni yaratish mumkin, agar bo'lmasa, bu erda
Keyinchalik ko'plab parametrlar mavjud, asosan siz hamma joyda standart qiymatlarni qoldirishingiz mumkin, ammo ularning har biri aniq tavsifga ega. Men har doim EBS-optimallashtirilgan namunani va agar foydalanilsa, T2/T3 Unlimited opsiyalarini yoqaman
Foydalanuvchi ma'lumotlari — foydalanuvchi maʼlumotlarini koʻrsatish. Biz faylni tahrir qilamiz /etc/ecs/ecs.config
, unda ECS agent konfiguratsiyasi mavjud.
Foydalanuvchi ma'lumotlari qanday ko'rinishi mumkinligiga misol:
#!/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
— parametr namunaning berilgan nomga ega klasterga tegishli ekanligini bildiradi, yaʼni bu klaster oʻz vazifalarini shu serverga joylashtirishi mumkin. Biz hali klaster yaratmadik, lekin uni yaratishda bu nomdan foydalanamiz.
ECS_ENABLE_SPOT_INSTANCE_DRAINING=true
— parametr nuqta namunasini oʻchirish uchun signal qabul qilinganda undagi barcha vazifalarni Drenaj holatiga oʻtkazish kerakligini bildiradi.
ECS_CONTAINER_STOP_TIMEOUT=1m
- parametr SIGINT signalini olgandan so'ng, barcha vazifalarni o'ldirishdan oldin 1 daqiqa borligini bildiradi.
ECS_ENGINE_AUTH_TYPE=docker
— parametr avtorizatsiya mexanizmi sifatida Docker sxemasidan foydalanilganligini bildiradi
ECS_ENGINE_AUTH_DATA=...
— Docker tasvirlaringiz saqlanadigan shaxsiy konteyner registriga ulanish parametrlari. Agar u ommaviy bo'lsa, unda siz hech narsani ko'rsatishingiz shart emas.
Ushbu maqolaning maqsadlari uchun men Docker Hub-dan umumiy rasmdan foydalanaman, shuning uchun parametrlarni belgilang ECS_ENGINE_AUTH_TYPE
и ECS_ENGINE_AUTH_DATA
Kerakmas.
Bilish yaxshi: AMI ni muntazam yangilab turish tavsiya etiladi, chunki yangi versiyalar Docker, Linux, ECS agent va boshqalar versiyalarini yangilaydi. Buni unutmaslik uchun
EC2 Avtomatik masshtablash guruhi
Auto Scaling Group misollarni ishga tushirish va masshtablash uchun javobgardir. Guruhlar EC2 -> Avtomatik masshtablash -> Avtomatik masshtablash guruhlari boʻlimida boshqariladi.
Shablonni ishga tushirish — oldingi bosqichda yaratilgan shablonni tanlang. Biz standart versiyani qoldiramiz.
Xarid qilish imkoniyatlari va namuna turlari — klaster uchun namunalar turlarini belgilang. Ishga tushirish shabloniga rioya qilish ishga tushirish shablonidagi namuna turidan foydalanadi. Xarid opsiyalari va namuna turlarini birlashtirish sizga namuna turlarini moslashuvchan tarzda sozlash imkonini beradi. Biz undan foydalanamiz.
Ixtiyoriy talab asosida — har doim ishlaydigan muntazam, dog'siz misollar soni.
Talab bo'yicha foiz bazadan yuqori — oddiy va spot instansiyalarning foiz nisbati, 50-50 teng taqsimlanadi, har bir oddiy misol uchun 20-80 4 ta nuqta ko'tariladi. Ushbu misol uchun men 50-50 ni ko'rsataman, lekin aslida biz ko'pincha 20-80, ba'zi hollarda 0-100 ni qilamiz.
Namuna turlari — bu yerda siz klasterda qo'llaniladigan misollarning qo'shimcha turlarini belgilashingiz mumkin. Biz uni hech qachon ishlatmadik, chunki men hikoyaning ma'nosini tushunmayapman. Ehtimol, bu muayyan turdagi misollardagi cheklovlar bilan bog'liq, ammo ularni qo'llab-quvvatlash orqali osongina oshirish mumkin. Agar siz ilovani bilsangiz, uni sharhlarda o'qishdan xursand bo'laman)
tarmoq — tarmoq sozlamalari, VPC va mashinalar uchun pastki tarmoqlarni tanlang, ko'p hollarda barcha mavjud pastki tarmoqlarni tanlashingiz kerak.
Yuklarni muvozanatlash - balanschi sozlamalari, lekin biz buni alohida qilamiz, bu erda hech narsaga tegmaymiz. Salomatlik tekshiruvlari keyin ham sozlanadi.
Guruh hajmi — biz klasterdagi mashinalar sonining chegaralarini va boshida kerakli mashinalar sonini ko'rsatamiz. Klasterdagi mashinalar soni hech qachon ko'rsatilgan minimaldan kam va maksimaldan ko'p bo'lmaydi, hatto ko'rsatkichlar bo'yicha masshtablash amalga oshirilishi kerak.
Masshtablash siyosati — masshtablash parametrlari, lekin biz bajarilayotgan ECS vazifalari asosida masshtablashtiramiz, shuning uchun masshtabni keyinroq sozlaymiz.
Namuna miqyosidagi himoya — masshtabni kichraytirishda misollarni oʻchirishdan himoya qilish. ASG ishlaydigan vazifalari bo'lgan mashinani o'chirmasligi uchun uni yoqamiz. ECS Capacity Provider vazifalari bo'lmagan holatlar uchun himoyani o'chirib qo'yadi.
Teg qo'shing — misollar uchun teglarni belgilashingiz mumkin (buning uchun yangi nusxalarni belgilash katakchasi belgilanishi kerak). Men Nom tegini belgilashni tavsiya qilaman, keyin guruh ichida ishga tushirilgan barcha misollar bir xil nomga ega bo'ladi va ularni konsolda ko'rish qulay.
Guruhni yaratgandan so'ng, uni oching va "Kengaytirilgan konfiguratsiyalar" bo'limiga o'ting.Nega barcha variantlar yaratish bosqichida konsolda ko'rinmaydi.
Tugatish qoidalari — misollarni oʻchirishda hisobga olinadigan qoidalar. Ular tartibda qo'llaniladi. Biz odatda quyidagi rasmdagilardan foydalanamiz. Birinchidan, eng eski ishga tushirish shabloniga ega bo'lgan nusxalar o'chiriladi (masalan, agar biz AMI-ni yangilagan bo'lsak, biz yangi versiya yaratdik, ammo barcha nusxalar unga o'tishga muvaffaq bo'ldi). Keyin keyingi hisob-kitob soatiga eng yaqin bo'lgan misollar tanlanadi. Va keyin eng qadimgilari ishga tushirish sanasiga qarab tanlanadi.
Bilish yaxshi: foydalanish uchun qulay klasterdagi barcha mashinalarni yangilash
Application Load Balancer va EC2 Target Group
Balanslashtiruvchi EC2 → Yukni muvozanatlash → Yukni muvozanatlash bo'limida yaratilgan. Biz Application Load Balancer-dan foydalanamiz; har xil turdagi balanslashtirgichlarni taqqoslashni quyidagi havolada o'qishingiz mumkin
Tinglovchilar - 80 va 443 portlarni yaratish va keyinroq balanslash qoidalaridan foydalangan holda 80 dan 443 gacha yo'naltirish mantiqiy.
Mavjud zonalar — aksariyat hollarda biz hamma uchun qulaylik zonalarini tanlaymiz.
Xavfsizlik sozlamalarini sozlang — bu yerda balanslashtiruvchi uchun SSL sertifikati ko'rsatilgan, eng qulay variant ELBSecurityPolicy-2016-08
. Balanslashtiruvchini yaratgandan so'ng, siz uni ko'rasiz DNS nomi, bu sizning domeningiz uchun CNAME-ni sozlashingiz kerak. Masalan, Cloudflare-da u shunday ko'rinadi.
Xavfsizlik guruhi — muvozanatlashtiruvchi uchun xavfsizlik guruhini yarating yoki tanlang, men bu haqda yuqorida EC2 ishga tushirish shablonini → Tarmoq sozlamalari bo'limida ko'proq yozganman.
Nishon guruh — biz balanslashtiruvchidan so'rovlarni mashinalarga yo'naltirish va muammolar yuzaga kelganda ularni almashtirish uchun ularning mavjudligini tekshirish uchun mas'ul bo'lgan guruh yaratamiz. Maqsad turi misol bo'lishi kerak, Protokol и port har qanday, agar siz muvozanatlashtiruvchi va misollar o'rtasidagi aloqa uchun HTTPS dan foydalansangiz, ularga sertifikat yuklashingiz kerak. Ushbu misol maqsadlari uchun biz buni qilmaymiz, shunchaki 80-portni qoldiramiz.
Salomatlik tekshiruvlari — xizmatning funksionalligini tekshirish parametrlari. Haqiqiy xizmatda bu biznes mantig'ining muhim qismlarini amalga oshiradigan alohida so'rov bo'lishi kerak, bu misol uchun men standart sozlamalarni qoldiraman. Keyinchalik, so'rovlar oralig'i, vaqt tugashi, muvaffaqiyat kodlari va boshqalarni tanlashingiz mumkin. Bizning misolimizda biz 200-399 muvaffaqiyat kodlarini ko'rsatamiz, chunki foydalaniladigan Docker tasviri 304 kodini qaytaradi.
Maqsadlarni ro'yxatdan o'tkazish — bu yerda guruh uchun mashinalar tanlanadi, ammo bizning holatlarimizda bu ECS tomonidan amalga oshiriladi, shuning uchun biz bu bosqichni o'tkazib yuboramiz.
Bilish yaxshi: balanslash darajasida siz S3 da ma'lum bir vaqtda saqlanadigan jurnallarni yoqishingiz mumkin
ECS vazifasi ta'rifi
Oldingi bosqichlarda biz xizmat ko'rsatish infratuzilmasi bilan bog'liq hamma narsani yaratdik, endi biz ishga tushiradigan konteynerlarni tavsiflashga o'tamiz. Bu ECS → Task Definitions bo'limida amalga oshiriladi.
Ishga tushirish turining mosligi - EC2 ni tanlang.
Vazifani bajarish IAM roli - tanlash ecsTaskExecutionRole
. Undan foydalanib, jurnallar yoziladi, maxfiy o'zgaruvchilarga kirish huquqi beriladi va hokazo.
Konteyner ta'riflari bo'limida Konteyner qo'shish-ni bosing.
surat — loyiha kodi bilan rasmga havola; bu misol uchun men Docker Hub’dan umumiy rasmdan foydalanaman
Xotira chegaralari — konteyner uchun xotira chegaralari. Qattiq chegara — qattiq chegara, agar konteyner belgilangan qiymatdan oshib ketsa, docker kill buyrug'i bajariladi, konteyner darhol o'ladi. Yumshoq chegara — yumshoq chegara, konteyner belgilangan qiymatdan oshib ketishi mumkin, ammo bu parametr mashinalarga vazifalarni joylashtirishda hisobga olinadi. Misol uchun, agar mashinada 4 GiB operativ xotira bo'lsa va konteynerning yumshoq chegarasi 2048 MiB bo'lsa, bu mashinada ushbu konteyner bilan maksimal 2 ta ishlaydigan vazifa bo'lishi mumkin. Aslida, 4 GiB operativ xotira 4096 Mb dan biroz kamroq, buni klasterdagi ECS Instances yorlig'ida ko'rish mumkin. Yumshoq chegara qattiq chegaradan katta bo'lishi mumkin emas. Shuni tushunish kerakki, agar bitta vazifada bir nechta konteyner bo'lsa, unda ularning chegaralari umumlashtiriladi.
Port xaritalari - In Xost porti Biz 0 ni ko'rsatamiz, bu port dinamik ravishda tayinlanishi va maqsadli guruh tomonidan nazorat qilinishini anglatadi. Konteyner porti — ilovangiz ishlaydigan port ko'pincha bajarish buyrug'ida ko'rsatiladi yoki dastur kodida, Dockerfile va hokazolarda tayinlanadi. Bizning misolimiz uchun biz 3000 dan foydalanamiz, chunki u ro'yxatga kiritilgan
Salomatlik tekshiruvi - konteyner sog'lig'ini tekshirish parametrlari, maqsadli guruhda sozlangan bilan adashtirmaslik kerak.
Atrof-muhit - atrof-muhit sozlamalari. CPU birliklari - Xotira chegaralariga o'xshash, faqat protsessor haqida. Har bir protsessor yadrosi 1024 birlik, shuning uchun agar serverda ikki yadroli protsessor bo'lsa va konteyner 512 ga o'rnatilgan bo'lsa, u holda bitta serverda ushbu konteyner bilan 4 ta vazifa ishga tushirilishi mumkin. CPU birliklari har doim yadrolar soniga to'g'ri keladi; xotirada bo'lgani kabi, ulardan bir oz kamroq bo'lishi mumkin emas.
buyruq — konteyner ichida xizmatni ishga tushirish buyrug'i, barcha parametrlar vergul bilan ajratilgan holda ko'rsatilgan. Bu gunicorn, npm va boshqalar bo'lishi mumkin. Agar ko'rsatilmagan bo'lsa, Dockerfile'dan CMD direktivasi qiymati ishlatiladi. bildiramiz npm,start
.
Atrof-muhit o'zgaruvchilari — konteyner muhiti o‘zgaruvchilari. Bu oddiy matn ma'lumotlari yoki maxfiy o'zgaruvchilar bo'lishi mumkin
Saqlash va ro'yxatga olish — bu yerda biz CloudWatch Logs (AWS jurnallari uchun xizmat) tizimiga kirishni o‘rnatamiz. Buni amalga oshirish uchun CloudWatch jurnallarini avtomatik sozlash katagiga belgi qo'ying. Vazifa ta'rifini yaratgandan so'ng, CloudWatch-da avtomatik ravishda jurnallar guruhi yaratiladi. Odatiy bo'lib, jurnallar unda cheksiz saqlanadi; Men Saqlash muddatini "Hech qachon tugamaydi" dan kerakli muddatga o'zgartirishni tavsiya qilaman. Bu CloudWatch Log guruhlarida amalga oshiriladi, siz joriy davrni bosishingiz va yangisini tanlashingiz kerak.
ECS Cluster va ECS Capacity Provider
Klaster yaratish uchun ECS → Klasterlar bo'limiga o'ting. Biz shablon sifatida EC2 Linux + Networking ni tanlaymiz.
Klaster nomi - juda muhim, biz bu erda shablonni ishga tushirish parametrida ko'rsatilgan nomni qilamiz ECS_CLUSTER
, bizning holatlarimizda - DemoApiClusterProd
. Bo'sh klaster yaratish katagiga belgi qo'ying. Majburiy emas, CloudWatch’dagi xizmatlar ko‘rsatkichlarini ko‘rish uchun Container Insights’ni yoqishingiz mumkin. Agar siz hamma narsani to'g'ri bajargan bo'lsangiz, ECS Instances bo'limida siz Auto Scaling guruhida yaratilgan mashinalarni ko'rasiz.
Tabga o'ting Imkoniyatlar provayderlari va yangisini yarating. Sizga shuni eslatib o'tamanki, ishlaydigan ECS vazifalari soniga qarab mashinalarni yaratish va o'chirishni boshqarish kerak. Shuni ta'kidlash kerakki, provayder faqat bitta guruhga tayinlanishi mumkin.
Avtomatik masshtablash guruhi — avval yaratilgan guruhni tanlang.
Boshqariladigan masshtablash — provayder xizmat ko'lamini kengaytirishi uchun uni yoqing.
Maqsadli sig'im % — bizga vazifalar yuklangan mashinalarning necha foizi kerak. Agar siz 100% ni belgilasangiz, unda barcha mashinalar har doim ishlaydigan vazifalar bilan band bo'ladi. Agar siz 50% ni belgilasangiz, unda avtomobillarning yarmi har doim bepul bo'ladi. Bunday holda, yukning keskin sakrashi bo'lsa, yangi taksilar instantsiyalarning joylashishini kutmasdan, darhol bepul avtomobillarga etib boradi.
Boshqariladigan tugatish himoyasi — yoqish, bu parametr provayderga nusxalarni oʻchirishdan himoya qilishni olib tashlash imkonini beradi. Bu mashinada faol vazifalar bo'lmaganda sodir bo'ladi va Maqsadli sig'im% ga ruxsat beradi.
ECS xizmati va masshtabni sozlash
Oxirgi qadam :) Xizmatni yaratish uchun Xizmatlar yorlig'ida avval yaratilgan klasterga o'tishingiz kerak.
Ishga tushirish turi — Imkoniyatlar provayderi strategiyasiga o‘tish tugmasini bosishingiz va avval yaratilgan provayderlarni tanlashingiz kerak.
Vazifa ta'rifi — avval yaratilgan Task Definition va uning tahririni tanlang.
Xizmat nomi — chalkashmaslik uchun biz har doim Task Definition bilan bir xil narsani ko'rsatamiz.
Xizmat turi - har doim Replika.
Vazifalar soni — xizmatdagi faol vazifalarning kerakli soni. Ushbu parametr masshtablash orqali boshqariladi, ammo baribir ko'rsatilishi kerak.
Minimal sog'lom foiz и Maksimal foiz — joylashtirish vaqtida vazifalarning harakatini aniqlash. Standart qiymatlar 100 va 200 ni tashkil qiladi, bu ularni joylashtirish vaqtida vazifalar soni bir necha marta ko'payishini va keyin kerakli qiymatga qaytishini ko'rsatadi. Agar sizda 1 ta vazifa bajarilsa, min=0 va max=100, u holda joylashtirish paytida u o'chiriladi va shundan keyin yangisi ko'tariladi, ya'ni ishlamay qoladi. Agar 1 ta vazifa bajarilayotgan bo'lsa, min=50, max=150, u holda joylashtirish umuman bo'lmaydi, chunki 1 ta vazifani yarmiga bo'lish yoki bir yarim barobarga oshirish mumkin emas.
Joylashtirish turi — Rolling yangilanishini qoldiring.
Joylashtirish shablonlari — vazifalarni mashinalarga joylashtirish qoidalari. Sukut boʻyicha AZ Balanced Spread – bu har bir yangi vazifa barcha mavjudlik zonalaridagi mashinalar koʻtarilmaguncha yangi namunaga joylashtirilishini anglatadi. Biz odatda BinPack - CPU va Spread - AZ ni bajaramiz; bu siyosat bilan vazifalar har bir protsessorga bitta mashinada iloji boricha zichroq joylashtiriladi. Agar yangi mashina yaratish zarur bo'lsa, u yangi mavjudlik zonasida yaratiladi.
Yuk balansi turi — Application Load Balancer-ni tanlang.
Xizmat IAM roli - tanlash ecsServiceRole
.
Yuklash balansi nomi — avval yaratilgan balanserni tanlang.
Salomatlikni tekshirish uchun imtiyozli davr — yangi vazifani ishga tushirgandan so'ng sog'lig'ingizni tekshirishdan oldin pauza qiling, biz odatda uni 60 soniyaga o'rnatamiz.
Balansni yuklash uchun konteyner — Maqsadli guruh nomi bandida avval yaratilgan guruhni tanlang, shunda hammasi avtomatik ravishda to‘ldiriladi.
Avtomatik masshtablash xizmati — xizmat ko'rsatishni o'lchash parametrlari. Xizmatingizning kerakli sonini rostlash uchun Xizmatni avtomatik masshtablashni sozlash-ni tanlang. Masshtablashda biz minimal va maksimal vazifalar sonini belgilaymiz.
Avtomatik xizmat ko'rsatish uchun IAM roli - tanlash AWSServiceRoleForApplicationAutoScaling_ECSService
.
Avtomatik vazifalarni masshtablash siyosati — masshtablash qoidalari. 2 turi mavjud:
- Maqsadni kuzatish — maqsadli koʻrsatkichlarni kuzatish (CPU/RAMdan foydalanish yoki har bir vazifa uchun soʻrovlar soni). Misol uchun, biz protsessor yukining o'rtacha 85% bo'lishini xohlaymiz, u yuqoriroq bo'lganda, maqsadli qiymatga yetguncha yangi vazifalar qo'shiladi. Agar yuk kamroq bo'lsa, vazifalar o'chiriladi, aksincha, kichraytirishdan himoya yoqilmasa (O'lchovni o'chirib qo'ying).
- Bosqichli masshtablash - ixtiyoriy hodisaga munosabat. Bu yerda siz har qanday hodisaga munosabatni sozlashingiz mumkin (CloudWatch Alarm), u sodir bo'lganda, belgilangan miqdordagi vazifalarni qo'shishingiz yoki olib tashlashingiz yoki aniq vazifalar sonini belgilashingiz mumkin.
Xizmat bir nechta masshtablash qoidalariga ega bo'lishi mumkin, bu foydali bo'lishi mumkin, asosiysi ularning bir-biriga zid kelmasligini ta'minlashdir.
xulosa
Agar siz ko'rsatmalarga amal qilgan bo'lsangiz va xuddi shu Docker tasviridan foydalansangiz, xizmatingiz shunga o'xshash sahifani qaytarishi kerak.
- Biz shablonni yaratdik, unga ko'ra xizmatdagi barcha mashinalar ishga tushiriladi. Shablon o'zgarganda mashinalarni qanday yangilashni ham o'rgandik.
- Biz spot misolni to'xtatish signalini qayta ishlashni sozladik, shuning uchun uni qabul qilgandan so'ng bir daqiqa ichida barcha ishlaydigan vazifalar mashinadan o'chiriladi, shuning uchun hech narsa yo'qolmaydi yoki to'xtatilmaydi.
- Yukni mashinalar bo'ylab teng ravishda taqsimlash uchun balansni ko'tardik.
- Biz spot misollarda ishlaydigan xizmatni yaratdik, bu mashina xarajatlarini taxminan 3 barobar kamaytiradi.
- Biz to‘xtab qolish xarajatlarisiz ortib borayotgan ish yuklarini boshqarish uchun har ikki yo‘nalishda ham avtomatik o‘lchovni sozladik.
- Biz Capacity Provider-dan dastur infratuzilmani (mashinalarni) boshqarishi uchun foydalanamiz, aksincha emas.
- Biz ajoyibmiz.
Agar sizda yuklanishda bashorat qilinadigan o'sishlar bo'lsa, masalan, siz katta elektron pochta kampaniyasida reklama qilayotgan bo'lsangiz, masshtabni o'rnatishingiz mumkin:
Bundan tashqari, tizimingizning turli qismlaridan olingan ma'lumotlarga asoslanib o'lchovni o'lchashingiz mumkin. Masalan, bizda funksionallik mavjud
Izohlarda spot misollar va ECS dan foydalanishning qiziqarli holatlari yoki masshtablash haqida biror narsa aytsangiz xursand bo'laman.
Tez orada biz sekundiga minglab analitik hodisalarni asosan serversiz stekda (pul bilan) qanday qayta ishlashimiz va GitLab CI va Terraform Cloud yordamida xizmatlarni joylashtirish qanday ishlashi haqida maqolalar bo'ladi.
Bizga obuna bo'ling, bu qiziqarli bo'ladi!
So'rovda faqat ro'yxatdan o'tgan foydalanuvchilar ishtirok etishlari mumkin.
Ishlab chiqarishda spot misollardan foydalanasizmi?
-
22,2%Ha 6
-
66,7%№18
-
11,1%Men ular haqida maqoladan bilib oldim va ulardan foydalanishni rejalashtirdim3
27 foydalanuvchi ovoz berdi. 5 nafar foydalanuvchi betaraf qolgan.
Manba: www.habr.com