Serversiz proqramlar yaratmaq üçün məsləhətlər və resurslar

Serversiz proqramlar yaratmaq üçün məsləhətlər və resurslar
Son illərdə serversiz texnologiyalar sürətlə populyarlıq qazansa da, hələ də onlarla bağlı çoxlu yanlış təsəvvürlər və qorxular mövcuddur. Satıcıdan asılılıq, alətlər, məsrəflərin idarə edilməsi, soyuq başlanğıc, monitorinq və inkişaf dövrü serversiz texnologiyalara gəldikdə bütün isti mövzulardır. Bu yazıda biz qeyd olunan bəzi mövzuları araşdıracağıq, həmçinin yeni başlayanlara güclü, çevik və sərfəli serversiz proqramlar yaratmağa kömək etmək üçün məsləhətlər və faydalı məlumat mənbələrinə keçidlər paylaşacağıq.

Serversiz Texnologiyalar Haqqında Yanlış Düşüncələr

Bir çox insanlar serversiz və serversiz emalın (Xidmət kimi fəaliyyət göstərir, FaaS) demək olar ki, eyni şeydir. Bu o deməkdir ki, fərq çox da böyük deyil və yenilik təqdim etməyə dəyər. AWS Lambda serversiz dövrünün ulduzlarından biri və serversiz arxitekturanın ən populyar elementlərindən biri olsa da, bu arxitektura FaaS-dən daha çoxdur.

Serversiz texnologiyaların əsas prinsipi ondan ibarətdir ki, siz infrastrukturunuzu idarə etmək və miqyasını artırmaq barədə narahat olmaq məcburiyyətində deyilsiniz, yalnız istifadə etdiyiniz üçün ödəniş edirsiniz. Bir çox xidmətlər bu meyarlara uyğun gəlir - AWS DynamoDB, S3, SNS və ya SQS, Graphcool, Auth0, Now, Netlify, Firebase və bir çox başqaları. Ümumiyyətlə, serversiz infrastrukturun idarə edilməsinə və miqyasda optimallaşdırılmasına ehtiyac olmadan bulud hesablamasının tam gücündən istifadə etmək deməkdir. Bu, həm də o deməkdir ki, infrastruktur səviyyəsində təhlükəsizlik artıq sizi narahat etmir və bu, təhlükəsizlik standartlarına cavab vermənin çətinliyi və mürəkkəbliyi nəzərə alınmaqla böyük faydadır. Nəhayət, sizə təqdim olunan infrastrukturu almaq məcburiyyətində deyilsiniz.

Serversiz "ruh vəziyyəti" hesab edilə bilər: həllər hazırlayarkən müəyyən bir mentalitet. Hər hansı bir infrastrukturun saxlanılmasını tələb edən yanaşmalardan çəkinin. Serversiz yanaşma ilə biz layihəyə bilavasitə təsir edən və istifadəçilərimizə fayda gətirən vəzifələrin həllinə vaxt sərf edirik: biz davamlı biznes məntiqi yaradır, istifadəçi interfeyslərini inkişaf etdirir, adaptiv və etibarlı API-lər inkişaf etdiririk.

Məsələn, pulsuz mətn axtarış platformasını idarə etməkdən və saxlamaqdan qaçınmaq mümkündürsə, biz bunu edəcəyik. Tətbiqlərin qurulmasına bu cür yanaşma bazara çıxma müddətini xeyli sürətləndirə bilər, çünki artıq mürəkkəb infrastrukturun idarə edilməsi haqqında düşünməyə ehtiyac yoxdur. İnfrastruktur idarəçiliyinin məsuliyyətlərini və xərclərini aradan qaldırın və diqqətinizi müştərilərinizin ehtiyac duyduğu tətbiq və xidmətlərin qurulmasına yönəldin. Patrick Debois bu yanaşma adlandırdı 'xidmətli', termin serversiz icmada qəbul edilir. Funksiyalar yerləşdirilə bilən modullar kimi xidmətlərə keçid kimi düşünülməlidir (bütün kitabxana və ya veb tətbiqini yerləşdirmək əvəzinə). Bu, tətbiqi yerləşdirmə və dəyişiklikləri idarə etmək üçün inanılmaz detallılıq təmin edir. Əgər siz funksiyaları bu şəkildə yerləşdirə bilmirsinizsə, o zaman bu, funksiyaların həddən artıq çox tapşırıq yerinə yetirdiyini və refaktorasiya edilməli olduğunu göstərə bilər.

