Mbangun API Scalable ing AWS Spot Instances

Halo kabeh! Jenengku Kirill, aku CTO ing Adapty. Umume arsitektur kita ana ing AWS, lan dina iki aku bakal ngomong babagan cara nyuda biaya server kaping 3 kanthi nggunakake conto titik ing lingkungan produksi, uga cara nyetel skala otomatis. Pisanan bakal ana ringkesan babagan cara kerjane, banjur instruksi rinci kanggo miwiti.

Apa Instance Spot?

Titik kedadean minangka server pangguna AWS liyane sing lagi nganggur, lan adol kanthi diskon gedhe (Amazon nulis nganti 90%, ing pengalaman kita ~ 3x, beda-beda gumantung saka wilayah, AZ lan jinis conto). Bentenane utama saka sing biasa yaiku bisa dipateni kapan wae. Mulane, kanggo dangu kita pitados bilih iku normal digunakake kanggo lingkungan prawan, utawa kanggo tugas ngetung soko, karo asil penengah disimpen ing S3 utawa ing database, nanging ora kanggo dodolan. Ana solusi pihak katelu sing ngidini sampeyan nggunakake bintik-bintik ing produksi, nanging ana akeh crutches kanggo kasus kita, mula kita ora ngetrapake. Pendekatan sing diterangake ing artikel kasebut bisa digunakake ing fungsi standar AWS, tanpa skrip tambahan, mahkota, lsp.

Ing ngisor iki sawetara gambar sing nuduhake riwayat rega kanggo kedadeyan titik.

m5.gedhe ing eu-kulon-1 (Irlandia) wilayah. Rega biasane stabil sajrone 3 wulan, saiki ngirit 2.9x.

Mbangun API Scalable ing AWS Spot Instances

m5.gedhe ing wilayah us-wétan-1 (N. Virginia). Rega terus ganti sajrone 3 wulan, saiki disimpen saka 2.3x dadi 2.8x gumantung saka zona kasedhiyan.

Mbangun API Scalable ing AWS Spot Instances

t3.cilik ing wilayah us-wétan-1 (N. Virginia). Rega wis stabil sajrone 3 wulan, saiki ngirit 3.4x.

Mbangun API Scalable ing AWS Spot Instances

arsitektur layanan

Arsitektur dhasar layanan sing bakal kita bahas ing artikel iki ditampilake ing diagram ing ngisor iki.

Mbangun API Scalable ing AWS Spot Instances

Pengimbang Beban Aplikasi → Kelompok Target EC2 → Layanan Wadah Elastis

Aplikasi Load Balancer (ALB) digunakake minangka balancer, kang ngirim panjalukan kanggo EC2 Target Group (TG). TG tanggung jawab kanggo mbukak port ing kedadean kanggo ALBs lan nyambungake menyang port kontaner Elastic Container Service (ECS). ECS minangka analog saka Kubernetes ing AWS, sing ngatur wadhah Docker.

Siji conto bisa duwe sawetara kontaner mlaku kanthi port sing padha, mula kita ora bisa nyetel kanthi tetep. ECS ngandhani TG sing mbukak tugas anyar (ing Kubernetes terminologi iki disebut pod), mriksa free bandar ing Kayata lan nemtokake siji saka wong-wong mau kanggo tugas dibukak. TG uga ajeg mriksa apa Kayata lan API digunakake ing nggunakake mriksa kesehatan, lan yen sumerep masalah, mandheg ngirim panjalukan ana.

EC2 Auto Scaling Groups + Penyedhiya Kapasitas ECS

Diagram ing ndhuwur ora nuduhake layanan EC2 Auto Scaling Groups (ASG). Saka jeneng sampeyan bisa ngerti manawa tanggung jawab kanggo skala skala. Nanging, nganti saiki, AWS ora duwe kemampuan kanggo ngatur jumlah mesin sing mlaku saka ECS. ECS ndadekake iku bisa kanggo skala nomer tugas, contone, nggunakake CPU, RAM utawa nomer panjalukan. Nanging yen tugas dikuwasani kabeh kedadean free, mesin anyar ora digawe kanthi otomatis.

