Raflarda serversiz

Raflarda serversiz
Serversiz serverlarning jismoniy yo'qligi haqida emas. Bu konteyner qotil yoki o'tish tendentsiyasi emas. Bu bulutda tizimlarni qurishda yangi yondashuv. Bugungi maqolada biz Serversiz ilovalar arxitekturasiga to'xtalamiz, keling, Serversiz xizmat ko'rsatuvchi provayder va ochiq manbali loyihalar qanday rol o'ynashini ko'rib chiqamiz. Nihoyat, Serversiz foydalanish masalalari haqida gapiraylik.

Men dasturning server qismini (yoki hatto onlayn-do'konni) yozmoqchiman. Bu chat, kontentni nashr qilish xizmati yoki yuk balansi bo'lishi mumkin. Har qanday holatda, juda ko'p bosh og'rig'i bo'ladi: siz infratuzilmani tayyorlashingiz, dasturga bog'liqliklarni aniqlashingiz va xost operatsion tizimi haqida o'ylashingiz kerak bo'ladi. Keyin monolitning qolgan qismining ishlashiga ta'sir qilmaydigan kichik komponentlarni yangilashingiz kerak bo'ladi. Xo'sh, yuk ostida masshtablash haqida unutmaylik.

Agar biz kerakli bog'liqliklar oldindan o'rnatilgan va konteynerlarning o'zi bir-biridan va xost OS dan ajratilgan vaqtinchalik konteynerlarni olsak nima bo'ladi? Biz monolitni mikroservislarga ajratamiz, ularning har biri boshqalardan mustaqil ravishda yangilanishi va kengaytirilishi mumkin. Kodni shunday konteynerga joylashtirish orqali men uni istalgan infratuzilmada ishga tushirishim mumkin. Allaqachon yaxshiroq.

Agar siz konteynerlarni sozlashni xohlamasangiz nima bo'ladi? Men ilovani kengaytirish haqida o'ylashni xohlamayman. Xizmatdagi yuk minimal bo'lsa, bo'sh ishlaydigan konteynerlar uchun pul to'lamoqchi emasman. Men kod yozmoqchiman. Biznes mantiqiga e'tibor qarating va mahsulotlarni yorug'lik tezligida bozorga chiqaring.

Bunday fikrlar meni serversiz hisoblashga olib keldi. Bu holda serversiz degan ma'noni anglatadi serverlarning jismoniy yo'qligi emas, balki infratuzilmani boshqarishning bosh og'rig'i yo'qligi.

G'oya shundan iboratki, dastur mantig'i mustaqil funktsiyalarga bo'linadi. Ular hodisa tuzilishiga ega. Har bir funktsiya bitta "mikro vazifa" ni bajaradi. Ishlab chiquvchidan talab qilinadigan narsa bu funksiyalarni bulut provayderi tomonidan taqdim etilgan konsolga yuklash va ularni voqea manbalari bilan bog‘lashdir. Kod avtomatik ravishda tayyorlangan konteynerda talab bo'yicha bajariladi va men faqat bajarilish vaqti uchun to'layman.

Keling, ilovalarni ishlab chiqish jarayoni qanday ko'rinishini ko'rib chiqaylik.

Ishlab chiquvchi tomondan

Avvalroq biz onlayn-do'kon uchun ariza haqida gapira boshladik. An'anaviy yondashuvda tizimning asosiy mantig'i monolit dastur tomonidan amalga oshiriladi. Va dasturga ega server, hatto yuk bo'lmasa ham, doimiy ishlaydi.

Serversiz rejimga o'tish uchun biz dasturni mikrovazifalarga ajratamiz. Biz ularning har biri uchun o'z funksiyamizni yozamiz. Funktsiyalar bir-biridan mustaqil va davlat ma'lumotlarini saqlamaydi (fuqaroligi yo'q). Ular hatto turli tillarda ham yozilishi mumkin. Agar ulardan biri "yiqilsa" butun dastur to'xtamaydi. Ilova arxitekturasi quyidagicha ko'rinadi:

