Serversiz ilovalarni yaratish bo'yicha maslahatlar va manbalar

Serversiz ilovalarni yaratish bo'yicha maslahatlar va manbalar
Garchi serversiz texnologiyalar so'nggi yillarda tez mashhurlikka erishgan bo'lsa-da, ular bilan bog'liq ko'plab noto'g'ri tushunchalar va qo'rquvlar mavjud. Sotuvchiga bog'liqlik, asboblar, xarajatlarni boshqarish, sovuq ishga tushirish, monitoring va ishlab chiqishning hayotiy tsikli serversiz texnologiyalar haqida gap ketganda dolzarb mavzulardir. Ushbu maqolada biz eslatib o'tilgan ba'zi mavzularni o'rganamiz, shuningdek, yangi boshlanuvchilarga kuchli, moslashuvchan va tejamkor serversiz ilovalarni yaratishda yordam berish uchun maslahatlar va foydali ma'lumot manbalariga havolalarni baham ko'ramiz.

Serversiz texnologiyalar haqida noto'g'ri tushunchalar

Ko'pchilik serversiz va serversiz ishlov berishni o'ylaydi (Xizmat sifatida ishlaydi, FaaS) deyarli bir xil. Bu shuni anglatadiki, farq unchalik katta emas va yangilikni kiritishga arziydi. Garchi AWS Lambda serversiz gullab-yashnagan yulduzlardan biri va serversiz arxitekturaning eng mashhur elementlaridan biri bo'lgan bo'lsa-da, ammo bu arxitektura FaaS-dan ancha ko'p.

Serversiz texnologiyalarning asosiy tamoyili shundan iboratki, siz infratuzilmangizni boshqarish va kengaytirish haqida tashvishlanishingiz shart emas, siz faqat foydalanganingiz uchun toʻlaysiz. Ko'pgina xizmatlar ushbu mezonlarga mos keladi - AWS DynamoDB, S3, SNS yoki SQS, Graphcool, Auth0, Now, Netlify, Firebase va boshqalar. Umuman olganda, serversiz infratuzilmani boshqarish va uni masshtablash uchun optimallashtirish zaruratisiz bulutli hisoblashning to‘liq quvvatidan foydalanishni anglatadi. Bu, shuningdek, infratuzilma darajasidagi xavfsizlik endi sizni tashvishga solmasligini anglatadi, bu xavfsizlik standartlariga javob berishning qiyinligi va murakkabligini hisobga olgan holda katta foyda keltiradi. Nihoyat, sizga taqdim etilgan infratuzilmani sotib olishingiz shart emas.

Serversizni "ruhiy holat" deb hisoblash mumkin: echimlarni ishlab chiqishda ma'lum bir mentalitet. Har qanday infratuzilmani saqlashni talab qiladigan yondashuvlardan qoching. Serversiz yondashuv bilan biz loyihaga bevosita taʼsir koʻrsatadigan va foydalanuvchilarga foyda keltiradigan vazifalarni hal qilish uchun vaqt sarflaymiz: biz barqaror biznes mantigʻini yaratamiz, foydalanuvchi interfeyslarini ishlab chiqamiz, moslashuvchan va ishonchli APIʼlarni ishlab chiqamiz.

Misol uchun, agar bepul matn qidirish platformasini boshqarish va saqlashdan qochish mumkin bo'lsa, biz shunday qilamiz. Ilovalarni yaratishga bunday yondashuv bozorga chiqish vaqtini sezilarli darajada tezlashtirishi mumkin, chunki endi siz murakkab infratuzilmani boshqarish haqida o'ylashingiz shart emas. Infratuzilmani boshqarish bo'yicha mas'uliyat va xarajatlarni bartaraf qiling va mijozlaringizga kerak bo'lgan ilovalar va xizmatlarni yaratishga e'tibor qarating. Patrik Debois bu yondashuvni chaqirdi "xizmatli", atama serversiz hamjamiyatda qabul qilingan. Funksiyalar joylashtiriladigan modullar sifatida xizmatlarga havola sifatida ko'rib chiqilishi kerak (butun kutubxona yoki veb-ilovani joylashtirish o'rniga). Bu dasturni joylashtirish va o'zgartirishlarni boshqarish uchun ajoyib granularlikni ta'minlaydi. Agar siz funksiyalarni shu tarzda joylashtira olmasangiz, bu funksiyalar juda ko‘p vazifalarni bajarishini va qayta tahrir qilinishi kerakligini ko‘rsatishi mumkin.