Bəziləri bulud proqramlarını inkişaf etdirərkən satıcıdan asılılıqdan çaş-baş qalırlar. Eyni şey serversiz texnologiyalara da aiddir və bu, çətin ki, yanlış fikirdir. Təcrübəmizə görə, AWS Lambda-nın digər AWS xidmətlərini birləşdirmək bacarığı ilə birlikdə AWS-də serversiz proqramların yaradılması serversiz arxitekturaların gücünün bir hissəsidir. Bu birləşmənin nəticəsi terminlərin cəmindən çox olduğu zaman sinerjinin yaxşı nümunəsidir. Satıcıdan asılılığın qarşısını almağa çalışmaq daha çox problemlə üzləşə bilər. Konteynerlərlə işləyərkən bulud provayderləri arasında öz abstraksiya qatınızı idarə etmək daha asandır. Lakin söhbət serversiz həllərdən gedirsə, xüsusilə də başlanğıcdan qənaətlilik nəzərə alınarsa, səylər nəticə verməyəcək. Satıcıların necə xidmət göstərdiyini öyrəndiyinizə əmin olun. Bəzi ixtisaslaşmış xidmətlər digər təchizatçılarla inteqrasiya nöqtələrinə güvənir və qutudan kənarda qoş və oynat bağlantısını təmin edə bilər. Sorğunu bəzi konteynerə və ya EC2 instansiyasına proksi etməkdənsə, şlüz API son nöqtəsindən Lambda zəngi təmin etmək daha asandır. Graphcool Auth0 ilə asan konfiqurasiya təmin edir ki, bu da üçüncü tərəfin autentifikasiya alətlərindən istifadə etməkdən daha asandır.

Serversiz tətbiqiniz üçün düzgün təchizatçı seçmək memarlıq qərarıdır. Tətbiq yaratdığınız zaman bir gün serverlərin idarə edilməsinə qayıtmağınızı gözləmirsiniz. Bulud satıcısını seçmək, konteynerlərdən və ya verilənlər bazasından, hətta proqramlaşdırma dilindən istifadə etməkdən fərqlənmir.

Nəzərə alın:

  • Hansı xidmətlərə ehtiyacınız var və niyə.
  • Bulud provayderləri hansı xidmətləri təqdim edir və onları seçdiyiniz FaaS həlli ilə necə birləşdirə bilərsiniz.
  • Hansı proqramlaşdırma dilləri dəstəklənir (dinamik və ya statik yazmaqla, tərtib edilmiş və ya şərh edilmiş, meyarlar nədir, soyuq başlanğıcda performans nədir, açıq mənbə ekosistemi nədir və s.).
  • Təhlükəsizlik tələbləriniz nədir (SLA, 2FA, OAuth, HTTPS, SSL və s.).
  • CI/CD və proqram təminatı inkişaf dövrlərinizi necə idarə etmək olar.
  • Hansı infrastruktur-kod həllərindən faydalana bilərsiniz.

Mövcud proqramı genişləndirsəniz və tədricən serversiz funksionallıq əlavə etsəniz, bu, mövcud imkanları bir qədər məhdudlaşdıra bilər. Bununla belə, demək olar ki, bütün serversiz texnologiyalar bir növ API (REST və ya mesaj növbələri vasitəsilə) təmin edir ki, bu da proqram nüvəsindən asılı olmayaraq və asan inteqrasiya ilə genişləndirmələr yaratmağa imkan verir. Aydın API-ləri, yaxşı sənədləri və güclü icması olan xidmətlər axtarın və səhv edə bilməzsiniz. İnteqrasiya asanlığı çox vaxt əsas metrik ola bilər və yəqin ki, Lambda 2015-ci ildə buraxıldıqdan sonra AWS-nin bu qədər uğurlu olmasının əsas səbəblərindən biridir.