Raflarda serversiz
Serverless-da funksiyalarga bo'linish mikroservislar bilan ishlashga o'xshaydi. Ammo mikroservis bir nechta vazifalarni bajarishi mumkin va funksiya ideal tarzda bittasini bajarishi kerak. Tasavvur qilaylik, vazifa statistik ma'lumotlarni to'plash va foydalanuvchining iltimosiga binoan ularni ko'rsatishdir. Mikroservis yondashuvida vazifa ikkita kirish nuqtasi bo'lgan bitta xizmat tomonidan amalga oshiriladi: yozish va o'qish. Serversiz hisoblashda bular bir-biriga bog'liq bo'lmagan ikki xil funksiya bo'ladi. Ishlab chiquvchi, masalan, statistik ma'lumotlar yuklab olinganidan ko'ra tez-tez yangilansa, hisoblash resurslarini tejaydi.

Serversiz funktsiyalar xizmat ko'rsatuvchi provayder tomonidan belgilanadigan qisqa vaqt ichida (taym-aut) bajarilishi kerak. Masalan, AWS uchun kutish vaqti 15 minut. Bu shuni anglatadiki, uzoq muddatli funksiyalar talablarga mos ravishda o'zgartirilishi kerak bo'ladi - Serverlessni bugungi kunda boshqa mashhur texnologiyalardan (konteynerlar va Platforma xizmat sifatida) ajratib turadigan narsa shu.

Biz har bir funktsiyaga hodisa tayinlaymiz. Voqea harakat uchun tetikdir:

Voqealar
Funktsiya bajaradigan harakat

Mahsulot tasviri omborga yuklandi.
Rasmni siqib, katalogga yuklang

Ma'lumotlar bazasida jismoniy do'kon manzili yangilandi
Xaritalarga yangi joyni yuklang

Mijoz tovar uchun to'laydi
To'lovni qayta ishlashni boshlang

Voqealar HTTP so'rovlari, oqim ma'lumotlari, xabarlar navbatlari va boshqalar bo'lishi mumkin. Voqea manbalari ma'lumotlarning o'zgarishi yoki paydo bo'lishidir. Bundan tashqari, funksiyalar taymer tomonidan ishga tushirilishi mumkin.

Arxitektura ishlab chiqildi va dastur deyarli serversiz bo'lib qoldi. Keyin biz xizmat ko'rsatuvchi provayderga o'tamiz.

Provayder tomonidan

Odatda, serversiz hisoblash bulutli xizmat ko'rsatuvchi provayderlar tomonidan taklif etiladi. Ular boshqacha nomlanadi: Azure Functions, AWS Lambda, Google Cloud Functions, IBM Cloud Functions.

Biz xizmatdan provayderning konsoli yoki shaxsiy hisobi orqali foydalanamiz. Funktsiya kodini quyidagi usullardan biri bilan yuklab olish mumkin:

  • veb-konsol orqali o'rnatilgan muharrirlarda kod yozish,
  • arxivni kod bilan yuklab oling,
  • ommaviy yoki xususiy git omborlari bilan ishlash.

Bu erda biz funktsiyani chaqiradigan hodisalarni o'rnatamiz. Voqealar to'plami turli provayderlar uchun farq qilishi mumkin.

Raflarda serversiz

Provayder o'z infratuzilmasida Function as a Service (FaaS) tizimini yaratdi va avtomatlashtirdi:

  1. Funktsiya kodi provayder tomonida saqlanadi.
  2. Voqea sodir bo'lganda, tayyorlangan muhitga ega konteynerlar avtomatik ravishda serverga joylashtiriladi. Har bir funktsiya namunasi o'zining izolyatsiyalangan konteyneriga ega.
  3. Saqlashdan funktsiya konteynerga yuboriladi, hisoblab chiqiladi va natijani qaytaradi.
  4. Parallel hodisalar soni ortib bormoqda - konteynerlar soni ortib bormoqda. Tizim avtomatik ravishda o'lchaydi. Agar foydalanuvchilar funksiyaga kira olmasalar, u nofaol bo'ladi.
  5. Provayder konteynerlar uchun bo'sh vaqtni o'rnatadi - agar bu vaqt ichida konteynerda funktsiyalar paydo bo'lmasa, u yo'q qilinadi.

