AWS Spot Nümunələrində Ölçəklənən API qurmaq

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?

Ləkə nümunələr hazırda boş olan digər AWS istifadəçilərinin serverləridir və onları böyük endirimlə satırlar (Amazon 90%-ə qədər yazır, təcrübəmizə görə ~3x, regiondan, AZ-dan və nümunə növündən asılı olaraq dəyişir). Onların adi olanlardan əsas fərqi istənilən vaxt söndürə bilmələridir. Buna görə də, uzun müddət biz onları bakirə mühitlər üçün və ya S3-də və ya verilənlər bazasında saxlanan aralıq nəticələrin hesablanması tapşırıqları üçün istifadə etməyin normal olduğuna inanırdıq, lakin satış üçün deyil. İstehsalda ləkələrdən istifadə etməyə imkan verən üçüncü tərəf həlləri var, lakin bizim işimiz üçün bir çox qoltuqağacı var, buna görə də onları həyata keçirmədik. Məqalədə təsvir olunan yanaşma əlavə skriptlər, taclar və s. olmadan tamamilə standart AWS funksionallığı daxilində işləyir.

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.

AWS Spot Nümunələrində Ölçəklənən API qurmaq

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.

AWS Spot Nümunələrində Ölçəklənən API qurmaq

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.

AWS Spot Nümunələrində Ölçəklənən API qurmaq

Xidmət arxitekturası

Bu yazıda danışacağımız xidmətin əsas arxitekturası aşağıdakı diaqramda göstərilmişdir.

AWS Spot Nümunələrində Ölçəklənən API qurmaq

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 ECS agent konfiqurasiyaları.

Bu məqalə üçün ən vacib konfiqurasiya parametrlərindən biri ECS_ENABLE_SPOT_INSTANCE_DRAINING=doğru. Bu parametr aktivləşdirilibsə, ECS spot nümunənin götürüldüyü barədə siqnal alan kimi, üzərində işləyən bütün tapşırıqları Boşaltma statusuna köçürür. Bu nüsxəyə heç bir yeni tapşırıq təyin edilməyəcək; hazırda ona təqdim etmək istəyən tapşırıqlar varsa, onlar ləğv ediləcək. Balansçıdan da istəklər gəlmir. Nümunələrin silinməsi barədə bildiriş faktiki hadisədən 2 dəqiqə əvvəl gəlir. Buna görə də, əgər xidmətiniz 2 dəqiqədən artıq tapşırıqları yerinə yetirmirsə və diskdə heç bir şey saxlamırsa, məlumatı itirmədən spot nümunələrdən istifadə edə bilərsiniz.

Diskə gəldikdə - bu yaxınlarda AWS edilmişdi Elastik Fayl Sistemini (EFS) ECS ilə birlikdə istifadə etmək mümkündür; bu sxemlə hətta disk də maneə deyil, amma biz bunu sınamadıq, çünki prinsipcə vəziyyəti saxlamaq üçün diskə ehtiyacımız yoxdur. Varsayılan olaraq, SIGINT aldıqdan sonra (tapşırıq Boşaltma statusuna köçürüldükdə göndərilir) bütün işləyən tapşırıqlar 30 saniyədən sonra dayandırılacaq, hətta onlar hələ tamamlanmamış olsalar da, bu vaxtı parametrdən istifadə edərək dəyişə bilərsiniz. ECS_CONTAINER_STOP_TIMEOUT. Əsas odur ki, onu spot maşınlar üçün 2 dəqiqədən çox təyin etməyin.

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 Amazon ECS üçün optimallaşdırılmış AMI-lər, istifadə etdiyiniz bölgəni seçin və bunun üçün AMI ID-ni kopyalayın. Məsələn, us-east-1 bölgəsi üçün, yazı zamanı mövcud ID-dir ami-00c7c1cf5bdc913ed. Bu identifikator Fərdi dəyər göstərin elementinə daxil edilməlidir.

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 təlim bunu necə etmək barədə. Yaratdıqdan sonra onu şablonda göstəririk.
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 partlaya bilən hallar.