Serversiz Yaxşı olduqda

Serversiz texnologiyalar demək olar ki, hər yerdə tətbiq oluna bilər. Bununla belə, onların üstünlükləri yalnız bir tətbiq üsulu ilə məhdudlaşmır. Bu gün bulud hesablamaları üçün giriş maneəsi serversiz texnologiyalar sayəsində çox aşağıdır. Tərtibatçıların ideyası varsa, lakin onlar bulud infrastrukturunu necə idarə etməyi və xərcləri optimallaşdırmağı bilmirlərsə, o zaman bunun üçün hansısa mühəndis axtarmağa ehtiyac yoxdur. Başlanğıc platforma qurmaq istəyirsə, lakin xərclərin nəzarətdən çıxa biləcəyindən qorxursa, serversiz həllərə asanlıqla müraciət edə bilər.

Xərclərə qənaət və miqyasın asanlığı səbəbindən serversiz həllər həm daxili, həm də xarici sistemlər üçün eyni dərəcədə tətbiq olunur, çox milyonluq auditoriyaya malik veb tətbiqinə qədər. Hesablar avro ilə deyil, sentlərlə ölçülür. AWS EC2-nin (t1.micro) ən sadə nümunəsini bir ay müddətinə icarəyə götürmək onunla heç nə etməsəniz belə (kim onu ​​söndürməyi heç vaxt unutmayıb?!) 15 avroya başa gələcək. Müqayisə üçün, eyni müddət ərzində bu xərcləmə səviyyəsinə çatmaq üçün 512 MB Lambda-nı 1 saniyə ərzində təxminən 3 milyon dəfə işlətməlisiniz. Və bu funksiyadan istifadə etməsəniz, heç nə ödəmirsiniz.

Serversiz, ilk növbədə hadisə ilə idarə olunduğundan, köhnə sistemlərə serversiz infrastruktur əlavə etmək kifayət qədər asandır. Məsələn, AWS S3, Lambda və Kinesis istifadə edərək, API vasitəsilə məlumat qəbul edə bilən köhnə pərakəndə sistem üçün analitik xidmət yarada bilərsiniz.

Əksər serversiz platformalar çoxlu dilləri dəstəkləyir. Çox vaxt Python, JavaScript, C#, Java və Go-dur. Adətən bütün dillərdə kitabxanaların istifadəsinə heç bir məhdudiyyət qoyulmur, ona görə də sevimli açıq mənbə kitabxanalarınızdan istifadə edə bilərsiniz. Bununla belə, asılılıqlardan sui-istifadə etməmək məsləhətdir ki, funksiyalarınız optimal şəkildə yerinə yetirilsin və serversiz tətbiqlərinizin böyük miqyaslılığının faydalarını inkar etməsin. Konteynerə nə qədər çox paket yükləmək lazımdırsa, soyuq başlanğıc bir o qədər uzun çəkəcək.

Soyuq başlanğıc, istifadə etməzdən əvvəl konteyneri, işləmə müddətini və səhv idarəedicisini işə salmalı olduğunuz zamandır. Buna görə funksiyaların icrasında gecikmə 3 saniyəyə qədər ola bilər və bu, səbirsiz istifadəçilər üçün ən yaxşı seçim deyil. Bununla belə, bir neçə dəqiqəlik boş funksiyadan sonra ilk zəngdə soyuq başlanğıclar baş verir. Çoxları bunu funksiyanı boş saxlamaq üçün müntəzəm olaraq ping etməklə həll edilə bilən kiçik bir narahatlıq hesab edir. Yaxud da bu cəhəti tamamilə gözardı edirlər.

