Hamıya salam! Mənim adım Kirill, mən Adapty-də texniki direktoram. Arxitekturamızın əksəriyyəti AWS üzərindədir və bu gün mən istehsal mühitində spot instansiyalardan istifadə etməklə server xərclərini necə 3 dəfə azaltdığımızdan, həmçinin onların avtomatik miqyasını necə quracağımızdan danışacağam. Əvvəlcə onun necə işlədiyinə dair ümumi baxış, sonra isə işə başlamaq üçün ətraflı təlimatlar olacaq.
Spot Nümunələr nədir?
Aşağıda spot nümunələr üçün qiymət tarixçəsini göstərən bir neçə ekran görüntüsü var.
m5.eu-west-1 (İrlandiya) regionunda böyükdür. Qiymət 3 ay ərzində əsasən sabit olub, hazırda 2.9x qənaət edir.
m5.böyük ABŞ-şərq-1 regionunda (N. Virciniya). Qiymət 3 ay ərzində daim dəyişir, hazırda mövcudluq zonasından asılı olaraq 2.3x-dən 2.8x-ə qənaət edir.
t3.us-şərq-1 regionunda kiçik (N.Virciniya). Qiymət 3 aydır sabitdir, hazırda 3.4 dəfə qənaət edir.
Xidmət arxitekturası
Bu yazıda danışacağımız xidmətin əsas arxitekturası aşağıdakı diaqramda göstərilmişdir.
Tətbiq Yükü Balansçısı → EC2 Hədəf Qrupu → Elastik Konteyner Xidməti
Tətbiq Yükü Balanslayıcısı (ALB) EC2 Hədəf Qrupuna (TG) sorğular göndərən balanslaşdırıcı kimi istifadə olunur. TG ALB-lər üçün nümunələrdə portların açılmasına və onların Elastik Konteyner Xidməti (ECS) konteynerlərinin portlarına qoşulmasına cavabdehdir. ECS, Docker konteynerlərini idarə edən AWS-də Kubernetes-in analoqudur.
Bir nümunədə eyni portları olan bir neçə işləyən konteyner ola bilər, ona görə də biz onları sabit olaraq təyin edə bilmərik. ECS TG-yə deyir ki, o, yeni tapşırığı işə salır (Kubernetes terminologiyasında buna pod deyilir), o, nümunədə pulsuz portları yoxlayır və onlardan birini işə salınmış tapşırığa təyin edir. TG, həmçinin sağlamlıq yoxlanışından istifadə edərək nümunənin və API-nin üzərində işlədiyini mütəmadi olaraq yoxlayır və hər hansı problem görərsə, ora sorğu göndərməyi dayandırır.
EC2 Avtomatik Ölçmə Qrupları + ECS Tutum Provayderləri
Yuxarıdakı diaqramda EC2 Auto Scaling Groups (ASG) xidməti göstərilmir. Adından başa düşə bilərsiniz ki, o, misalların miqyasına görə məsuliyyət daşıyır. Bununla belə, son vaxtlara qədər AWS-in ECS-dən işləyən maşınların sayını idarə etmək üçün daxili qabiliyyəti yox idi. ECS, tapşırıqların sayını, məsələn, CPU istifadəsi, RAM və ya sorğuların sayı ilə ölçməyə imkan verdi. Ancaq tapşırıqlar bütün pulsuz nümunələri tuturdusa, yeni maşınlar avtomatik olaraq yaradılmadı.
Bu, ECS Capacity Providerlərin (ECS CP) gəlişi ilə dəyişdi. İndi ECS-də hər bir xidmət ASG ilə əlaqələndirilə bilər və əgər tapşırıqlar işləyən nümunələrə uyğun gəlmirsə, o zaman yeniləri qaldırılacaq (lakin müəyyən edilmiş ASG məhdudiyyətləri daxilində). Bu da əks istiqamətdə işləyir, əgər ECS CP boş nümunələri tapşırıqsız görürsə, o zaman ASG-yə onları bağlamaq əmrini verəcək. ECS CP nümunə yükünün hədəf faizini təyin etmək qabiliyyətinə malikdir, beləliklə müəyyən sayda maşın tapşırıqları tez miqyaslaşdırmaq üçün həmişə pulsuzdur; Bu barədə bir az sonra danışacağam.
EC2 Başlama Şablonları
Bu infrastrukturun yaradılması haqqında təfərrüata varmadan əvvəl danışacağım sonuncu xidmət EC2 Launch Templates-dir. Bunu hər dəfə sıfırdan təkrarlamamaq üçün bütün maşınların işə düşəcəyi bir şablon yaratmağa imkan verir. Burada başlamaq üçün maşının növünü, təhlükəsizlik qrupunu, disk şəklini və bir çox digər parametrləri seçə bilərsiniz. Siz həmçinin bütün işə salınmış nümunələrə yüklənəcək istifadəçi məlumatlarını təyin edə bilərsiniz. Siz istifadəçi məlumatlarında skriptləri işlədə bilərsiniz, məsələn, faylın məzmununu redaktə edə bilərsiniz
Bu məqalə üçün ən vacib konfiqurasiya parametrlərindən biri
Diskə gəldikdə - bu yaxınlarda AWS
Xidmətin yaradılması
Təsvir edilən xidməti yaratmağa davam edək. Prosesdə yuxarıda qeyd olunmayan bir neçə faydalı məqamı əlavə olaraq təsvir edəcəyəm. Ümumiyyətlə, bu addım-addım təlimatdır, lakin mən bəzi çox əsas və ya əksinə, çox konkret halları nəzərdən keçirməyəcəyəm. Bütün hərəkətlər AWS vizual konsolunda həyata keçirilir, lakin CloudFormation və ya Terraform istifadə edərək proqramlı şəkildə təkrarlana bilər. Adapty-də biz Terraformdan istifadə edirik.
EC2 Başlama Şablonu
Bu xidmət istifadə olunacaq maşınların konfiqurasiyasını yaradır. Şablonlar EC2 -> Nümunələr -> Şablonları işə salın bölməsində idarə olunur.
Amazon maşın şəkli (AMI) — bütün instansiyaların işə salınacağı disk şəklini təyin edin. ECS üçün əksər hallarda Amazon-dan optimallaşdırılmış görüntüdən istifadə etməyə dəyər. O, müntəzəm olaraq yenilənir və ECS-nin işləməsi üçün lazım olan hər şeyi ehtiva edir. Cari şəkil identifikatorunu öyrənmək üçün səhifəyə keçin
Nümunə növü — nümunənin növünü göstərin. Tapşırıqınıza ən uyğun olanı seçin.
Açar cütü (giriş) — lazım gələrsə, SSH vasitəsilə instansiyaya qoşula biləcəyiniz sertifikatı göstərin.
Şəbəkə parametrləri — şəbəkə parametrlərini təyin edin. Şəbəkə platforması əksər hallarda Virtual Şəxsi Bulud (VPC) olmalıdır. Təhlükəsizlik qrupları — nümunələriniz üçün təhlükəsizlik qrupları. Nümunələr qarşısında balanslaşdırıcıdan istifadə edəcəyimiz üçün mən burada yalnız balanslaşdırıcıdan gələn əlaqələrə icazə verən bir qrup göstərməyi məsləhət görürəm. Yəni, biri balanslaşdırıcı üçün, 2 (http) və 80 (https) portlarında istənilən yerdən daxil olan bağlantılara imkan verən, ikincisi isə balanslaşdırıcı qrupundan istənilən portlarda daxil olan bağlantılara imkan verən maşınlar üçün 443 təhlükəsizlik qrupuna sahib olacaqsınız. . Hər iki qrupdakı çıxış əlaqələri TCP protokolundan istifadə edərək bütün ünvanların bütün portlarına açılmalıdır. Siz gedən bağlantılar üçün portları və ünvanları məhdudlaşdıra bilərsiniz, lakin sonra qapalı portda nəyəsə daxil olmağa çalışmadığınıza daim nəzarət etməlisiniz.
Yaddaş (həcmlər) — maşınlar üçün disk parametrlərini təyin edin. Disk ölçüsü AMI-də göstəriləndən az ola bilməz; ECS Optimized üçün 30 GiB-dir.
Qabaqcıl detallar — əlavə parametrləri təyin edin.
Satınalma seçimi — spot nümunələri almaq istəməyimiz. İstəyirik, lakin bu xananı burada qeyd etməyəcəyik; biz onu Avtomatik Ölçmə Qrupunda konfiqurasiya edəcəyik, orada daha çox seçim var.
IAM nümunə profili — instansiyaların işə salınacağı rolu göstərin. Nümunələrin ECS-də işləməsi üçün onlar adətən rolda olan icazələrə ehtiyac duyurlar ecsInstanceRole. Bəzi hallarda yaradıla bilər, yoxsa, burada
Sonra bir çox parametr var, əsasən hər yerdə standart dəyərləri tərk edə bilərsiniz, lakin onların hər birinin aydın təsviri var. Mən həmişə EBS-optimallaşdırılmış nümunəni və istifadə edildiyi təqdirdə T2/T3 Limitsiz seçimlərini aktivləşdirirəm
İstifadəçi məlumatları — istifadəçi məlumatlarını göstərir. Faylı redaktə edəcəyik /etc/ecs/ecs.config
, ECS agent konfiqurasiyasını ehtiva edir.
İstifadəçi məlumatlarının necə görünə biləcəyinə bir nümunə:
#!/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 nümunənin verilmiş ada malik klasterə aid olduğunu göstərir, yəni bu klaster öz vəzifələrini bu serverdə yerləşdirə biləcək. Biz hələ klaster yaratmamışıq, lakin onu yaradarkən bu addan istifadə edəcəyik.
ECS_ENABLE_SPOT_INSTANCE_DRAINING=true
— parametr müəyyən edir ki, spot nümunəni söndürmək üçün siqnal qəbul edildikdə, onun üzərindəki bütün tapşırıqlar Boşaltma statusuna köçürülməlidir.
ECS_CONTAINER_STOP_TIMEOUT=1m
- parametr SIGINT siqnalını aldıqdan sonra bütün tapşırıqların öldürülməzdən əvvəl 1 dəqiqə olduğunu göstərir.
ECS_ENGINE_AUTH_TYPE=docker
— parametr avtorizasiya mexanizmi kimi Docker sxeminin istifadə olunduğunu göstərir
ECS_ENGINE_AUTH_DATA=...
— Docker şəkillərinizin saxlandığı şəxsi konteyner reyestrinə qoşulma parametrləri. Əgər ictimaidirsə, onda heç nəyi qeyd etməyə ehtiyac yoxdur.
Bu məqalənin məqsədləri üçün mən Docker Hub-dan ictimai təsvirdən istifadə edəcəyəm, ona görə də parametrləri göstərin ECS_ENGINE_AUTH_TYPE
и ECS_ENGINE_AUTH_DATA
ehtiyac yoxdur.
bilmək Good: AMI-ni mütəmadi olaraq yeniləmək tövsiyə olunur, çünki yeni versiyalar Docker, Linux, ECS agent və s. versiyalarını yeniləyir. Bunu unutmamaq üçün siz edə bilərsiniz.
EC2 Avtomatik Ölçmə Qrupu
Auto Scaling Group nümunələri işə salmaq və miqyaslaşdırmaq üçün məsuliyyət daşıyır. Qruplar EC2 -> Auto Scaling -> Auto Scaling Groups bölməsində idarə olunur.
Şablonu işə salın — əvvəlki addımda yaradılmış şablonu seçin. Standart versiyanı tərk edirik.
Satınalma seçimləri və nümunə növləri — klaster üçün nümunələrin növlərini təyin edin. Başlamağa riayət etmək şablonu, Başlama Şablonundan nümunə növündən istifadə edir. Alış seçimlərini və nümunə növlərini birləşdirin, nümunə növlərini çevik şəkildə konfiqurasiya etməyə imkan verir. Biz istifadə edəcəyik.
Könüllü On-Demand bazası — həmişə işləyəcək müntəzəm, ləkəsiz nümunələrin sayı.
Bazadan yuxarı tələb üzrə faiz — adi və spot instansiyaların faiz nisbəti, 50-50 bərabər paylanacaq, hər adi instansiya üçün 20-80 4 spot artırılacaq. Bu nümunənin məqsədləri üçün mən 50-50 göstərəcəyəm, amma əslində biz çox vaxt 20-80, bəzi hallarda 0-100 edirik.
Vəziyyət növləri — burada klasterdə istifadə olunacaq əlavə nümunə növlərini təyin edə bilərsiniz. Hekayənin mənasını başa düşmədiyim üçün heç vaxt istifadə etmədik. Ola bilsin ki, bu, xüsusi nümunə növləri üzrə məhdudiyyətlərlə bağlıdır, lakin dəstək vasitəsilə onları asanlıqla artırmaq olar. Tətbiqi bilirsinizsə, şərhlərdə oxumağa şad olaram)
şəbəkə — şəbəkə parametrləri, maşınlar üçün VPC və alt şəbəkələri seçin, əksər hallarda bütün mövcud alt şəbəkələri seçməlisiniz.
Yük tarazlığı - balanslaşdırıcı parametrləri, lakin biz bunu ayrıca edəcəyik, burada heç bir şeyə toxunmayacağıq. Sağlamlıq yoxlamaları sonra da konfiqurasiya ediləcək.
Qrup ölçüsü — biz başlanğıcda klasterdəki maşınların sayına və istədiyiniz maşın sayına dair məhdudiyyətləri göstəririk. Klasterdəki maşınların sayı heç vaxt müəyyən edilmiş minimumdan az və maksimumdan çox olmayacaq, hətta miqyaslama ölçülərə görə baş versə belə.
Ölçmə siyasətləri — miqyaslama parametrləri, lakin biz işləyən ECS tapşırıqları əsasında miqyaslandıracağıq, ona görə də miqyasını daha sonra konfiqurasiya edəcəyik.
Nümunə miqyasının qorunması — miqyasını azaldarkən nümunələrin silinmədən qorunması. ASG işləyən tapşırıqları olan maşını silməməsi üçün onu aktivləşdiririk. ECS Capacity Provider tapşırıqları olmayan nümunələr üçün mühafizəni söndürəcək.
Etiketlər əlavə edin — nümunələr üçün teqlər təyin edə bilərsiniz (bunun üçün Yeni nümunələri etiketləyin onay qutusu yoxlanılmalıdır). Ad etiketini göstərməyi tövsiyə edirəm, sonra qrup daxilində işə salınan bütün nümunələr eyni ada sahib olacaq və onlara konsolda baxmaq rahatdır.
Qrupu yaratdıqdan sonra onu açın və Qabaqcıl konfiqurasiyalar bölməsinə keçin.Yaradılma mərhələsində niyə bütün seçimlər konsolda görünmür.
İşə xitam vermə qaydaları — nümunələri silərkən nəzərə alınan qaydalar. Onlar ardıcıllıqla tətbiq olunur. Biz adətən aşağıdakı şəkildəkilərdən istifadə edirik. Birincisi, ən köhnə Başlama Şablonu olan nümunələr silinir (məsələn, AMI-ni yeniləsək, yeni versiya yaratdıq, lakin bütün nümunələr ona keçə bildi). Sonra növbəti hesablaşma saatına ən yaxın olan nümunələr seçilir. Və sonra ən köhnələri işə salınma tarixinə əsasən seçilir.
bilmək Good: istifadə etmək üçün əlverişli olan klasterdəki bütün maşınları yeniləmək
Application Load Balancer və EC2 Hədəf Qrupu
Balanslaşdırıcı EC2 → Yük balansı → Yük balanslaşdırıcıları bölməsində yaradılmışdır. Biz Tətbiq Yükü Balanslayıcısından istifadə edəcəyik; müxtəlif növ balanslaşdırıcıların müqayisəsini burada oxuya bilərsiniz
Dinləyicilər - 80 və 443 portlarını etmək və balanslaşdırıcı qaydalardan istifadə edərək sonradan 80-dən 443-ə yönləndirmək məntiqlidir.
Mövcudluq zonaları — əksər hallarda biz hamı üçün əlçatanlıq zonaları seçirik.
Təhlükəsizlik Parametrlərini konfiqurasiya edin — balanslaşdırıcı üçün SSL sertifikatı burada göstərilib, ən əlverişli seçimdir ELBSecurityPolicy-2016-08
. Balanslaşdırıcı yaratdıqdan sonra onu görəcəksiniz DNS adı, domeniniz üçün CNAME konfiqurasiya etmək lazımdır. Məsələn, Cloudflare-də belə görünür.
Təhlükəsizlik Qrupu — balanslaşdırıcı üçün təhlükəsizlik qrupu yaradın və ya seçin, mən bu barədə daha çox yuxarıda EC2 Başlama Şablonu → Şəbəkə parametrləri bölməsində yazdım.
Hədəf qrupu — biz balanslaşdırıcıdan gələn sorğuları maşınlara yönləndirmək və problem yarandıqda onları əvəz etmək üçün onların mövcudluğunu yoxlamaq üçün cavabdeh olan qrup yaradırıq. Hədəf növü Nümunə olmalıdır, protokol и port hər hansı, balanslaşdırıcı və nümunələr arasında əlaqə üçün HTTPS istifadə edirsinizsə, onlara sertifikat yükləməlisiniz. Bu nümunənin məqsədləri üçün biz bunu etməyəcəyik, sadəcə olaraq 80 portunu tərk edəcəyik.
Sağlamlıq yoxlamaları — xidmətin funksionallığını yoxlamaq üçün parametrlər. Həqiqi bir xidmətdə bu, biznes məntiqinin vacib hissələrini həyata keçirən ayrıca bir sorğu olmalıdır; bu nümunənin məqsədləri üçün standart parametrləri tərk edəcəyəm. Bundan sonra siz sorğu intervalı, fasilə, uğur kodları və s. seçə bilərsiniz. Bizim nümunəmizdə Uğur kodları 200-399 göstəriləcək, çünki istifadə olunacaq Docker şəkli 304 kodunu qaytarır.
Hədəfləri Qeydiyyatdan keçirin — burada qrup üçün avtomobillər seçilir, lakin bizim vəziyyətimizdə bunu ECS edəcək, ona görə də bu addımı atlayırıq.
bilmək Good: balanslaşdırıcı səviyyəsində müəyyən bir müddətdə S3-də saxlanacaq qeydləri aktivləşdirə bilərsiniz
ECS Tapşırıq Tərifi
Əvvəlki addımlarda xidmət infrastrukturu ilə bağlı hər şeyi yaratdıq, indi işə salacağımız konteynerlərin təsvirinə keçirik. Bu, ECS → Task Definitions bölməsində edilir.
Başlama növü uyğunluğu - EC2 seçin.
Tapşırıqların icrası IAM rolu - seçin ecsTaskExecutionRole
. Ondan istifadə edərək loglar yazılır, gizli dəyişənlərə giriş verilir və s.
Konteyner Tərifləri bölməsində Konteyner Əlavə et düyməsini klikləyin.
təsvir — layihə kodu ilə şəkilə keçid; bu misal üçün mən Docker Hub-dan ictimai təsvirdən istifadə edəcəyəm
Yaddaş Limitləri — konteyner üçün yaddaş məhdudiyyətləri. Sərt Limit — sərt limit, əgər konteyner göstərilən dəyərdən kənara çıxarsa, docker kill əmri yerinə yetiriləcək, konteyner dərhal öləcək. Yumşaq limit — yumşaq hədd, konteyner göstərilən dəyərdən kənara çıxa bilər, lakin bu parametr maşınlara tapşırıqlar yerləşdirərkən nəzərə alınacaq. Məsələn, bir maşının 4 GiB RAM-ı varsa və konteynerin yumşaq limiti 2048 MiB-dirsə, bu maşın bu konteynerlə maksimum 2 işləyən tapşırığa malik ola bilər. Əslində, 4 GiB RAM 4096 MiB-dən bir qədər azdır, buna çoxluqdakı ECS Nümunələri sekmesinde baxmaq olar. Yumşaq limit sərt limitdən çox ola bilməz. Anlamaq lazımdır ki, bir tapşırıqda bir neçə konteyner varsa, onların hədləri yekunlaşdırılır.
Port xəritələri - in Host portu Biz 0-ı göstəririk, bu o deməkdir ki, port dinamik olaraq təyin olunacaq və Hədəf Qrupu tərəfindən izlənəcək. Konteyner limanı — tətbiqinizin işlədiyi port tez-tez icra əmrində göstərilir və ya proqram kodunuzda, Dockerfile və s.-də təyin olunur. Nümunəmiz üçün 3000-dən istifadə edəcəyik, çünki o siyahıdadır
Sağlamlıq müayinəsi — Hədəf Qrupunda konfiqurasiya edilmiş ilə qarışdırılmamaq üçün konteyner sağlamlığı yoxlama parametrləri.
ətraf mühit - ətraf mühit parametrləri. CPU vahidləri - Yaddaş məhdudiyyətlərinə bənzər, yalnız prosessor haqqında. Hər bir prosessor nüvəsi 1024 vahiddir, belə ki, əgər serverdə ikinüvəli prosessor varsa və konteyner 512-yə təyin edilibsə, bu konteynerlə 4 tapşırıq bir serverdə işə salına bilər. CPU vahidləri həmişə nüvələrin sayına uyğundur; yaddaşda olduğu kimi onlardan bir qədər az ola bilməz.
Komanda — konteyner daxilində xidmətə başlamaq əmri, bütün parametrlər vergüllə ayrılmış şəkildə göstərilir. Bu gunicorn, npm və s. ola bilər. Göstərilməsə, Dockerfile-dən CMD direktivinin dəyəri istifadə olunacaq. işarə edirik npm,start
.
Ətraf mühit dəyişənləri — konteyner mühiti dəyişənləri. Bu sadə mətn məlumatları və ya gizli dəyişənlər ola bilər
Saxlama və Giriş — burada biz CloudWatch Logs-da (AWS-dən qeydlər üçün xidmət) daxil olmağı quracağıq. Bunu etmək üçün, sadəcə olaraq CloudWatch Qeydlərini Avtomatik konfiqurasiya et onay qutusunu aktivləşdirin. Tapşırıq Tərifini yaratdıqdan sonra CloudWatch-də avtomatik olaraq bir qrup qeyd yaradılacaq. Varsayılan olaraq, qeydlər qeyri-müəyyən müddətə saxlanılır; Saxlama müddətini Heç vaxt Bitməzdən tələb olunan müddətə dəyişməyi tövsiyə edirəm. Bu, CloudWatch Log qruplarında edilir, cari dövrə klikləyib yenisini seçməlisiniz.
ECS Cluster və ECS Capacity Provider
Klaster yaratmaq üçün ECS → Clusters bölməsinə keçin. Şablon olaraq EC2 Linux + Networking seçirik.
Klaster adı - çox vacibdir, biz burada Şablon Başlat parametrində göstərildiyi kimi eyni adı edirik ECS_CLUSTER
, bizim vəziyyətimizdə - DemoApiClusterProd
. Boş klaster yaradın onay qutusunu yoxlayın. İstəyə görə, CloudWatch-də xidmətlər üçün ölçülərə baxmaq üçün Konteyner İnsightlarını aktivləşdirə bilərsiniz. Hər şeyi düzgün etmisinizsə, onda ECS Nümunələri bölməsində Avtomatik Ölçmə qrupunda yaradılmış maşınları görəcəksiniz.
Taba keçin Tutum təminatçıları və yenisini yaradın. Nəzərinizə çatdırım ki, işləyən ECS tapşırıqlarının sayından asılı olaraq maşınların yaradılmasına və bağlanmasına nəzarət etmək lazımdır. Qeyd etmək vacibdir ki, provayder yalnız bir qrupa təyin edilə bilər.
Avtomatik Ölçəkləmə qrupu — əvvəllər yaradılmış qrupu seçin.
İdarə olunan miqyaslama — provayderin xidməti genişləndirə bilməsi üçün onu aktivləşdirin.
Hədəf tutumu % — tapşırıqlarla yüklənmiş maşınların neçə faizi bizə lazımdır. 100% göstərsəniz, bütün maşınlar həmişə işlək tapşırıqlarla məşğul olacaqlar. Əgər 50%-ni göstərsəniz, avtomobillərin yarısı həmişə pulsuz olacaq. Bu halda, yükdə kəskin sıçrayış olarsa, yeni taksilər instansiyaların yerləşdirilməsini gözləmədən dərhal pulsuz avtomobillərə çatacaqlar.
İdarə olunan xitam qorunması — aktiv et, bu parametr provayderə nümunələrin qorunmasını silinmədən çıxarmağa imkan verir. Bu, maşında aktiv tapşırıq olmadıqda baş verir və Hədəf tutumu% imkan verir.
ECS Xidməti və miqyaslı quraşdırma
Son addım :) Xidmət yaratmaq üçün Xidmətlər sekmesinde əvvəllər yaradılmış klasterə keçmək lazımdır.
Başlatma növü — Tutum provayderi strategiyasına keçin üzərinə klikləməli və əvvəllər yaradılmış provayderləri seçməlisiniz.
Tapşırıq tərifi — əvvəllər yaradılmış Tapşırıq Tərifini və onun düzəlişini seçin.
Xidmət adı — qarışıqlığın qarşısını almaq üçün biz həmişə Task Definition ilə eynisini göstəririk.
Xidmət növü - həmişə Replika.
Tapşırıqların sayı — xidmətdə istənilən aktiv tapşırıqların sayı. Bu parametr miqyasla idarə olunur, lakin hələ də müəyyən edilməlidir.
Minimum sağlam faiz и Maksimum faiz — yerləşdirmə zamanı tapşırıqların davranışını müəyyən etmək. Varsayılan dəyərlər 100 və 200-dür, bu, yerləşdirmə zamanı tapşırıqların sayının bir neçə dəfə artacağını və sonra istədiyiniz dəyərə qayıdacağını göstərir. Əgər sizdə min=1 və max=0 işləyən 100 tapşırığınız varsa, o zaman yerləşdirmə zamanı öldürüləcək və bundan sonra yenisi qaldırılacaq, yəni iş vaxtı olacaq. Əgər 1 tapşırıq işləyirsə, min=50, max=150, o zaman yerləşdirmə ümumiyyətlə baş verməyəcək, çünki 1 tapşırığı yarıya bölmək və ya bir yarım dəfə artırmaq olmaz.
Yerləşdirmə növü — Rolling yeniləməsini buraxın.
Yerləşdirmə Şablonları — maşınlarda tapşırıqların yerləşdirilməsi qaydalarını. Defolt AZ Balanced Spread-dir - bu o deməkdir ki, bütün mövcudluq zonalarında maşınlar yüksələnə qədər hər yeni tapşırıq yeni nümunəyə yerləşdiriləcək. Biz adətən BinPack - CPU və Spread - AZ edirik; bu siyasətlə tapşırıqlar CPU başına bir maşında mümkün qədər sıx şəkildə yerləşdirilir. Yeni maşın yaratmaq lazımdırsa, o, yeni mövcudluq zonasında yaradılır.
Yük balanslaşdırıcı növü — Application Load Balancer seçin.
Xidmət IAM rolu - seçin ecsServiceRole
.
Yük balanslaşdırıcının adı — əvvəllər yaradılmış balanslaşdırıcını seçin.
Sağlamlıq yoxlaması üçün güzəşt müddəti — yeni tapşırığı yerinə yetirdikdən sonra sağlamlıq yoxlaması etməzdən əvvəl fasilə verin, biz bunu adətən 60 saniyəyə təyin edirik.
Balans yükləmək üçün konteyner — Hədəf qrupunun adı elementində əvvəllər yaradılmış qrupu seçin və hər şey avtomatik olaraq doldurulacaq.
Avtomatik Ölçəkləmə Xidməti — xidmət miqyasının parametrləri. Xidmətinizin istədiyiniz sayını tənzimləmək üçün Xidmətin Avtomatik Ölçələnməsini Konfiqurasiya et seçin. Ölçəkləmə zamanı tapşırıqların minimum və maksimum sayını təyin edirik.
Avtomatik Xidmət Ölçüsü üçün IAM rolu - seçin AWSServiceRoleForApplicationAutoScaling_ECSService
.
Avtomatik tapşırıq miqyası siyasətləri — miqyaslaşdırma qaydaları. 2 növü var:
- Hədəf izləmə — hədəf ölçülərini izləmək (CPU/RAM istifadəsi və ya hər tapşırıq üçün sorğuların sayı). Məsələn, orta prosessor yükünün 85% olmasını istəyirik, daha yüksək olduqda, hədəf dəyərə çatana qədər yeni vəzifələr əlavə olunacaq. Yük daha azdırsa, miqyasda azalmaya qarşı qorunma işə salınmasa, tapşırıqlar silinəcəkdir (Ölçməni deaktiv edin).
- Addım miqyası - ixtiyari hadisəyə reaksiya. Burada hər hansı bir hadisəyə reaksiyanı konfiqurasiya edə bilərsiniz (CloudWatch Alarm), bu baş verdikdə, müəyyən edilmiş sayda tapşırıqları əlavə edə və ya silə və ya tapşırıqların dəqiq sayını təyin edə bilərsiniz.
Bir xidmətin bir neçə miqyaslama qaydaları ola bilər, bu faydalı ola bilər, əsas odur ki, onların bir-biri ilə ziddiyyət təşkil etməsin.
Nəticə
Təlimatlara əməl etmisinizsə və eyni Docker şəklini istifadə etmisinizsə, xidmətiniz buna bənzər bir səhifə qaytarmalıdır.
- Xidmətdəki bütün maşınların işə salındığı bir şablon yaratdıq. Şablon dəyişdikdə maşınları necə yeniləməyi də öyrəndik.
- Biz spot instansiyanın dayanma siqnalının işlənməsini konfiqurasiya etdik, ona görə də onu qəbul etdikdən sonra bir dəqiqə ərzində bütün işləyən tapşırıqlar maşından silinir, beləliklə heç nə itirilmir və ya kəsilmir.
- Yükü maşınlar arasında bərabər paylamaq üçün balanslaşdırıcını qaldırdıq.
- Biz spot instansiyalarda işləyən bir xidmət yaratmışıq ki, bu da maşın xərclərini təxminən 3 dəfə azaldır.
- Artan iş yüklərini dayandırmaq üçün xərc çəkmədən idarə etmək üçün hər iki istiqamətdə avtomatik ölçməni konfiqurasiya etdik.
- Biz Capacity Provider-dən istifadə edirik ki, tətbiq infrastrukturu (maşınları) idarə etsin, əksinə deyil.
- Biz əlayıq.
Əgər yüklənmədə proqnozlaşdırıla bilən sıçrayışlarınız varsa, məsələn, böyük bir e-poçt kampaniyasında reklam edirsinizsə, miqyasını aşağıdakılarla qura bilərsiniz.
Siz həmçinin sisteminizin müxtəlif hissələrindən alınan məlumatlara əsaslanaraq ölçə bilərsiniz. Məsələn, bizdə funksionallıq var
Şərhlərdə spot instansiyalardan və ECS-dən istifadənin maraqlı hallarını və ya miqyasla bağlı bir şey söyləsəniz, şad olaram.
Tezliklə əsasən serversiz bir yığında (pulla) saniyədə minlərlə analitik hadisəni necə emal etdiyimiz və GitLab CI və Terraform Cloud istifadə edərək xidmətlərin yerləşdirilməsinin necə işlədiyi haqqında məqalələr olacaq.
Bizə abunə olun, maraqlı olacaq!
Sorğuda yalnız qeydiyyatdan keçmiş istifadəçilər iştirak edə bilər.
İstehsalda spot nümunələrdən istifadə edirsinizmi?
-
22,2%Bəli 6
-
66,7%№18
-
11,1%Mən onlar haqqında məqalədən öyrəndim və onlardan istifadə etməyi planlaşdırıram3
27 istifadəçi səs verib. 5 istifadəçi bitərəf qalıb.
Mənbə: www.habr.com