Iki wis diganti karo munculé ECS Capacity Providers (ECS CP). Saiki saben layanan ing ECS ​​bisa digandhengake karo ASG, lan yen tugas kasebut ora cocog karo kedadeyan sing mlaku, mula sing anyar bakal diunggahake (nanging ing watesan ASG sing wis ditemtokake). Iki uga dianggo ing arah ngelawan, yen ECS CP ndeleng kedadean meneng tanpa tugas, banjur bakal menehi printah ASG kanggo mati. ECS CP nduweni kemampuan kanggo nemtokake persentase target beban conto, supaya sawetara mesin tansah gratis kanggo tugas skala cepet; Aku bakal ngomong babagan iki mengko.

Cithakan Bukak EC2

Layanan pungkasan sing bakal dakkandhakake sadurunge rinci babagan nggawe infrastruktur iki yaiku Cithakan Peluncuran EC2. Iku ngijini sampeyan kanggo nggawe cithakan miturut kang kabeh mesin bakal miwiti, supaya ora mbaleni iki saka ngeruk saben wektu. Ing kene sampeyan bisa milih jinis mesin sing bakal diwiwiti, klompok keamanan, gambar disk lan akeh paramèter liyane. Sampeyan uga bisa nemtokake data pangguna sing bakal diunggah menyang kabeh kedadeyan sing diluncurake. Sampeyan bisa mbukak skrip ing data pangguna, contone, sampeyan bisa ngowahi isi file Konfigurasi agen ECS.

Salah sawijining parameter konfigurasi sing paling penting kanggo artikel iki yaiku ECS_ENABLE_SPOT_INSTANCE_DRAINING= bener. Yen parameter iki diaktifake, banjur sanalika ECS nampa sinyal sing Kayata titik njupuk adoh, iku nransfer kabeh tugas sing bisa ing status Draining. Ora ana tugas anyar sing bakal ditugasake ing conto iki; yen ana tugas sing pengin diluncurake saiki, tugas kasebut bakal dibatalake. Panyuwunan saka balancer uga mandheg teka. Kabar saka pambusakan Kayata teka 2 menit sadurunge acara nyata. Dadi, yen layanan sampeyan ora nindakake tugas luwih saka 2 menit lan ora nyimpen apa-apa menyang disk, sampeyan bisa nggunakake conto titik tanpa kelangan data.

Babagan disk - AWS bubar iya Sampeyan bisa nggunakake Sistem File Elastis (EFS) bebarengan karo ECS; kanthi skema iki, sanajan disk ora dadi alangan, nanging kita ora nyoba iki, amarga ing prinsip kita ora butuh disk kanggo nyimpen negara. Kanthi gawan, sawise nampa SIGINT (dikirim nalika tugas ditransfer menyang status Draining), kabeh tugas sing mlaku bakal mandheg sawise 30 detik, sanajan durung rampung; sampeyan bisa ngganti wektu iki nggunakake parameter ECS_CONTAINER_STOP_TIMEOUT. Wangsulan: Bab ingkang utama iku ora kanggo nyetel luwih saka 2 menit kanggo mesin titik.

Nggawe layanan

Ayo dadi pindhah menyang nggawe layanan diterangake. Ing proses kasebut, aku uga bakal nerangake sawetara poin sing migunani sing ora kasebut ing ndhuwur. Umumé, iki minangka instruksi langkah-langkah, nanging aku ora bakal nimbang sawetara kasus sing dhasar banget utawa, sebaliknya, kasus sing spesifik. Kabeh tumindak dileksanakake ing console visual AWS, nanging bisa maleh programmatically nggunakake CloudFormation utawa Terraform. Ing Adapty kita nggunakake Terraform.

Cithakan Bukak EC2

Layanan iki nggawe konfigurasi mesin sing bakal digunakake. Cithakan dikelola ing bagean EC2 -> Instances -> Bukak Cithakan.

Gambar mesin Amazon (AMI) - nemtokake gambar disk sing kabeh kedadeyan bakal diluncurake. Kanggo ECS, ing sawetara kasus iku worth nggunakake gambar optimized saka Amazon. Dianyari kanthi rutin lan ngemot kabeh sing dibutuhake supaya ECS bisa digunakake. Kanggo ngerteni ID gambar saiki, bukak kaca kasebut Amazon ECS-optimized AMIs, pilih wilayah sing sampeyan gunakake lan salin ID AMI. Contone, kanggo wilayah us-east-1, ID saiki nalika nulis yaiku ami-00c7c1cf5bdc913ed. ID iki kudu dilebokake menyang item Nemtokake nilai khusus.