Shunday qilib, biz Serversizni qutidan chiqaramiz. Biz xizmat uchun to'lovni ishlatganingizdek to'lash modelidan foydalangan holda va faqat foydalanilgan funktsiyalar uchun va faqat ular ishlatilgan vaqt uchun to'laymiz.

Ishlab chiquvchilarni xizmat bilan tanishtirish uchun provayderlar 12 oygacha bepul sinovni taklif qilishadi, lekin umumiy hisoblash vaqtini, oylik so'rovlar sonini, mablag'larni yoki quvvat sarfini cheklaydi.

Provayder bilan ishlashning asosiy afzalligi - bu infratuzilma (serverlar, virtual mashinalar, konteynerlar) haqida qayg'urmaslik qobiliyatidir. O'z navbatida, provayder o'z ishlanmalaridan foydalangan holda ham, ochiq manba vositalaridan foydalangan holda ham FaaS-ni amalga oshirishi mumkin. Keling, ular haqida batafsilroq gaplashaylik.

Ochiq manba tomondan

Ochiq manbalar hamjamiyati so'nggi ikki yil davomida Serversiz vositalar ustida faol ishlamoqda. Eng yirik bozor o'yinchilari ham serversiz platformalarni rivojlantirishga hissa qo'shadilar:

  • Google ishlab chiquvchilarga o'zining ochiq manbali vositasini taklif qiladi - Tug'ilgan. Uni ishlab chiqishda IBM, RedHat, Pivotal va SAP ishtirok etdi;
  • IBM Serversiz platformada ishlagan OpenWhisk, keyinchalik bu Apache fondining loyihasiga aylandi;
  • Microsoft platforma kodini qisman ochdi Azure funktsiyalari.

Shuningdek, serversiz ramkalar yo'nalishi bo'yicha ishlanmalar davom etmoqda. Kubeless и Maqsad oldindan tayyorlangan Kubernetes klasterlarida joylashtirilgan, OpenFaaS Kubernetes va Docker Swarm bilan ishlaydi. Ramka o'ziga xos boshqaruvchi vazifasini bajaradi - so'rov bo'yicha u klaster ichida ish vaqti muhitini tayyorlaydi, keyin u erda funktsiyani ishga tushiradi.

Frameworklar sizning ehtiyojlaringizga mos ravishda asbobni sozlash uchun joy qoldiradi. Shunday qilib, Kubeless-da ishlab chiquvchi funktsiyani bajarish vaqtini sozlashi mumkin (standart qiymat 180 soniya). Fission, sovuq ishga tushirish muammosini hal qilishga urinishda, ba'zi konteynerlarni doimo ishlayotgan holda ushlab turishni taklif qiladi (garchi bu resurslarni to'xtatib turish xarajatlarini talab qiladi). Va OpenFaaS har qanday lazzat va rang uchun triggerlar to'plamini taklif qiladi: HTTP, Kafka, Redis, MQTT, Cron, AWS SQS, NATs va boshqalar.

Ishni boshlash bo'yicha ko'rsatmalarni ramkalarning rasmiy hujjatlarida topish mumkin. Ular bilan ishlash provayder bilan ishlashdan ko'ra bir oz ko'proq ko'nikmalarga ega bo'lishni talab qiladi - bu hech bo'lmaganda CLI orqali Kubernetes klasterini ishga tushirish qobiliyatidir. Ko'pi bilan boshqa ochiq manba vositalarini (masalan, Kafka navbat menejeri) kiriting.