AWS buraxılsa da serversiz SQL verilənlər bazası Serversiz AuroraBununla belə, SQL verilənlər bazaları bu proqram üçün ideal deyil, çünki onlar AWS Lambda-da sıx trafiklə tez bir zamanda darboğaza çevrilə bilən əməliyyatları yerinə yetirmək üçün əlaqələrdən asılıdır. Bəli, tərtibatçılar daim Serverless Aurora-nı təkmilləşdirirlər və siz onunla təcrübə etməlisiniz, lakin bu gün NoSQL həlləri kimi DynamoDB. Ancaq bu vəziyyətin çox tezliklə dəyişəcəyinə şübhə yoxdur.

Alətlər dəsti, xüsusən də yerli sınaq sahəsində bir çox məhdudiyyətlər qoyur. Docker-Lambda, DynamoDB Local və LocalStack kimi həllər mövcud olsa da, onlar ağır iş və əhəmiyyətli miqdarda konfiqurasiya tələb edir. Bununla belə, bütün bu layihələr fəal şəkildə inkişaf etdirilir, ona görə də alətlər dəstinin bizə lazım olan səviyyəyə çatması an məsələsidir.

Serversiz texnologiyaların inkişaf dövrünə təsiri

İnfrastrukturunuz sadəcə bir konfiqurasiya olduğundan, qabıq skriptləri kimi skriptlərdən istifadə edərək kodu müəyyən edə və yerləşdirə bilərsiniz. Və ya kimi konfiqurasiya-kod sinfi həllərinə müraciət edə bilərsiniz AWS Bulud Formasiyası. Bu xidmət bütün sahələr üçün konfiqurasiya təmin etməsə də, Lambda funksiyaları kimi istifadə etmək üçün xüsusi resursları müəyyən etməyə imkan verir. Yəni, CloudFormation sizə uğursuzluq gətirdiyi yerdə bu boşluğu bağlayacaq öz resursunuzu (Lambda funksiyası) yaza bilərsiniz. Bu yolla siz hər şeyi edə bilərsiniz, hətta AWS mühitinizdən kənar asılılıqları konfiqurasiya edə bilərsiniz.

Bütün bunlar sadəcə konfiqurasiya olduğundan, siz xüsusi mühitlər, bölgələr və istifadəçilər üçün yerləşdirmə skriptlərinizi fərdiləşdirə bilərsiniz, xüsusən də CloudFormation kimi kod kimi infrastruktur həllərindən istifadə edirsinizsə. Məsələn, siz depoda hər bir filial üçün infrastrukturun surətini yerləşdirə bilərsiniz ki, inkişaf zamanı onları tamamilə təcrid olunmuş şəkildə sınaqdan keçirə biləsiniz. Bu, onların kodlarının canlı mühitdə adekvat şəkildə işlədiyini anlamaq istədikdə tərtibatçılar üçün rəyi kəskin surətdə sürətləndirir. Menecerlərin birdən çox mühitin yerləşdirilməsinin dəyərindən narahat olmaq lazım deyil, çünki onlar yalnız faktiki istifadə üçün pul ödəyirlər.

DevOps-un daha az narahatlığı var, çünki onlar yalnız tərtibatçıların düzgün konfiqurasiyaya malik olduğundan əmin olmalıdırlar. Artıq nümunələri, balanslaşdırıcıları və ya təhlükəsizlik qruplarını idarə etməyə ehtiyac yoxdur. Buna görə də, NoOps termini getdikcə daha çox istifadə olunur, baxmayaraq ki, infrastrukturu konfiqurasiya edə bilmək hələ də vacibdir, xüsusən də IAM konfiqurasiyası və bulud resursunun optimallaşdırılmasına gəldikdə.

Epsagon, Thundra, Dashbird və IOPipe kimi çox güclü monitorinq və vizuallaşdırma vasitələri var. Onlar sizə serversiz tətbiqlərinizin cari vəziyyətini izləməyə, giriş və izləməni təmin etməyə, performans göstəricilərini və arxitektura darboğazlarını ələ keçirməyə, xərc təhlili və proqnozlaşdırmanı həyata keçirməyə və s. imkan verir. Onlar DevOps mühəndislərinə, tərtibatçılarına və memarlarına tətbiqin performansı haqqında hərtərəfli görünüş verməklə yanaşı, menecerlərə saniyədə resurs xərcləri və xərclərin proqnozlaşdırılması ilə real vaxt rejimində vəziyyətə nəzarət etməyə imkan verir. İdarə olunan infrastrukturla bunu təşkil etmək daha çətindir.