Tipe Instance - nuduhake jinis conto. Pilih sing paling cocog karo tugas sampeyan.

Pasangan kunci (login) - nemtokake sertifikat sing sampeyan bisa nyambung menyang conto liwat SSH, yen perlu.

Setelan jaringan - nemtokake paramèter jaringan. Platform jaringan ing paling kasus kudu ana Virtual Private Cloud (VPC). Klompok keamanan - grup keamanan kanggo kedadean Panjenengan. Awit kita bakal nggunakake balancer ing ngarepe kedadean, Aku nyaranake nemtokake klompok kene sing ngidini sambungan mlebu mung saka balancer. Yaiku, sampeyan bakal duwe 2 kelompok keamanan, siji kanggo balancer, sing ngidini sambungan mlebu saka ngendi wae ing port 80 (http) lan 443 (https), lan kaloro kanggo mesin, sing ngidini sambungan mlebu ing sembarang port saka grup balancer. . Sambungan metu ing loro grup kudu dibukak nggunakake protokol TCP kanggo kabeh port kanggo kabeh alamat. Sampeyan bisa matesi bandar lan alamat kanggo sambungan metu, nanging sampeyan kudu terus-terusan ngawasi sing ora nyoba kanggo ngakses soko ing port ditutup.

Panyimpenan (volume) - nemtokake paramèter disk kanggo mesin. Ukuran disk ora bisa kurang saka sing ditemtokake ing AMI; kanggo ECS Optimized yaiku 30 GiB.

Rincian majeng - nemtokake paramèter tambahan.

Pilihan tuku - apa kita pengin tuku kedadean titik. Kita pengin, nanging kita ora bakal mriksa kothak iki ing kene; kita bakal ngatur ing Auto Scaling Group, ana opsi liyane ana.

profil conto IAM - nuduhake peran sing bakal diluncurake. Supaya kedadean kanggo mbukak ing ECS, padha kudu ijin, kang biasane ditemokaké ing peran ecsInstanceRole. Ing sawetara kasus bisa digawe, yen ora, banjur kene manual babagan carane nindakake iki. Sawise nggawe, kita nuduhake ing cithakan.
Sabanjure ana akeh paramèter, ing dasare sampeyan bisa ninggalake nilai standar ing endi wae, nanging saben wong duwe katrangan sing jelas. Aku tansah ngaktifake conto EBS-optimized lan T2 / T3 pilihan Unlimited yen digunakake bledosan kedadean.

data panganggo - nuduhake data pangguna. Kita bakal ngowahi file kasebut /etc/ecs/ecs.config, sing ngemot konfigurasi agen ECS.
Conto kaya apa data pangguna:

#!/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 - paramèter kasebut nuduhake manawa conto kasebut kalebu klompok kanthi jeneng sing diwenehake, yaiku, klompok iki bakal bisa nindakake tugas ing server iki. Kita durung nggawe kluster, nanging kita bakal nggunakake jeneng iki nalika nggawe.

ECS_ENABLE_SPOT_INSTANCE_DRAINING=true - parameter nemtokake yen sinyal ditampa kanggo mateni conto titik, kabeh tugas kudu ditransfer menyang status Draining.

ECS_CONTAINER_STOP_TIMEOUT=1m - parameter nemtokake yen sawise nampa sinyal SIGINT, kabeh tugas duwe 1 menit sadurunge matèni.

ECS_ENGINE_AUTH_TYPE=docker - parameter nuduhake yen skema Docker digunakake minangka mekanisme wewenang

ECS_ENGINE_AUTH_DATA=... - paramèter sambungan menyang registri wadhah pribadi, ing ngendi gambar Docker sampeyan disimpen. Yen umum, sampeyan ora perlu nemtokake apa-apa.

Kanggo tujuan artikel iki, aku bakal nggunakake gambar umum saka Docker Hub, supaya nemtokake paramèter ECS_ENGINE_AUTH_TYPE и ECS_ENGINE_AUTH_DATA ora butuh.