Ba'zilar bulutli ilovalarni ishlab chiqishda sotuvchiga qaramlik bilan chalkashib ketishadi. Xuddi shu narsa serversiz texnologiyalarga tegishli va bu noto'g'ri tushuncha emas. Bizning tajribamizga ko‘ra, AWS-da serversiz ilovalarni yaratish va AWS Lambda-ning boshqa AWS xizmatlarini birlashtirish qobiliyati bilan birgalikda serversiz arxitekturaning kuchli qismidir. Bu kombinatsiyaning natijasi atamalar yig'indisidan ko'proq bo'lsa, sinergiyaning yaxshi namunasidir. Sotuvchiga qaramlikdan qochishga urinish yanada ko'proq muammolarga olib kelishi mumkin. Konteynerlar bilan ishlashda bulut provayderlari o'rtasida o'z abstraksiya qatlamini boshqarish osonroq. Ammo serversiz echimlar haqida gap ketganda, ayniqsa, iqtisodiy samaradorlik boshidan e'tiborga olinsa, urinishlar o'zini oqlamaydi. Sotuvchilar qanday xizmatlar ko'rsatishini bilib olishingizga ishonch hosil qiling. Ba'zi ixtisoslashtirilgan xizmatlar boshqa sotuvchilar bilan integratsiya nuqtalariga tayanadi va qutidan tashqarida plagin va o'ynatish ulanishini ta'minlashi mumkin. So'rovni ba'zi konteyner yoki EC2 nusxasiga proksi-server qilishdan ko'ra, shlyuz API so'nggi nuqtasidan Lambda qo'ng'irog'ini taqdim etish osonroq. Graphcool Auth0 bilan oson konfiguratsiyani ta'minlaydi, bu uchinchi tomon autentifikatsiya vositalaridan foydalanishdan osonroqdir.

Serversiz ilovangiz uchun to'g'ri sotuvchini tanlash me'moriy qarordir. Ilova yaratganingizda, bir kun kelib serverlarni boshqarishga qaytishingizni kutmaysiz. Bulutli sotuvchini tanlash konteynerlar yoki ma'lumotlar bazasi yoki hatto dasturlash tilidan foydalanishni tanlashdan farq qilmaydi.

Ko'rib chiqing:

  • Sizga qanday xizmatlar kerak va nima uchun.
  • Bulutli provayderlar qanday xizmatlarni taqdim etadi va ularni siz tanlagan FaaS yechimingiz bilan qanday birlashtira olasiz.
  • Qaysi dasturlash tillari qo'llab-quvvatlanadi (dinamik yoki statik terish bilan, kompilyatsiya qilingan yoki talqin qilingan, ko'rsatkichlar qanday, sovuq ishga tushirishda ishlash qanday, ochiq manba ekotizim nima va hokazo).
  • Sizning xavfsizlik talablaringiz qanday (SLA, 2FA, OAuth, HTTPS, SSL va boshqalar).
  • CI/CD va dasturiy ta'minotni ishlab chiqish davrlarini qanday boshqarish kerak.
  • Qaysi infratuzilma-kod yechimlaridan foydalanishingiz mumkin.

Agar siz mavjud dasturni kengaytirsangiz va asta-sekin serversiz funksiyalarni qo'shsangiz, bu mavjud imkoniyatlarni biroz cheklashi mumkin. Biroq, deyarli barcha serversiz texnologiyalar dastur yadrosidan mustaqil va oson integratsiyalashgan kengaytmalarni yaratishga imkon beruvchi qandaydir API (REST yoki xabarlar navbatlari orqali) taqdim etadi. Aniq API, yaxshi hujjatlar va kuchli hamjamiyatga ega xizmatlarni qidiring va xato qilolmaysiz. Integratsiyaning qulayligi ko'pincha asosiy ko'rsatkich bo'lishi mumkin va, ehtimol, Lambda 2015 yilda chiqarilgandan beri AWS muvaffaqiyatli bo'lishining asosiy sabablaridan biridir.

