Fn-ga asoslangan o'z serversiz tizimimizni yaratish
Serversiz hisoblash bulutli hisoblashning eng mashhur tendentsiyalaridan biridir. Asosiy ishlash printsipi shundaki, infratuzilma DevOpsni emas, balki xizmat ko'rsatuvchi provayderni tashvishga soladi. Resurs miqyosi yuklanishga avtomatik moslashtiriladi va yuqori o'zgarish tezligiga ega.
Yana bir umumiy xususiyat - kodni minimallashtirish va fokuslash tendentsiyasidir, shuning uchun serversiz hisoblash ba'zan xizmat sifatida funktsiya (FaaS) deb ataladi.
Tarixiy jihatdan, AWS Lambda bilan FaaS-ni taklif qilgan birinchi bulutli provayder Amazon bo'lgan, shuning uchun bu nom. Boshqa bulutli xizmat ko'rsatuvchi provayderlar ham shunga o'xshashlarni taklif qilishadi:
Google'dan bulutli funksiyalar
Microsoft-dan Azure funktsiyalari
Bu kompaniyalarning barchasi serversiz hisob-kitoblarni, avtomatik masshtablashni ta'minlaydi va faqat siz foydalanadigan narsa uchun to'laydi, lekin ular mijozlarni o'zlarining mulkiy mahsulotiga qulflaydilar. Biroq, serversiz hisoblash uchun bepul va ochiq manbali alternativalar mavjud. Shuni ta'kidlash kerak:
Platforma Apache OpenWhisk, IBM tomonidan inkubatorda ishlab chiqilgan,
Bahor buluti funktsiyalari, AWS Lambda, Azure Functions va OpenWhisk uchun fasad sifatida ham foydalanish mumkin bo'lgan juda boy Spring Framework ekotizimining bir qismi sifatida,
Ularning barchasi bulutlardan mutlaqo mustaqildir, ya'ni ularni istalgan bulutga, shu jumladan o'zingizning, umumiy yoki shaxsiy bulutlarga va albatta Exoscale-ga o'rnatish mumkin.
Fn loyihasi qanday ishlaydi
Fn butunlay Docker-ga asoslangan, ikkita asosiy komponentdan iborat:
Fn infratuzilmasining barcha jihatlarini boshqarish uchun mo'ljallangan CLI dasturi va Fn serveri bilan o'zaro ta'sir qiladi,
Fn serverining o'zi Docker konteyneriga joylashtirilgan oddiy dasturdir.
Fn-da o'rnatilgan funksiyalar ham alohida konteynerlarda bajariladi, bu sizga ko'plab dasturlash tillarini qo'llab-quvvatlash imkonini beradi, masalan... Clojure!
Funktsiya argumentlari standart kirishga (STDIN) uzatiladi, natijalar standart chiqishga (STDOUT) yoziladi. Agar argumentlar yoki qaytarish qiymatlari oddiy qiymatlar bo'lmasa (masalan, JSON ob'ekti), ular Fn tomonidan Funktsiyalarni ishlab chiqish to'plami (FDK) ko'rinishida taqdim etilgan abstraktsiya qatlami yordamida o'zgartirilishi mumkin.
Qulaylik uchun, FaaS-ni turli tillar va ularning versiyalarining (Go, Java, Python-ning turli versiyalari va boshqalar) keng ro'yxatida joylashtirishni osonlashtirish uchun o'rnatilgan andozalar to'plami taklif etiladi.
Ushbu diagrammaga rioya qilish orqali FaaS yaratish oson:
Funktsiyani Fn CLI yordamida o'rnatish: tanlangan shablon asosida Fn uchun dastur konfiguratsiya fayli yaratiladi.
Biz yana CLI Fn-dan foydalanib, o'z funksiyamizni ishga tushiramiz: konteyner tasviri ma'lum bir omborga joylashtiriladi, shundan so'ng serverga ushbu rasmning mavjudligi va joylashuvi haqida xabar beriladi.
Fn ga funktsiyalarni etkazib berish printsipi
Serversiz funktsiyalarni mahalliy o'rnatish va sinovdan o'tkazish
Fn-ni mahalliy kompyuterga o'rnatishni boshlaylik. Birinchidan, Fn talab qilganidek, Docker o'rnatiladi. Biz Debian/Ubuntudamiz deb faraz qilsak:
Yoki tizimingizga muvofiq paket menejeri/Docker tuzilmasidan foydalaning. Keyin siz to'g'ridan-to'g'ri Fn CLI-ni o'rnatishga o'tishingiz mumkin. Masalan, curl yordamida:
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
Agar siz Homebrew o'rnatilgan OSX da bo'lsangiz, boshqa yo'l bilan borishingiz mumkin:
Endi biz CLI yordamida o'z funktsiyamizni ishga tushirishga tayyormiz. Oddiylik uchun biz o'rnatilgan ishga tushirish muhitidan foydalanamiz, masalan, Node:
$ fn init --runtime node --trigger http hellonode
Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.
Yangi katalog yaratiladi hellonode ba'zi asosiy konfiguratsiya fayllari bilan Fn funksiyamizni yanada rivojlantirish uchun. Yangi yaratilgan katalog ichida siz tanlagan til yoki ish vaqti standartlari asosida ilovangizni yaratishingiz mumkin:
# Каталог с node выглядит так:
hellonode
├── func.js
├── func.yaml
└── package.json
# Свежеустановленное окружение Java11 такое:
hellojava11
├── func.yaml
├── pom.xml
└── src
├── main
│ └── java
│ └── com
│ └── example
│ └── fn
│ └── HelloFunction.java
└── test
└── java
└── com
└── example
└── fn
└── HelloFunctionTest.java
Fn dastlabki loyiha strukturasini yaratadi, faylni yaratadi func.yaml, Fn uchun kerakli sozlamalarni o'z ichiga oladi va siz tanlagan tildagi kod uchun shablonni o'rnatadi.
Tugun ish vaqti holatida bu quyidagilarni anglatadi:
$ cat hellonode/func.js
const fdk=require('@fnproject/fdk');
fdk.handle(function(input){
let name = 'World';
if (input.name) {
name = input.name;
}
return {'message': 'Hello ' + name}
})
Endi biz hamma narsa qanday ishlashini ko'rish uchun funktsiyamizni tezda sinab ko'ramiz.
Birinchidan, biz Fn serverini ishga tushiramiz. Yuqorida aytib o'tilganidek, Fn serveri Docker konteyneridir, shuning uchun ishga tushirilgandan so'ng, u boradi va Docker registridan tasvirni oladi.
$ fn start -d # запускаем локальный сервер в фоне
Unable to find image 'fnproject/fnserver:latest' locally
latest: Pulling from fnproject/fnserver
ff3a5c916c92: Pull complete
1a649ea86bca: Pull complete
ce35f4d5f86a: Pull complete
...
Status: Downloaded newer image for fnproject/fnserver:latest
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5
Funksiyamizni ishga tushirish uchun uni "tashqariga chiqarish" kerak. Bu talab qiladi имя приложения: Fn-da barcha ilovalar tegishli funktsiyalar uchun nomlar maydoni sifatida ko'rsatilishi kerak.
Fn CLI faylni qidiradi func.yaml funktsiyani sozlash uchun foydalaniladigan joriy katalogda. Shunday qilib, avval siz bizning katalogimizga kirishingiz kerak hellonode.
$ cd hellonode
$ fn deploy --app fnexo --local # выкатываем функцию локально, имя приложения - fnexo.
# параметр local не заливает образ в удаленный реестр,
# запуская его напрямую
Deploying hellonode to app: fnexo
Bumped to version 0.0.2
Building image nfrankel/hellonode:0.0.3 .
Updating function hellonode using image nfrankel/hellonode:0.0.3...
Successfully created app: fnexo
Successfully created function: hellonode with nfrankel/hellonode:0.0.3
Successfully created trigger: hellonode-trigger
Buyruqning chiqishidan ko'rinib turibdiki, bizning funktsiyamizni o'z ichiga olgan yangi Docker konteyner tasviri yaratilgan. Funktsiya chaqirishga tayyor va bizda buni amalga oshirishning ikkita usuli bor:
Fn buyrug'i yordamida invoke
orqali to'g'ridan-to'g'ri qo'ng'iroq qilish http
Qiyinchilik invoke Fn orqali u tezda sinov uchun qulay bo'lgan testlar uchun HTTP orqali ishni taqlid qiladi:
Fn serveri o'z funksiyalarini 8080 portda ochadi va funksiya URL manzili naqshga mos keladigan ko'rinadi t/app/function, lekin to'liq emas. HTTP orqali funktsiya to'g'ridan-to'g'ri chaqirilmaydi, balki o'z nomiga ko'ra funktsiya chaqiruvini "boshlaydigan" trigger orqali chaqiriladi. Triggerlar ichida aniqlanadi `func.yml loyiha:
Hammasi ishlayapti! To'liq miqyosli tajribalarga o'tish va FaaS-ni serverda nashr qilish vaqti keldi!
O'z infratuzilmangizda serversiz funksiya xizmatlarini o'rnatish
Exoscale CLI yordamida virtual mashinani tezda o'rnatamiz. Agar siz hali o'rnatmagan bo'lsangiz, foydalanishingiz mumkin bizning tezkor boshlash qo'llanmamiz. Bu sizning mahsuldorligingizni yanada oshiradigan ajoyib vositadir. Xavfsizlik guruhida 8080 portni ochish uchun qoidani sozlashingiz kerakligini unutmang! Quyidagi buyruqlar bizning funktsiyalarimizni joylashtirishga tayyor bo'lgan toza virtual mashinani ishga tushiradi:
Keyin virtual mashinaga ssh-ni kiritishingiz va masofaviy Fn serverini o'rnatishingiz mumkin:
$ exo ssh fn-server
The authenticity of host '185.19.30.175 (185.19.30.175)' can't be established.
ECDSA key fingerprint is SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '185.19.30.175' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)
Keyin Docker va Fn serverini mahalliy kompyuterda bo'lgani kabi o'rnating, serverni ishga tushiring:
Fn funksiyalarni qabul qilishga tayyor! Funktsiyalarni masofaviy serverga maqsadli o'tkazish uchun biz buyruqdan foydalanamiz deploy bayroqni tashlab, mahalliy kompyuterdan --local.
Bundan tashqari, Fn sizdan Fn serveri va Docker registrining joylashuvini ko'rsatishingizni talab qiladi. Ushbu parametrlar muhit o'zgaruvchilari orqali o'rnatilishi mumkin FN_API_URL и FN_REGISTRY mos ravishda, balki joylashtirish uchun konfiguratsiyalarni yaratish va boshqarishni oson boshqarishning qulayroq usulini ham taklif etadi.
Fn so'zlarida joylashtirish uchun konfiguratsiya deyiladi context. Quyidagi buyruq kontekstni yaratadi:
Mavjud kontekstlarni quyidagi kabi ko'rishingiz mumkin:
$ fn list contexts
CURRENT NAME PROVIDER API URL REGISTRY
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
Va hozirgina yaratilgan kontekstga o'ting:
$ fn use context exoscale
Now using context: exoscale
Bu yerdan boshlab, Fn xususiyati yetkazib berish tanlangan DockerHub hisob qaydnomasi yordamida Docker tasvirlarini yuklab oladi (mening holimda - nfrankel) va keyin masofaviy serverga xabar bering (ushbu misolda - http://185.19.30.175:8080) funksiyangizni o'z ichiga olgan so'nggi rasmning joylashuvi va versiyasi haqida.
$ fn deploy --app fnexo . # выполняется на локальной машине из каталога hellonode
Deploying function at: /.
Deploying hellonode to app: fnexo
Bumped to version 0.0.5
Building image nfrankel/hellonode:0.0.5 .
Fn-ga asoslangan serversiz hisoblashda funktsiyaning hayot aylanishi
O'z imkoniyatlaringiz bo'yicha serversiz hisoblashning afzalliklari
Serversiz hisoblash - bu murakkabroq ilovalar yoki mikroservislar bilan o'zaro aloqada bo'lgan dasturning mustaqil qismlarini tezda amalga oshirish uchun qulay echimdir.
Bu ko'pincha tanlangan sotuvchiga kirishning yashirin narxiga bog'liq bo'lib, bu muayyan foydalanish holati va hajmiga qarab, kelajakda yuqori xarajatlarga va moslashuvchanlikni pasayishiga olib kelishi mumkin.
Ko'p bulutli va gibrid bulutli arxitekturalar ham bu holatda zarar ko'radi, chunki siz serversiz hisoblashdan foydalanmoqchi bo'lgan vaziyatga osongina tushib qolishingiz mumkin, ammo korporativ siyosat tufayli bu mumkin bo'lmasligi mumkin.
Fn-dan foydalanish juda oson va deyarli bir xil FaaS interfeysi bilan ta'minlay oladi, ozgina yuk. U har qanday sotuvchining bloklanishini yo'q qiladi va mahalliy yoki siz tanlagan istalgan qulay bulutli yechim provayderiga o'rnatilishi mumkin. Dasturlash tilini tanlashda ham erkinlik mavjud.
Ushbu maqola faqat Fn asoslarini qamrab oladi, lekin o'z ish vaqtingizni yaratish juda oddiy va umumiy arxitekturani Fn yuk muvozanatlashtiruvchisi yordamida yoki himoya qilish uchun proksi-server orqasiga Fn ni joylashtirish orqali kengroq o'rnatish mumkin.