Apik ngerti: Dianjurake kanggo nganyari AMI ajeg, amarga versi anyar nganyari versi Docker, Linux, agen ECS, etc. Supaya ora lali bab iki, sampeyan bisa nyiyapake kabar bab release saka versi anyar. Sampeyan bisa nampa kabar liwat email lan nganyari kanthi manual, utawa sampeyan bisa nulis fungsi Lambda sing bakal kanthi otomatis nggawe versi anyar saka Bukak Cithakan karo AMI dianyari.

EC2 Auto Scaling Group

Auto Scaling Group tanggung jawab kanggo miwiti lan skala kedadean. Grup dikelola ing bagean EC2 -> Auto Scaling -> Auto Scaling Groups.

Cithakan Bukak - pilih cithakan sing digawe ing langkah sadurunge. Kita ninggalake versi standar.

Opsi tuku lan jinis conto - nemtokake jinis kedadean kanggo kluster. Patuhi template peluncuran nggunakake jinis conto saka Cithakan Bukak. Gabungan opsi tuku lan jinis conto ngidini sampeyan ngatur jinis conto kanthi fleksibel. Kita bakal nggunakake.

Pilihan basis On-Demand - nomer reguler, kedadean non-titik sing bakal tansah bisa.

Persentase On-Demand ndhuwur basis - rasio persentase saka reguler lan titik, 50-50 bakal disebarake kanthi merata, 20-80 kanggo saben reguler 4 titik bakal diunggahake. Kanggo tujuan conto iki, aku bakal nuduhake 50-50, nanging ing kasunyatan kita paling kerep nindakake 20-80, ing sawetara kasus 0-100.

Tipe Instance - ing kene sampeyan bisa nemtokake jinis tambahan sing bakal digunakake ing kluster. Kita ora tau nggunakake amarga aku ora ngerti artine critane. Mbok iki amarga watesan ing jinis tartamtu saka kedadean, nanging padha bisa gampang tambah liwat support. Yen sampeyan ngerti aplikasi kasebut, aku bakal seneng maca ing komentar)

Mbangun API Scalable ing AWS Spot Instances

Network - setelan jaringan, pilih VPC lan subnet kanggo mesin, ing kasus paling sampeyan kudu milih kabeh subnets kasedhiya.

Ngimbangi pengimbang - setelan balancer, nanging kita bakal nindakake iki kanthi kapisah, kita ora bakal ndemek apa-apa ing kene. Kir kesehatan uga bakal diatur mengko.

Ukuran klompok - kita nunjukaké watesan ing nomer mesin ing kluster lan nomer mesin sing dikarepake ing wiwitan. Jumlah mesin ing kluster ora bakal kurang saka minimal sing ditemtokake lan luwih saka maksimum, sanajan skala kudu kedadeyan miturut metrik.

Kawicaksanan skala - parameter skala, nanging kita bakal skala adhedhasar tugas ECS sing mlaku, mula kita bakal ngatur skala kasebut mengko.

Proteksi skala-instance - pangayoman saka kedadean saka pambusakan nalika scaling mudhun. Kita ngaktifake supaya ASG ora mbusak mesin sing wis mlaku tugas. Panyedhiya Kapasitas ECS bakal mateni proteksi kanggo kedadeyan sing ora duwe tugas.

Tambah tag — sampeyan bisa nemtokake tag kanggo kedadean (kanggo iki, tandha kedadean anyar kothak centhang kudu dicenthang). Aku nyaranake nemtokake tag Jeneng, banjur kabeh kedadean sing dibukak ing grup bakal duwe jeneng sing padha, lan iku trep kanggo ndeleng ing console.

Mbangun API Scalable ing AWS Spot Instances

Sawise nggawe grup, bukak lan pindhah menyang bagean Konfigurasi Lanjut. Apa ora kabeh opsi katon ing console ing tataran nggawe.

Kawicaksanan mandhek - aturan sing dijupuk menyang akun nalika mbusak kedadean. Padha ditrapake ing urutan. Biasane kita nggunakake gambar ing ngisor iki. First, kedadean karo Cithakan Bukak paling tuwa dibusak (contone, yen kita nganyari AMI, kita nggawe versi anyar, nanging kabeh kedadean ngatur kanggo ngalih menyang). Banjur kedadeyan sing paling cedhak karo jam tagihan sabanjure dipilih. Banjur sing paling tuwa dipilih adhedhasar tanggal peluncuran.

