Serverita andmetöötlus on pilvandmetöötluse üks silmapaistvamaid suundi. Põhiline toimimispõhimõte on, et infrastruktuur ei ole DevOpsi, vaid teenusepakkuja mure. Ressursi skaleerimine kohandub automaatselt koormusega ja sellel on suur muutuste määr.
Teine levinud tunnus on kalduvus koodi minimeerida ja fokuseerida, mistõttu serverita andmetöötlust nimetatakse mõnikord ka funktsiooniks teenusena (FaaS).
Ajalooliselt oli esimene pilveteenuse pakkuja, kes pakkus FaaS-i koos AWS Lambdaga, Amazon, sellest ka nimi. Sarnaseid teenuseid pakuvad ka teised pilveteenuse pakkujad:
Google'i pilvefunktsioonid
Microsofti Azure'i funktsioonid
Kõik need ettevõtted pakuvad serverita andmetöötlust, automaatset skaleerimist ja maksavad ainult selle eest, mida tegelikult kasutate, kuid nad lukustavad kliendid oma patenteeritud toote juurde. Siiski on serverita arvutite jaoks tasuta ja avatud lähtekoodiga alternatiive. Tasub märkida:
Platvorm Apache OpenWhisk, mille on välja töötanud IBM inkubaatoris,
Kevadpilve funktsioonid, osana üsna rikkalikust Spring Frameworki ökosüsteemist, mida saab kasutada ka AWS Lambda, Azure Functionsi ja OpenWhiski fassaadina,
Kõik need on pilvedest täiesti sõltumatud, st neid saab installida igasse pilve, sealhulgas teie enda, avalikku või privaatsesse pilve ja loomulikult Exoscale'i.
Kuidas Fn projekt töötab
Fn põhineb täielikult Dockeril, koosneb kahest põhikomponendist:
CLI programm, mis on loodud Fn-infrastruktuuri kõigi aspektide haldamiseks ja suhtleb Fn-serveriga,
Fn-server ise on tavaline rakendus, mis on pakitud Dockeri konteinerisse.
Fn-s juurutatud funktsioone täidetakse ka eraldi konteinerites, mis võimaldab toetada paljusid programmeerimiskeeli, näiteks... Clojure!
Funktsiooni argumendid edastatakse standardsisendisse (STDIN), tulemused kirjutatakse standardväljundisse (STDOUT). Kui argumendid või tagastatavad väärtused ei ole lihtsad väärtused (nt JSON-objekt), saab neid teisendada, kasutades abstraktsioonikihti, mille Fn ise pakub funktsioonide arenduskomplekti (FDK) kujul.
Mugavuse huvides pakutakse FaaS-i juurutamise hõlbustamiseks sisseehitatud mallide komplekte erinevates keeltes ja nende versioonides (Go, Java, Python jne erinevad versioonid).
FaaS-i loomine on lihtne, järgides seda diagrammi:
Funktsiooni juurutamine Fn CLI abil: valitud malli alusel luuakse Fn jaoks rakenduse konfiguratsioonifail.
Käivitame oma funktsiooni, kasutades jällegi CLI Fn: konteineri pilt paigutatakse teatud hoidlasse, misjärel teavitatakse serverit selle pildi olemasolust ja paigutusest.
Funktsioonide Fn-ile edastamise põhimõte
Serverita funktsioonide lokaalne installimine ja testimine
Alustame Fn installimist kohalikku masinasse. Esiteks installitakse Docker, nagu nõuab Fn. Eeldusel, et kasutame Debianit/Ubuntu:
Või kasutage oma süsteemile vastavat paketihaldurit/Dockeri konstruktsiooni. Seejärel saate minna otse Fn CLI installimise juurde. Näiteks curl'i kasutamine:
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
Kui kasutate OSX-i ja Homebrew on installitud, võite minna muul viisil.
Oleme nüüd valmis oma funktsiooni CLI abil esmalt juurutama. Lihtsuse huvides kasutame sisseehitatud käivituskeskkonda, näiteks Node:
$ fn init --runtime node --trigger http hellonode
Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.
Luuakse uus kataloog hellonode meie Fn-funktsiooni edasiarendamiseks mõne põhikonfiguratsioonifailiga. Uues kataloogis saate luua oma rakenduse, järgides valitud keele või käitusaja standardeid:
# Каталог с 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 loob esialgse projekti struktuuri, loob faili func.yaml, mis sisaldab Fn jaoks vajalikke sätteid, ja määrab koodi malli teie valitud keeles.
Sõlme käitusaja puhul tähendab see järgmist:
$ 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}
})
Nüüd testime oma funktsiooni kiiresti kohapeal, et näha, kuidas kõik töötab.
Esiteks käivitame Fn-serveri. Nagu juba mainitud, on Fn-server Dockeri konteiner, seetõttu läheb see pärast käivitamist ja võtab pildi Dockeri registrist.
$ 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
Meie funktsiooni käivitamiseks tuleb see "välja tõmmata". See nõuab имя приложения: Fn-s tuleb kõik rakendused määrata seotud funktsioonide nimeruumidena.
Fn CLI otsib faili func.yaml praeguses kataloogis, mida funktsiooni konfigureerimiseks kasutatakse. Nii et kõigepealt peate minema meie kataloogi 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
Nagu näete käsu väljundist, luuakse uus Dockeri konteineri pilt, mis sisaldab meie funktsiooni. Funktsioon on kutsumiseks valmis ja meil on selleks kaks võimalust:
kasutades käsku Fn invoke
otse helistades http
Väljakutse invoke Fn-i kaudu emuleerib see testide jaoks lihtsalt tööd HTTP kaudu, mis on kiireks testimiseks mugav:
Fn-server paljastab oma funktsioonid pordis 8080 ja funktsiooni URL näib vastavat mustrile t/app/function, kuid mitte täielikult. HTTP kaudu ei kutsuta funktsiooni otse välja, vaid läbi nn triggeri, mis oma nime järgi funktsioonikutset “käivitab”. Päästikud on määratletud `func.yml projekt:
Kõik töötab! On aeg liikuda täiemahuliste katsete juurde ja avaldada meie FaaS serveris!
Serverita funktsiooniteenuste installimine oma infrastruktuuri
Installime kiiresti virtuaalse masina Exoscale CLI abil. Kui te pole seda veel seadistanud, saate seda kasutada meie kiirjuhend. See on lahe tööriist, mis suurendab teie tootlikkust veelgi. Ärge unustage, et turvarühmas pordi 8080 avamiseks peate konfigureerima reegli! Järgmised käsud käivitavad puhta virtuaalmasina, mis on valmis meie funktsioonide majutamiseks:
Seejärel saate ssh-i virtuaalmasinasse installida ja installida kaug-Fn-serveri:
$ 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)
Seejärel installige Docker ja Fn-server samamoodi nagu kohalikus masinas juba tehti, käivitage server:
Fn on funktsioonide vastuvõtmiseks valmis! Funktsioonide sihipäraseks ülekandmiseks kaugserverisse kasutame käsku deploy kohalikust arvutist, jättes lipu välja --local.
Lisaks nõuab Fn, et määraksite Fn-serveri ja Dockeri registri asukoha. Neid valikuid saab määrata keskkonnamuutujate kaudu FN_API_URL и FN_REGISTRY vastavalt, vaid pakub ka mugavamat viisi juurutamiseks mõeldud konfiguratsioonide loomise ja haldamise hõlpsaks haldamiseks.
Fn-terminites nimetatakse juurutamise konfiguratsiooni context. Järgmine käsk loob konteksti:
$ fn list contexts
CURRENT NAME PROVIDER API URL REGISTRY
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
Ja lülituge äsja loodud kontekstile järgmiselt:
$ fn use context exoscale
Now using context: exoscale
Siit edasi laadib Fn-funktsiooni tarnimine valitud DockerHubi konto abil alla Dockeri pildid (minu puhul - nfrankel) ja teavitage seejärel kaugserverit (selles näites - http://185.19.30.175:8080) teie funktsiooni sisaldava uusima pildi asukoha ja versiooni kohta.
$ 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 .
Funktsiooni elutsükkel Fn-põhises serverita andmetöötluses
Serverita andmetöötluse eelised teie enda võimsusel
Serverita andmetöötlus on mugav lahendus rakenduse iseseisvate osade kiireks juurutamiseks, mis suhtlevad keerukamate rakenduste või mikroteenustega.
Selle põhjuseks on sageli valitud müüjaga lukustumise varjatud kulu, mis sõltuvalt konkreetsest kasutusjuhtumist ja mahust võib tulevikus kaasa tuua suuremaid kulusid ja vähenenud paindlikkust.
Antud juhul kannatavad ka mitme pilve- ja hübriidpilvearhitektuurid, sest võid kergesti sattuda olukorda, kus tahaks kasutada serverita andmetöötlust, kuid ettevõtte poliitika tõttu ei pruugi see võimalik olla.
Fn-i on üsna lihtne kasutada ja see võib pakkuda peaaegu sama FaaS-i liidest, vähese üldkuluga. See välistab igasuguse tarnija lukustumise ja selle saab installida kohapeal või teie valitud mugavasse pilvelahenduste pakkujasse. Vabadus on ka programmeerimiskeele valikul.
See artikkel hõlmab ainult Fn põhitõdesid, kuid oma käitusaja loomine on üsna lihtne ja üldist arhitektuuri saab laiemalt juurutada, kasutades Fn koormuse tasakaalustajat või asetades Fn kaitseks puhverserveri taha.