Serversiz bilan qanday ishlashimizdan qat'iy nazar - provayder orqali yoki ochiq manbadan foydalangan holda, biz Serversiz yondashuvning bir qator afzalliklari va kamchiliklariga ega bo'lamiz.

Afzalliklar va kamchiliklar nuqtai nazaridan

Serverless konteyner infratuzilmasi va mikroservis yondashuvi g‘oyalarini ishlab chiqadi, bunda jamoalar bitta platformaga bog‘lanmasdan ko‘p tilli rejimda ishlashi mumkin. Tizimni qurish soddalashtirilgan va xatolarni tuzatish osonroq. Mikroservis arxitekturasi tizimga yangi funksiyalarni monolit dasturga qaraganda tezroq kiritish imkonini beradi.

Serversiz dastur ishlab chiqish vaqtini yanada qisqartiradi, ishlab chiquvchiga faqat ilovaning biznes mantig'i va kodlashiga e'tibor qaratish imkonini beradi. Natijada, ishlanmalarni bozorga chiqarish vaqti qisqaradi.

Bonus sifatida biz yuklash uchun avtomatik masshtabni olamiz, va biz faqat foydalanilgan resurslar uchun va faqat ular ishlatilgan vaqtda to'laymiz.

Har qanday texnologiya singari, Serversizning ham kamchiliklari bor.

Masalan, bunday kamchilik sovuq boshlash vaqti bo'lishi mumkin (JavaScript, Python, Go, Java, Ruby kabi tillar uchun o'rtacha 1 soniyagacha).