Serversiz proqramların layihələndirilməsi daha asandır, çünki siz veb serverləri yerləşdirmək, virtual maşın və ya konteynerləri, yamaq serverlərini, əməliyyat sistemlərini, internet şlüzlərini və s. idarə etmək məcburiyyətində deyilsiniz. Bütün bu məsuliyyətləri götürməklə serversiz arxitektura əsas diqqəti cəmləyə bilər - həlli.biznes və müştəri ehtiyacları.

Alətlər dəsti daha yaxşı ola bilsə də (hər gün daha da yaxşılaşır), tərtibatçılar diqqətini biznes məntiqini həyata keçirməyə və tətbiqin mürəkkəbliyini arxitektura daxilində müxtəlif xidmətlər arasında ən yaxşı şəkildə paylaya bilərlər. Serversiz proqram idarəetməsi hadisəyə əsaslanan və bulud provayderi tərəfindən mücərrədləşdirilir (məsələn, SQS, S3 hadisələri və ya DynamoDB axınları). Buna görə də, tərtibatçılar yalnız müəyyən hadisələrə cavab vermək üçün biznes məntiqi yazmalıdırlar və verilənlər bazası və mesaj növbələrini ən yaxşı şəkildə necə həyata keçirmək və ya xüsusi aparat anbarlarında verilənlərlə optimal işi necə təşkil etmək barədə narahat olmaq məcburiyyətində deyillər.

Kod hər hansı bir inkişaf prosesində olduğu kimi yerli olaraq işlədilə və sazlana bilər. Vahid sınağı eyni qalır. Xüsusi yığın konfiqurasiyası ilə bütün proqram infrastrukturunu yerləşdirmək imkanı tərtibatçılara sınaq xərclərini və ya bahalı idarə olunan mühitlərə təsirini düşünmədən vacib rəyləri tez bir zamanda əldə etməyə imkan verir.

Serversiz proqramların qurulması üçün alətlər və üsullar

Serversiz proqramlar yaratmaq üçün xüsusi bir yol yoxdur. Həm də bu vəzifə üçün bir sıra xidmətlər. AWS bu gün güclü serversiz həllər arasında liderdir, lakin buna da baxın Google Cloud, Zeit и Firebase. AWS istifadə edirsinizsə, tətbiqlərin toplanması üçün tövsiyə olunan yanaşma budur Serversiz Tətbiq Modeli (SAM), xüsusilə C# istifadə edərkən, çünki Visual Studio əla alətlərə malikdir. SAM CLI Visual Studio-nun edə biləcəyi hər şeyi edə bilər, ona görə də başqa IDE və ya mətn redaktoruna keçsəniz, heç nə itirməyəcəksiniz. Əlbəttə ki, SAM digər dillərlə də işləyir.

Əgər başqa dillərdə yazırsanız, Serverless Framework çox güclü YAML konfiqurasiya faylları ilə hər hansı bir şeyi konfiqurasiya etməyə imkan verən əla açıq mənbə alətidir. Serversiz Çərçivə müxtəlif bulud xidmətlərini də dəstəkləyir, ona görə də biz onu çoxlu bulud həlli axtaranlara tövsiyə edirik. İstənilən ehtiyac üçün çoxlu plaginlər yaradan nəhəng bir cəmiyyətə malikdir.

Yerli sınaq üçün açıq mənbə alətləri Docker-Lambda, Serverless Local, DynamoDB Local və LocalStack yaxşı uyğun gəlir. Serversiz texnologiyalar, onlar üçün alətlər kimi hələ inkişafın ilkin mərhələsindədir, buna görə də mürəkkəb sınaq ssenariləri üçün hazırlayarkən çox çalışmalı olacaqsınız. Bununla belə, sadəcə bir mühitdə yığını yerləşdirmək və orada sınaqdan keçirmək olduqca ucuzdur. Və bulud mühitlərinin dəqiq yerli surətini çıxarmağa ehtiyac yoxdur.