Mbangun API Scalable ing AWS Spot Instances

Apik ngerti: kanggo nganyari kabeh mesin ing kluster, trep kanggo nggunakake Kayata Refresh. Yen sampeyan gabungke iki karo fungsi Lambda saka langkah sadurunge, sampeyan bakal duwe sistem nganyari Kayata kanthi otomatis. Sadurunge nganyari kabeh mesin, sampeyan kudu mateni proteksi skala instance kanggo kabeh instan ing grup kasebut. Ora konfigurasi ing grup, nanging pangayoman saka mesin dhewe, iki rampung ing tab Manajemen Kayata.

Aplikasi Load Balancer lan EC2 Target Group

Balance digawe ing bagean EC2 → Load Balancing → Load Balancers. Kita bakal nggunakake Application Load Balancer; perbandingan macem-macem jinis balancer bisa diwaca ing kaca layanan.

Pamireng - iku ndadekake pangertèn kanggo nggawe bandar 80 lan 443 lan pangalihan saka 80 kanggo 443 nggunakake aturan balancer mengko.

Zona Kasedhiyan — ing umume kasus, kita milih zona aksesibilitas kanggo kabeh wong.

Ngatur Setelan Keamanan — sertifikat SSL kanggo balancer dituduhake ing kene, pilihan sing paling trep yaiku nggawe sertifikat ing ACM. Babagan bedane Keamanan bisa diwaca ing dokumentasi, sampeyan bisa milih kanthi gawan ELBSecurityPolicy-2016-08. Sawise nggawe balancer, sampeyan bakal weruh Jeneng DNS, sing kudu sampeyan atur CNAME kanggo domain sampeyan. Contone, iki katon ing Cloudflare.

Mbangun API Scalable ing AWS Spot Instances

Grup Keamanan - nggawe utawa pilih grup keamanan kanggo balancer, aku nulis liyane babagan iki ing ndhuwur ing Cithakan Bukak EC2 → bagean Setelan jaringan.

Grup target - kita nggawe grup sing tanggung jawab kanggo nuntun panjalukan saka balancer kanggo mesin lan mriksa kasedhiyan kanggo ngganti ing cilik saka masalah. Jinis target kudu Instance, Protokol и Port sembarang, yen sampeyan nggunakake HTTPS kanggo komunikasi antarane balancer lan kedadean, sampeyan kudu ngunggah certificate kanggo wong-wong mau. Kanggo tujuan conto iki, kita ora bakal nindakake iki, kita mung bakal ninggalake port 80.

Kir kesehatan - paramèter kanggo mriksa fungsi layanan. Ing layanan nyata, iki kudu dadi panyuwunan kapisah sing ngetrapake bagean penting saka logika bisnis; kanggo tujuan conto iki, aku bakal ninggalake setelan gawan. Sabanjure, sampeyan bisa milih interval panjalukan, wektu entek, kode sukses, etc. Ing conto kita, kita bakal nuduhake kode Sukses 200-399, amarga gambar Docker sing bakal digunakake ngasilake kode 304.

Mbangun API Scalable ing AWS Spot Instances

Ndhaptar Target - ing kene mobil kanggo grup dipilih, nanging ing kasus iki, iki bakal ditindakake dening ECS, mula kita mung ngliwati langkah iki.

Apik ngerti: ing tingkat balancer sampeyan bisa ngaktifake log sing bakal disimpen ing S3 ing tartamtu format. Saka ing kono padha bisa diekspor menyang layanan pihak katelu kanggo analytics, utawa sampeyan bisa nggawe pitakon SQL langsung ing data ing S3 karo nggunakake Athena. Iku trep lan dianggo tanpa kode tambahan. Aku uga nyaranake nyetel mbusak log saka ember S3 sawise wektu tartamtu.

Definisi Tugas ECS

Ing langkah sadurunge, kita nggawe kabeh sing ana gandhengane karo infrastruktur layanan; saiki kita nerusake kanggo njlèntrèhaké kontaner sing bakal diluncurake. Iki ditindakake ing bagean ECS → Task Definition.