Serversiz qachon yaxshi

Serversiz texnologiyalar deyarli hamma joyda qo'llanilishi mumkin. Biroq, ularning afzalliklari faqat bitta qo'llash usuli bilan cheklanmaydi. Serversiz texnologiyalar tufayli bugungi kunda bulutli hisoblash uchun kirish to'sig'i juda past. Agar ishlab chiquvchilarda g‘oya bo‘lsa, lekin ular bulutli infratuzilmani qanday boshqarishni va xarajatlarni optimallashtirishni bilmasalar, buning uchun qandaydir muhandis izlashlari shart emas. Agar startap platforma qurmoqchi bo‘lsa, lekin xarajatlar nazoratdan chiqib ketishidan qo‘rqsa, ular serversiz yechimlarga osongina murojaat qilishlari mumkin.

Xarajatlarni tejash va masshtablashning qulayligi tufayli serversiz yechimlar ham ichki, ham tashqi tizimlar uchun, ko'p millionli auditoriyaga ega bo'lgan veb-ilovalar uchun bir xil darajada qo'llaniladi. Hisoblar evroda emas, balki sentlarda o'lchanadi. AWS EC2 (t1.micro) ning eng oddiy nusxasini bir oyga ijaraga olish 15 yevro turadi, hatto u bilan hech narsa qilmasangiz ham (kim uni o‘chirishni hech qachon unutmagan?!). Taqqoslash uchun, xuddi shu vaqt oralig'ida ushbu xarajatlar darajasiga erishish uchun siz 512 MB Lambda'ni 1 soniya davomida taxminan 3 million marta ishlatishingiz kerak bo'ladi. Va agar siz ushbu xususiyatdan foydalanmasangiz, unda siz hech narsa to'lamaysiz.

Serversiz asosan hodisalarga asoslanganligi sababli, eski tizimlarga serversiz infratuzilmani qo'shish juda oson. Masalan, AWS S3, Lambda va Kinesis-dan foydalanib, siz API orqali ma'lumotlarni qabul qila oladigan eski chakana tizim uchun tahlil xizmatini yaratishingiz mumkin.

Ko'pgina serversiz platformalar bir nechta tillarni qo'llab-quvvatlaydi. Ko'pincha bu Python, JavaScript, C#, Java va Go. Odatda barcha tillardagi kutubxonalardan foydalanishda hech qanday cheklovlar yo'q, shuning uchun siz sevimli ochiq manba kutubxonalaringizdan foydalanishingiz mumkin. Biroq, sizning funktsiyalaringiz optimal darajada ishlashi va serversiz ilovalaringizning katta miqyosliligi afzalliklarini inkor etmasligi uchun bog'liqliklarni suiiste'mol qilmaslik tavsiya etiladi. Idishga qancha paket yuklanishi kerak bo'lsa, sovuq boshlash shunchalik uzoq davom etadi.

Sovuq boshlash - bu konteynerni, ish vaqtini va xatolarni qayta ishlashni ishlatishdan oldin ularni ishga tushirishingiz kerak bo'lganda. Shu sababli, funktsiyalarni bajarishda kechikish 3 soniyagacha bo'lishi mumkin va bu sabrsiz foydalanuvchilar uchun eng yaxshi variant emas. Biroq, birinchi qo'ng'iroqda bir necha daqiqa bo'sh ishlagandan so'ng sovuq boshlanadi. Ko'pchilik buni unchalik katta bo'lmagan noqulaylik deb hisoblaydi, uni ishlamay qolishi uchun funktsiyani muntazam ravishda pinglash orqali hal qilish mumkin. Yoki ular bu jihatni umuman e'tibordan chetda qoldiradilar.