Bir tomondan, aslida, sovuq boshlash vaqti ko'plab o'zgaruvchilarga bog'liq: funktsiya yozilgan til, kutubxonalar soni, kod miqdori, qo'shimcha resurslar bilan aloqa (xuddi shu ma'lumotlar bazalari yoki autentifikatsiya serverlari). Ishlab chiquvchi ushbu o'zgaruvchilarni boshqarganligi sababli, u ishga tushirish vaqtini qisqartirishi mumkin. Ammo boshqa tomondan, ishlab chiquvchi konteynerni ishga tushirish vaqtini nazorat qila olmaydi - barchasi provayderga bog'liq.

Sovuq boshlash, funksiya avvalgi hodisa tomonidan ishga tushirilgan konteynerni qayta ishlatganda, iliq boshlanishga aylanishi mumkin. Bu holat uchta holatda yuzaga keladi:

  • agar mijozlar tez-tez xizmatdan foydalansa va funktsiyaga qo'ng'iroqlar soni ko'paysa;
  • agar provayder, platforma yoki ramka ba'zi konteynerlarni doimo ishlashiga imkon bersa;
  • agar ishlab chiquvchi funktsiyalarni taymerda ishlatsa (har 3 daqiqada ayting).

Ko'pgina ilovalar uchun sovuq boshlash muammo emas. Bu erda siz xizmat turi va vazifalariga asoslanishingiz kerak. Ishni boshlash uchun bir soniya kechikish har doim ham biznes dasturi uchun muhim emas, ammo tibbiy xizmatlar uchun juda muhim bo'lishi mumkin. Bunday holda, serversiz yondashuv endi mos kelmaydi.

Serversizning navbatdagi kamchiligi funksiyaning qisqa ishlash muddati (funktsiya bajarilishi kerak bo'lgan vaqt tugashi).

Ammo, agar siz uzoq muddatli vazifalar bilan ishlashingiz kerak bo'lsa, siz gibrid arxitekturadan foydalanishingiz mumkin - Serverlessni boshqa texnologiya bilan birlashtiring.

Barcha tizimlar Serversiz sxema yordamida ishlay olmaydi.

Ba'zi ilovalar bajarilish vaqtida ma'lumotlarni va holatni saqlaydi. Ba'zi arxitekturalar monolit bo'lib qoladi va ba'zi xususiyatlar uzoq umr ko'radi. Biroq (bulut texnologiyalari va keyin konteynerlar kabi), Serversiz - bu ajoyib kelajakka ega texnologiya.

Shu nuqtai nazardan, men Serversiz yondashuvdan foydalanish masalasiga muammosiz o'tmoqchiman.

Ilova tomondan

2018 yil uchun Serversiz foydalanish foizi bir yarim barobar o'sdi. Texnologiyani o'z xizmatlariga joriy etgan kompaniyalar orasida Twitter, PayPal, Netflix, T-Mobile, Coca-Cola kabi bozor gigantlari bor. Shu bilan birga, Serverless bu panatseya emas, balki muayyan muammolarni hal qilish vositasi ekanligini tushunishingiz kerak:

  • Resurs ishlamay qolish vaqtini qisqartirish. Bir nechta qo'ng'iroqlar bo'lgan xizmatlar uchun doimiy ravishda virtual mashinani saqlashning hojati yo'q.
  • Ma'lumotlarni tezda qayta ishlash. Rasmlarni siqish, fon rasmlarini kesib tashlash, video kodlashni o'zgartirish, IoT sensorlari bilan ishlash, matematik operatsiyalarni bajarish.
  • Boshqa xizmatlarni "yopishtiring". Ichki dasturlarga ega Git ombori, Jira va kalendar bilan Slack-da chat bot.
  • Yukni muvozanatlashtiring. Keling, bu erda batafsilroq ko'rib chiqaylik.

Aytaylik, 50 kishini jalb qiladigan xizmat bor. Uning ostida zaif uskunaga ega virtual mashina mavjud. Vaqti-vaqti bilan xizmatdagi yuk sezilarli darajada oshadi. Keyin zaif apparat bardosh bera olmaydi.

Siz tizimga yukni, aytaylik, uchta virtual mashinada taqsimlaydigan balanslagichni kiritishingiz mumkin. Ushbu bosqichda biz yukni aniq bashorat qila olmaymiz, shuning uchun biz ma'lum miqdordagi resurslarni "zaxirada" ushlab turamiz. Va biz ishlamay qolgan vaqt uchun ortiqcha to'laymiz.

Bunday vaziyatda biz tizimni gibrid yondashuv orqali optimallashtirishimiz mumkin: biz bitta virtual mashinani yuk balansi orqasida qoldiramiz va funktsiyalari bilan Serversiz oxirgi nuqtaga havolani joylashtiramiz. Agar yuk chegaradan oshib ketgan bo'lsa, muvozanatlashtiruvchi so'rovni qayta ishlashning bir qismini egallaydigan funksiya misollarini ishga tushiradi.

Raflarda serversiz
Shunday qilib, ko'p sonli so'rovlarni tez-tez emas, balki intensiv ravishda qayta ishlash zarur bo'lganda Serversiz foydalanish mumkin. Bunday holda, 15 daqiqa davomida bir nechta funktsiyalarni bajarish virtual mashina yoki serverni doimo ushlab turishdan ko'ra foydaliroqdir.

Serversiz hisoblashning barcha afzalliklari bilan, amalga oshirishdan oldin, birinchi navbatda, dastur mantig'ini baholashingiz va Serversiz muayyan holatda qanday muammolarni hal qilishini tushunishingiz kerak.

Serversiz va Tanlangan

Biz allaqachon Selecteldamiz Kubernetes bilan soddalashtirilgan ish boshqaruv panelimiz orqali. Endi biz o'z FaaS platformamizni qurmoqdamiz. Biz ishlab chiquvchilar o'z muammolarini qulay, moslashuvchan interfeys orqali Serverless yordamida hal qilishlarini istaymiz.

Agar sizda ideal FaaS platformasi nima bo'lishi kerakligi va loyihalaringizda Serversiz qanday foydalanishni xohlayotganingiz haqida fikringiz bo'lsa, ularni sharhlarda baham ko'ring. Platformani ishlab chiqishda sizning istaklaringizni inobatga olamiz.
 
Maqolada foydalanilgan materiallar:

Manba: www.habr.com

a Izoh qo'shish