Kompatibilitas jinis peluncuran - pilih EC2.

Peran IAM eksekusi tugas - milih ecsTaskExecutionRole. Nggunakake, log ditulis, akses menyang variabel rahasia diwenehake, lsp.

Ing bagean Definition Container, klik Tambah Container.

gambar - link menyang gambar nganggo kode proyek; contone iki aku bakal nggunakake gambar umum saka Docker Hub bitnami/node-conto: 0.0.1.

Watesan memori - watesan memori kanggo wadhah. Hard Limit - watesan hard, yen wadhah ngluwihi Nilai kasebut, docker matèni printah bakal kaleksanan, wadhah bakal mati langsung. Soft Limit - watesan alus, wadhah bisa ngluwihi nilai kasebut, nanging parameter iki bakal dijupuk menyang akun nalika manggonke tugas ing mesin. Contone, yen mesin wis 4 GiB RAM, lan watesan alus saka wadhah 2048 MiB, mesin iki bisa duwe maksimum 2 mlaku tugas karo wadhah iki. Ing kasunyatan, 4 GiB RAM rada kurang saka 4096 MiB, iki bisa dideleng ing tab ECS Instances ing kluster. Watesan alus ora bisa luwih gedhe tinimbang watesan hard. Penting kanggo ngerti yen ana sawetara kontaner ing siji tugas, banjur watesan kasebut diringkes.

Pemetaan pelabuhan - ing Host port We nunjukaké 0, iki tegese port bakal diutus mbosenke lan bakal teliti dening Target Group. Pelabuhan Kontainer - port ing ngendi aplikasi sampeyan mlaku asring kasebut ing printah eksekusi, utawa ditugasake ing kode aplikasi sampeyan, Dockerfile, lsp. Contone, kita bakal nggunakake 3000 amarga wis kadhaptar ing file docker gambar sing digunakake.

Priksa kesehatan - paramèter mriksa kesehatan wadhah, ora bakal bingung karo sing dikonfigurasi ing Target Group.

lingkungan - setelan lingkungan. unit CPU - padha karo watesan memori, mung bab prosesor. Saben inti prosesor 1024 Unit, supaya yen server duwe prosesor dual-inti lan wadhah disetel kanggo 512, banjur 4 tugas karo wadhah iki bisa dibukak ing siji server. Unit CPU tansah cocog karo jumlah intine, ora bisa kurang, kaya ing memori.

Command - printah kanggo miwiti layanan ing wadhah, kabeh paramèter kasebut dipisahake karo koma. Iki bisa dadi gunicorn, npm, lsp. Yen ora ditemtokake, nilai arahan CMD saka Dockerfile bakal digunakake. We nunjukaké npm,start.

Variabel lingkungan - variabel lingkungan wadhah. Iki bisa uga data teks prasaja utawa variabel rahasia saka Manajer Rahasia utawa Toko Parameter.

Panyimpenan lan Logging - ing kene kita bakal nyetel log ing CloudWatch Logs (layanan kanggo log saka AWS). Kanggo nindakake iki, mung aktifake kothak centang CloudWatch Logs Konfigurasi otomatis. Sawise nggawe Definition Tugas, klompok log bakal digawe kanthi otomatis ing CloudWatch. Kanthi gawan, log disimpen ing salawas-lawase; Aku nyaranake ngganti periode Retensi saka Aja Kadaluwarsa menyang periode sing dibutuhake. Iki rampung ing grup CloudWatch Log, sampeyan kudu ngeklik periode saiki lan milih sing anyar.

Mbangun API Scalable ing AWS Spot Instances

ECS Cluster lan ECS Kapasitas Provider

Pindhah menyang bagean ECS → Kluster kanggo nggawe kluster. Kita milih EC2 Linux + Networking minangka cithakan.

Jeneng klaster - penting banget, kita nggawe kene jeneng sing padha sing ditemtokake ing parameter Cithakan Bukak ECS_CLUSTER, ing kasus kita - DemoApiClusterProd. Centhang kothak Gawe kluster kosong. Opsional, sampeyan bisa ngaktifake Container Insights kanggo ndeleng metrik kanggo layanan ing CloudWatch. Yen sampeyan nindakake kabeh kanthi bener, banjur ing bagean ECS Instances sampeyan bakal weruh mesin sing digawe ing grup Auto Scaling.