AWS chiqarilgan bo'lsa-da serversiz SQL ma'lumotlar bazasi Serversiz AuroraBiroq, SQL ma'lumotlar bazalari ushbu ilova uchun ideal emas, chunki ular tranzaktsiyalarni amalga oshirish uchun ulanishlarga bog'liq bo'lib, ular AWS Lambda-da og'ir trafik bilan tezda to'siq bo'lib qolishi mumkin. Ha, ishlab chiquvchilar doimiy ravishda Serverless Aurora-ni takomillashtirmoqda va siz u bilan tajriba qilishingiz kerak, ammo bugungi kunda NoSQL yechimlari DynamoDB. Biroq, bu vaziyat juda tez orada o'zgarishiga shubha yo'q.

Asboblar to'plami, ayniqsa, mahalliy test sohasida juda ko'p cheklovlarni qo'yadi. Docker-Lambda, DynamoDB Local va LocalStack kabi echimlar mavjud bo'lsa-da, ular qattiq mehnat va katta miqdordagi konfiguratsiyani talab qiladi. Biroq, bu loyihalarning barchasi faol ishlab chiqilmoqda, shuning uchun asboblar to'plami bizga kerak bo'lgan darajaga etishi faqat vaqt masalasidir.

Serversiz texnologiyalarning rivojlanish tsikliga ta'siri

Sizning infratuzilmangiz shunchaki konfiguratsiya bo'lgani uchun siz qobiq skriptlari kabi skriptlar yordamida kodni belgilashingiz va joylashtirishingiz mumkin. Yoki siz kabi konfiguratsiya-kod sinfi yechimlariga murojaat qilishingiz mumkin AWS Cloud Formation. Garchi ushbu xizmat barcha hududlar uchun konfiguratsiyani ta'minlamasa ham, u sizga Lambda funksiyalari sifatida foydalanish uchun maxsus resurslarni belgilash imkonini beradi. Ya'ni, CloudFormation sizni muvaffaqiyatsiz tugatgan joyda, siz ushbu bo'shliqni yopadigan o'z resursingizni (Lambda funktsiyasi) yozishingiz mumkin. Shunday qilib, siz hamma narsani qilishingiz mumkin, hatto AWS muhitingizdan tashqarida bog'liqliklarni sozlashingiz mumkin.

Bularning barchasi shunchaki konfiguratsiya bo'lgani uchun siz o'rnatish skriptlarini muayyan muhitlar, hududlar va foydalanuvchilar uchun sozlashingiz mumkin, ayniqsa CloudFormation kabi infratuzilmani kod sifatida ishlatayotgan bo'lsangiz. Misol uchun, siz infratuzilmaning nusxasini ombordagi har bir filial uchun joylashtirishingiz mumkin, shunda ularni ishlab chiqish jarayonida butunlay izolyatsiyada sinab ko'rishingiz mumkin. Bu ishlab chiquvchilar o'zlarining kodlari jonli muhitda to'g'ri ishlashini tushunishni xohlaganlarida, ular uchun fikr-mulohazalarni sezilarli darajada tezlashtiradi. Menejerlar bir nechta muhitlarni joylashtirish xarajatlari haqida tashvishlanishlari shart emas, chunki ular faqat haqiqiy foydalanish uchun to'laydilar.

DevOps kamroq tashvishga soladi, chunki ular faqat ishlab chiquvchilar to'g'ri konfiguratsiyaga ega ekanligiga ishonch hosil qilishlari kerak. Endi misollar, balanschilar yoki xavfsizlik guruhlarini boshqarishingiz shart emas. Shu sababli, NoOps atamasi tobora ko'proq foydalanilmoqda, garchi infratuzilmani sozlash imkoniyati hali ham muhim bo'lsa-da, ayniqsa IAM konfiguratsiyasi va bulutli resurslarni optimallashtirish haqida gap ketganda.

Epsagon, Thundra, Dashbird va IOPipe kabi juda kuchli monitoring va vizualizatsiya vositalari mavjud. Ular sizga serversiz ilovalaringizning joriy holatini kuzatish, jurnalga kirish va kuzatishni ta'minlash, ishlash ko'rsatkichlari va arxitekturadagi to'siqlarni qo'lga kiritish, xarajatlar tahlili va prognozini amalga oshirish va boshqalarga imkon beradi. Ular nafaqat DevOps muhandislari, ishlab chiquvchilari va arxitektorlariga ilovalarning ishlashi haqida keng qamrovli ko'rinish beradi, balki menejerlarga real vaqtda vaziyatni soniyada resurs xarajatlari va xarajatlarni prognozlash orqali kuzatish imkonini beradi. Boshqariladigan infratuzilma bilan buni tashkil qilish ancha qiyin.