Yerləşdirilmiş paketlərin ölçüsünü azaltmaq və yükləmələri sürətləndirmək üçün AWS Lambda Layers istifadə edin.

Xüsusi tapşırıqlar üçün düzgün proqramlaşdırma dillərindən istifadə edin. Fərqli dillərin öz üstünlükləri və mənfi cəhətləri var. Bir çox etalon var, lakin JavaScript, Python və C# (.NET Core 2.1+) AWS Lambda performansı baxımından liderdir. AWS Lambda bu yaxınlarda Runtime API təqdim etdi ki, bu da sizə istədiyiniz dili və iş vaxtı mühitini təyin etməyə imkan verir, beləliklə, sınaqdan keçirin.

Yerləşdirmə üçün paket ölçülərini kiçik saxlayın. Nə qədər kiçik olsalar, bir o qədər tez yüklənirlər. Böyük kitabxanalardan istifadə etməyin, xüsusən də onlardan bir neçə xüsusiyyət istifadə edirsinizsə. JavaScript-də proqramlaşdırırsınızsa, quruluşunuzu optimallaşdırmaq və yalnız həqiqətən ehtiyac duyduğunuzu daxil etmək üçün Webpack kimi bir qurma alətindən istifadə edin. .NET Core 3.0-da performansı yaxşılaşdıran və soyuq başlanğıclarda çox kömək edən QuickJit və Tiered Compilation var.

Serversiz funksiyaların hadisələrə etibarı əvvəlcə biznes məntiqini koordinasiya etməyi çətinləşdirə bilər. Bu baxımdan, mesaj növbələri və dövlət maşınları inanılmaz dərəcədə faydalı ola bilər. Lambda funksiyaları bir-birinə zəng edə bilər, lakin bunu yalnız cavab gözləmirsinizsə ("yandırın və unutun") edin - başqa bir funksiyanın tamamlanmasını gözlədiyiniz üçün ödəniş almaq istəmirsiniz. Mesaj növbələri biznes məntiqinin hissələrini təcrid etmək, tətbiq darboğazlarını idarə etmək və əməliyyatları emal etmək üçün faydalıdır (FIFO növbələrindən istifadə etməklə). AWS Lambda funksiyaları SQS növbələrinə sonradan təhlil üçün uğursuz mesajları izləyən ilişib qalmış mesaj növbələri kimi təyin edilə bilər. AWS Step Functions (dövlət maşınları) funksiyaların zəncirlənməsini tələb edən mürəkkəb prosesləri idarə etmək üçün çox faydalıdır. Başqa bir funksiyanı çağıran Lambda funksiyası əvəzinə addım funksiyaları vəziyyət keçidlərini koordinasiya edə, funksiyalar arasında məlumat ötürə və funksiyaların qlobal vəziyyətini idarə edə bilər. Bu, təkrar cəhd şərtlərini və ya müəyyən bir səhv baş verdikdə nə edəcəyinizi müəyyən etməyə imkan verir - müəyyən şərtlərdə çox güclü bir vasitədir.

Nəticə

Son illərdə serversiz texnologiyalar görünməmiş sürətlə inkişaf edir. Bu paradiqma dəyişikliyi ilə bağlı müəyyən yanlış təsəvvürlər var. İnfrastrukturu abstraktlaşdırmaq və idarəetməni miqyaslaşdırmaqla serversiz həllər sadələşdirilmiş inkişaf və DevOps proseslərindən tutmuş əməliyyat xərclərinin kütləvi azaldılmasına qədər əhəmiyyətli faydalar təklif edir.
Serversiz yanaşmanın çatışmazlıqları olmasa da, güclü serversiz proqramlar yaratmaq və ya serversiz elementləri mövcud arxitekturalara inteqrasiya etmək üçün istifadə edilə bilən möhkəm dizayn nümunələri var.

Mənbə: www.habr.com

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