Mbangun API Scalable ing AWS Spot Instances

Pindhah menyang tab Panyedhiya Kapasitas lan nggawe anyar. Ayo kula ngelingake sampeyan kudu ngontrol nggawe lan mateni mesin gumantung saka jumlah tugas ECS sing mlaku. Wigati dimangerteni manawa panyedhiya mung bisa ditugasake ing siji klompok.

Klompok skala otomatis - pilih grup sing digawe sadurunge.

Ngatur skala - ngaktifake supaya panyedhiya bisa skala layanan.

Kapasitas target% - apa persentasi saka mesin dimuat karo tugas kita kudu. Yen sampeyan nemtokake 100%, kabeh mesin bakal tansah sibuk karo tugas mlaku. Yen sampeyan nemtokake 50%, setengah saka mobil bakal tansah free. Ing kasus iki, yen ana lompat tajem ing mbukak, taksi anyar bakal langsung njaluk mobil free, tanpa kudu ngenteni kedadean kanggo disebarake.

Ngatur mandap pangayoman - ngaktifake, parameter iki ngidini panyedhiya kanggo mbusak pangayoman saka kedadean saka pambusakan. Iki kedadeyan nalika ora ana tugas aktif ing mesin lan ngidini kapasitas Target%.

Layanan ECS lan persiyapan skala

Langkah pungkasan :) Kanggo nggawe layanan, sampeyan kudu pindhah menyang kluster sing digawe sadurunge ing tab Layanan.

Jinis peluncuran — sampeyan kudu ngeklik Ngalih menyang strategi panyedhiya kapasitas lan pilih panyedhiya sing wis digawe sadurunge.

Mbangun API Scalable ing AWS Spot Instances

Definisi Tugas - pilih Definition Tugas sing wis digawe sadurunge lan revisi.

Jeneng layanan - kanggo ngindhari kebingungan, kita mesthi nuduhake padha karo Tugas Definition.

Jinis layanan - tansah Replica.

Jumlah tugas — nomer sing dipengini saka tugas aktif ing layanan. Parameter iki dikontrol kanthi skala, nanging isih kudu ditemtokake.

Minimal persen sehat и Maksimum persen - nemtokake prilaku tugas sajrone panyebaran. Nilai standar yaiku 100 lan 200, nuduhake yen ing wektu panyebaran, jumlah tugas bakal nambah kaping pirang-pirang, banjur bali menyang nilai sing dikarepake. Yen sampeyan duwe 1 tugas mlaku, min = 0, lan max = 100, banjur sajrone panyebaran bakal mateni, lan sawise sing anyar bakal diunggahake, yaiku, bakal dadi downtime. Yen 1 tugas mlaku, min = 50, maksimal = 150, banjur penyebaran ora bakal kelakon, amarga 1 tugas ora bisa dipérang setengah utawa ditambah kaping pindho.

Jinis panyebaran - ninggalake nganyari Rolling.

Cithakan Panggonan - aturan kanggo manggonke tugas ing mesin. Standar kasebut yaiku AZ Balanced Spread - iki tegese saben tugas anyar bakal diselehake ing conto anyar nganti mesin ing kabeh zona kasedhiyan munggah. Biasane kita nindakake BinPack - CPU lan Spread - AZ; kanthi kabijakan iki, tugas diselehake kanthi padhet ing siji mesin saben CPU. Yen perlu kanggo nggawe mesin anyar, digawe ing zona kasedhiyan anyar.

Mbangun API Scalable ing AWS Spot Instances

Tipe load balancer — pilih Application Load Balancer.

Layanan peran IAM - milih ecsServiceRole.

Jeneng load balancer - pilih imbangan sing digawe sadurunge.

Periode tenggang mriksa kesehatan - ngaso sadurunge nindakake mriksa kesehatan sawise muter metu tugas anyar, kita biasane nyetel kanggo 60 detik.

Wadhah kanggo mbukak imbangan - ing item jeneng klompok Target, pilih grup sing digawe sadurunge, lan kabeh bakal diisi kanthi otomatis.