Serversiz ilovalarni loyihalash ancha oson, chunki siz veb-serverlarni joylashtirishingiz, virtual mashinalar yoki konteynerlarni, yamoq-serverlarni, operatsion tizimlarni, internet shlyuzlarini va hokazolarni boshqarishingiz shart emas. yechim biznes va mijozlar ehtiyojlari.

Asboblar to'plami yaxshiroq bo'lishi mumkin bo'lsa-da (u kundan-kunga yaxshilanadi), ishlab chiquvchilar biznes mantig'ini amalga oshirishga va dasturning murakkabligini arxitektura ichidagi turli xizmatlarga eng yaxshi taqsimlashga e'tibor qaratishlari mumkin. Serversiz ilovalar boshqaruvi hodisalarga asoslangan va bulut provayderi tomonidan abstraktlashtirilgan (masalan, SQS, S3 hodisalari yoki DynamoDB oqimlari). Shuning uchun, ishlab chiquvchilar faqat ma'lum voqealarga javob berish uchun biznes mantig'ini yozishlari kerak va ma'lumotlar bazalari va xabarlar navbatlarini qanday qilib eng yaxshi tarzda amalga oshirish yoki muayyan apparat omborlarida ma'lumotlar bilan optimal ishlashni qanday tashkil qilish haqida tashvishlanishlari shart emas.

Kod har qanday ishlab chiqish jarayonida bo'lgani kabi mahalliy sifatida ishga tushirilishi va disk raskadrovka qilinishi mumkin. Birlik sinovi bir xil bo'lib qoladi. Maxsus stek konfiguratsiyasi bilan butun dastur infratuzilmasini o'rnatish qobiliyati ishlab chiquvchilarga sinov narxi yoki qimmat boshqariladigan muhitlarga ta'siri haqida o'ylamasdan tezda muhim fikr-mulohazalarni olish imkonini beradi.

Serversiz ilovalarni yaratish uchun vositalar va texnikalar

Serversiz ilovalarni yaratishning o'ziga xos usuli yo'q. Shuningdek, ushbu vazifa uchun xizmatlar to'plami. AWS bugungi kunda kuchli serversiz yechimlar orasida yetakchi hisoblanadi, lekin qarang Google Cloud, vaqt и Firebase. Agar siz AWS dan foydalanayotgan bo'lsangiz, ilovalarni to'plash uchun tavsiya etilgan yondashuv Serversiz dastur modeli (SAM), ayniqsa C# dan foydalanganda, chunki Visual Studio ajoyib asboblarga ega. SAM CLI Visual Studio qila oladigan hamma narsani qila oladi, shuning uchun boshqa IDE yoki matn muharririga o'tsangiz, hech narsani yo'qotmaysiz. Albatta, SAM boshqa tillar bilan ham ishlaydi.

Agar siz boshqa tillarda yozayotgan bo'lsangiz, Serverless Framework juda kuchli YAML konfiguratsiya fayllari bilan har qanday narsani sozlash imkonini beruvchi ajoyib ochiq manbali vositadir. Serversiz Framework turli xil bulutli xizmatlarni ham qo‘llab-quvvatlaydi, shuning uchun biz uni ko‘p bulutli yechim izlayotganlarga tavsiya qilamiz. U har qanday ehtiyoj uchun ko'plab plaginlarni yaratgan ulkan hamjamiyatga ega.

Mahalliy testlar uchun ochiq manba vositalari Docker-Lambda, Serverless Local, DynamoDB Local va LocalStack juda mos keladi. Serversiz texnologiyalar hali rivojlanishning dastlabki bosqichida, ular uchun vositalar, shuning uchun murakkab sinov stsenariylarini o'rnatishda siz qattiq ishlashingiz kerak bo'ladi. Biroq, shunchaki stekni muhitda joylashtirish va u erda sinovdan o'tkazish juda arzon. Va bulutli muhitlarning aniq mahalliy nusxasini yaratishingiz shart emas.