İ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. bildirişləri qurun yeni versiyaların buraxılması haqqında. Siz e-poçt vasitəsilə bildirişlər ala və əl ilə yeniləyə bilərsiniz və ya yenilənmiş AMI ilə Launch Template-in yeni versiyasını avtomatik yaradacaq Lambda funksiyası yaza 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)

AWS Spot Nümunələrində Ölçəklənən API qurmaq

şə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.

AWS Spot Nümunələrində Ölçəklənən API qurmaq

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.

AWS Spot Nümunələrində Ölçəklənən API qurmaq

bilmək Good: istifadə etmək üçün əlverişli olan klasterdəki bütün maşınları yeniləmək Nümunə Yeniləmə. Bunu əvvəlki addımdakı Lambda funksiyası ilə birləşdirsəniz, tam avtomatlaşdırılmış nümunə yeniləmə sisteminiz olacaq. Bütün maşınları yeniləməzdən əvvəl siz qrupdakı bütün instansiyalar üçün nümunə miqyasının qorunmasını söndürməlisiniz. Qrupdakı konfiqurasiya deyil, maşınların özlərindən qorunma, bu, Nümunə idarəetmə nişanında edilir.

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 xidmət səhifəsi.

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 sertifikat hazırlayın ACM-də. Fərqlər haqqında Təhlükəsizlik Siyasəti da oxumaq olar sənədləşdirmə, siz onu defolt olaraq seçilmiş tərk edə bilərsiniz 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.

AWS Spot Nümunələrində Ölçəklənən API qurmaq

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.

AWS Spot Nümunələrində Ölçəklənən API qurmaq

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 format. Oradan onlar analitika üçün üçüncü tərəf xidmətlərinə ixrac edilə bilər və ya S3-dəki məlumatlara birbaşa SQL sorğuları edə bilərsiniz. Athena istifadə edərək. Bu rahatdır və heç bir əlavə kod olmadan işləyir. Mən həmçinin müəyyən bir müddətdən sonra S3 kovasından logların çıxarılmasını qurmağı məsləhət görürəm.

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 bitnami/node-məsələn: 0.0.1.

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 Docker faylı istifadə olunan şəkil.

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 Sirlər Meneceri və ya Parametrlər Mağazası.

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.

AWS Spot Nümunələrində Ölçəklənən API qurmaq

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.

AWS Spot Nümunələrində Ölçəklənən API qurmaq

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.

AWS Spot Nümunələrində Ölçəklənən API qurmaq

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.

AWS Spot Nümunələrində Ölçəklənən API qurmaq

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.

AWS Spot Nümunələrində Ölçəklənən API qurmaq

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:

  1. 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).
  2. 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.

AWS Spot Nümunələrində Ölçəklənən API qurmaq

  1. 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.
  2. 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.
  3. Yükü maşınlar arasında bərabər paylamaq üçün balanslaşdırıcını qaldırdıq.
  4. 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.
  5. 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.
  6. Biz Capacity Provider-dən istifadə edirik ki, tətbiq infrastrukturu (maşınları) idarə etsin, əksinə deyil.
  7. 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. cədvəl.

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 fərdi təşviqat təkliflərinin göndərilməsi mobil tətbiqin istifadəçiləri. Bəzən 1 milyondan çox insana kampaniya göndərilir. Belə bir paylamadan sonra, bir çox istifadəçi eyni vaxtda tətbiqə daxil olduğundan API-yə müraciətlərdə həmişə böyük artım olur. Beləliklə, tanıtım təkan bildirişlərinin göndərilməsi üçün növbədə daha çox standart göstəricilərin olduğunu görsək, yüklənməyə hazır olmaq üçün dərhal bir neçə əlavə maşın və tapşırıq işə sala bilərik.

Şə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. Daxil olunxahiş edirəm.

İ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

Добавить комментарий