Mbangun API Scalable ing AWS Spot Instances

Service Auto Scaling - paramèter skala layanan. Pilih Configure Service Auto Scaling kanggo nyetel jumlah layanan sing dikarepake. Kita nyetel jumlah minimal lan maksimal tugas nalika nggawe skala.

Peran IAM kanggo Service Auto Scaling - milih AWSServiceRoleForApplicationAutoScaling_ECSService.

Kawicaksanan skala tugas otomatis - aturan kanggo njongko. Ana 2 jinis:

  1. Pelacakan target - nelusuri metrik target (panggunaan CPU / RAM utawa jumlah panjaluk kanggo saben tugas). Contone, kita pengin beban prosesor rata-rata dadi 85%, nalika dadi luwih dhuwur, tugas anyar bakal ditambahake nganti tekan nilai target. Yen beban luwih murah, mula tugas bakal dicopot, sebaliknya, kajaba proteksi kanggo nyuda skala diaktifake (Pateni skala-in).
  2. Langkah scaling - reaksi kanggo acara sing sewenang-wenang. Ing kene sampeyan bisa ngatur reaksi kanggo acara apa wae (CloudWatch Alarm), nalika kedadeyan, sampeyan bisa nambah utawa mbusak jumlah tugas sing ditemtokake, utawa nemtokake jumlah tugas sing tepat.

Layanan bisa uga duwe sawetara aturan skala, iki bisa migunani, sing utama yaiku supaya ora konflik.

kesimpulan

Yen sampeyan ngetutake instruksi kasebut lan nggunakake gambar Docker sing padha, layanan sampeyan kudu ngasilake kaca kaya iki.

Mbangun API Scalable ing AWS Spot Instances

  1. Kita wis nggawe cithakan miturut sing kabeh mesin ing layanan dibukak. Kita uga sinau carane nganyari mesin nalika cithakan diganti.
  2. Kita wis ngatur pangolahan sinyal mandeg conto titik, supaya ing menit sawise nampa, kabeh tugas mlaku dibusak saka mesin, supaya boten ilang utawa diselani.
  3. We mundhakaken balancer kanggo disebaraké mbukak roto-roto ing mesin.
  4. Kita wis nggawe layanan sing mbukak ing kedadean titik, kang nyuda biaya mesin dening bab 3 kaping.
  5. Kita wis ngatur autoscaling ing loro arah kanggo nangani tambah workloads tanpa biaya downtime.
  6. Kita nggunakake Kapasitas Provider supaya aplikasi ngatur infrastruktur (mesin) lan ora cara liyane.
  7. Kita pancen apikan.

Yen sampeyan duwe lonjakan sing bisa diprediksi, umpamane sampeyan pariwara ing kampanye email gedhe, sampeyan bisa nyetel skala kanthi jadwal.

Sampeyan uga bisa skala adhedhasar data saka macem-macem bagean sistem sampeyan. Contone, kita duwe fungsi ngirim tawaran promosi individu pangguna saka aplikasi seluler. Kadhangkala kampanye dikirim menyang 1M + wong. Sawise panyebaran kasebut, panjaluk API tansah tambah akeh, amarga akeh pangguna mlebu ing aplikasi kasebut bebarengan. Dadi yen kita weruh yen ana pratondho standar sing luwih akeh ing antrian kanggo ngirim kabar push promosi, kita bisa langsung miwiti sawetara mesin tambahan lan tugas kanggo siap kanggo mbukak.

Aku bakal bungah yen sampeyan ngandhani ing komentar kasus sing menarik babagan nggunakake conto titik lan ECS utawa babagan skala.

Ora suwe bakal ana artikel babagan cara ngolah ewonan acara analitis saben detik ing tumpukan tanpa server (kanthi dhuwit) lan cara panyebaran layanan nggunakake GitLab CI lan Terraform Cloud.

Langganan kita, iku bakal menarik!

Mung pangguna pangguna sing bisa melu survey. mlebunggih.

Apa sampeyan nggunakake instance spot ing produksi?

  • 22,2%inggih6

  • 66,7%No18

  • 11,1%Aku sinau bab mau saka artikel lan rencana arep digunakake3

27 pangguna milih. 5 kedhaftar abstained.

Source: www.habr.com

Add a comment