Joylashtirilgan paketlar hajmini kamaytirish va yuklab olishni tezlashtirish uchun AWS Lambda Layers-dan foydalaning.

Muayyan vazifalar uchun to'g'ri dasturlash tillaridan foydalaning. Turli tillarning o'ziga xos afzalliklari va kamchiliklari bor. Ko'pgina mezonlar mavjud, ammo JavaScript, Python va C# (.NET Core 2.1+) AWS Lambda ishlashi bo'yicha yetakchi hisoblanadi. AWS Lambda yaqinda Runtime API-ni taqdim etdi, bu sizga kerakli ish vaqti tili va muhitini belgilash imkonini beradi, shuning uchun tajriba.

O'rnatish uchun paket o'lchamlarini kichikroq tuting. Ular qanchalik kichik bo'lsa, ular tezroq yuklanadi. Katta kutubxonalardan foydalanishdan saqlaning, ayniqsa ulardan bir nechta xususiyatlardan foydalansangiz. Agar siz JavaScript-da dasturlashayotgan bo'lsangiz, tuzilmangizni optimallashtirish va faqat sizga kerak bo'lgan narsalarni kiritish uchun Webpack kabi qurish vositasidan foydalaning. .NET Core 3.0 da QuickJit va Tiered Compilation mavjud bo'lib, u ish faoliyatini yaxshilaydi va sovuq ishga tushirishda ko'p yordam beradi.

Serversiz funksiyalarning hodisalarga tayanishi dastlab biznes mantiqini muvofiqlashtirishni qiyinlashtirishi mumkin. Shu munosabat bilan xabarlar navbatlari va davlat mashinalari juda foydali bo'lishi mumkin. Lambda funktsiyalari bir-biriga qo'ng'iroq qilishi mumkin, lekin buni faqat javob kutmasangiz ("yong'in va unutish") bajaring - boshqa funksiya tugashini kutish uchun to'lov olishni xohlamaysiz. Xabar navbatlari biznes mantig'ining qismlarini ajratish, ilovalardagi qiyinchiliklarni boshqarish va tranzaktsiyalarni qayta ishlash (FIFO navbatlaridan foydalanish) uchun foydalidir. AWS Lambda funksiyalari SQS navbatlariga tiqilib qolgan xabarlar navbatlari sifatida tayinlanishi mumkin, ular keyinchalik tahlil qilish uchun muvaffaqiyatsiz xabarlarni kuzatib boradi. AWS Step Functions (davlat mashinalari) funktsiyalar zanjirini talab qiladigan murakkab jarayonlarni boshqarish uchun juda foydali. Boshqa funktsiyani chaqiruvchi Lambda funktsiyasi o'rniga, qadam funktsiyalari holat o'tishlarini muvofiqlashtirishi, funktsiyalar o'rtasida ma'lumotlarni uzatishi va funktsiyalarning global holatini boshqarishi mumkin. Bu sizga qayta urinish shartlarini yoki muayyan xatolik yuzaga kelganda nima qilish kerakligini aniqlash imkonini beradi - muayyan sharoitlarda juda kuchli vosita.

xulosa

So'nggi yillarda serversiz texnologiyalar misli ko'rilmagan tezlikda rivojlanmoqda. Ushbu paradigma o'zgarishi bilan bog'liq ba'zi noto'g'ri tushunchalar mavjud. Infratuzilmani mavhumlash va boshqaruvni masshtablash orqali serversiz yechimlar soddalashtirilgan ishlab chiqish va DevOps jarayonlaridan tortib operatsion xarajatlarni sezilarli darajada kamaytirishgacha bo'lgan katta afzalliklarni taqdim etadi.
Serversiz yondashuv o'zining kamchiliklaridan xoli bo'lmasa-da, mustahkam serversiz ilovalarni yaratish yoki serversiz elementlarni mavjud arxitekturalarga integratsiya qilish uchun ishlatilishi mumkin bo'lgan mustahkam dizayn naqshlari mavjud.

Manba: www.habr.com

a Izoh qo'shish