
— üks pilvandmetöötluse märgatavamaid trende. Põhiprintsiip on, et infrastruktuuri eest vastutab teenusepakkuja, mitte DevOps. Ressursside skaleerimine kohandub automaatselt koormusega ja skaleerub kiiresti.
Teine levinud tunnus on kalduvus koodi minimeerida ja fokuseerida, mistõttu serverita andmetöötlust nimetatakse mõnikord ka „funktsiooniks teenusena” (FaaS).
Ajalooliselt oli Amazon esimene pilveteenuse pakkuja, kes pakkus FaaS-i koos AWS Lambdaga, sellest ka nimi. Sarnaseid pakkumisi pakuvad ka teised pilveteenuse pakkujad:
- Google'i pilvefunktsioonid
- Microsofti Azure'i funktsioonid
Kõik need ettevõtted pakuvad serverita andmetöötlust, automaatset skaleerimist ja tasu-käigu järgi hinnastamist, kuid nad seovad kliendid oma patenteeritud toodetega. Serverita andmetöötlusele on aga olemas tasuta avatud lähtekoodiga alternatiive. Tasub märkida:
- Platvorm , mille IBM arendas inkubaatoris,
- osana rikkalikust Spring Frameworki ökosüsteemist, mida saab kasutada ka AWS Lambda, Azure Functionsi ja OpenWhiski fassaadina,
- , mida toetab Oracle.
Kõik need on täiesti pilveagnostilised, mis tähendab, et neid saab installida mis tahes pilve, sealhulgas teie enda pilve, avalikku või privaatsesse pilve ja loomulikult ka Exoscale'i.
Kuidas Fn projekt töötab
Fn põhineb täielikult Dockeril ja koosneb kahest põhikomponendist:
- CLI-programm, mis on loodud Fn-infrastruktuuri kõigi aspektide haldamiseks ja Fn-serveriga suhtlemiseks,
- Fn-server ise on tavaline rakendus, mis on pakitud Dockeri konteinerisse.
Fn-is juurutatud funktsioone täidetakse samuti eraldi konteinerites, mis võimaldab meil toetada laia valikut programmeerimiskeeli, näiteks… Clojure!
Funktsiooni argumendid edastatakse standardsisendisse (STDIN) ja tulemused kirjutatakse standardväljundisse (STDOUT). Kui argumendid või tagastusväärtused ei ole lihtsad väärtused (nt JSON-objekt), saab neid teisendada, kasutades Fn-i enda pakutavat abstraktsioonikihti funktsioonide arenduskomplekti (FDK) kujul.
Mugavuse huvides pakutakse sisseehitatud mallikomplekte, mis hõlbustavad FaaS-i juurutamist paljudes erinevates keeltes ja nende versioonides (Go, Java erinevad versioonid, Python jne).
FaaS-i loomine on lihtne, järgige seda skeemi:
- Funktsiooni juurutamine Fn CLI abil loob valitud malli põhjal Fn jaoks rakenduse konfiguratsioonifaili.
- Me käivitame oma funktsiooni, taas Fn CLI abil: konteineri pilt paigutatakse teatud repositooriumisse, misjärel serverile teatatakse selle pildi olemasolust ja asukohast.

Funktsioonide pakkumise põhimõte Fn-s
Serverita funktsioonide lokaalne installimine ja testimine
Alustame Fn-i installimisega kohalikku masinasse. Esmalt installime Dockeri, nagu Fn nõuab. See eeldab, et oleme sisse lülitatud Debian/Ubuntu:
$ sudo apt-get update
$ sudo apt-get install docker.ioTeise võimalusena võite kasutada oma süsteemile sobivat paketihaldurit/Dockeri järku. Seejärel saate otse Fn CLI installimisega jätkata. Näiteks curli abil:
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | shKui kasutate OSX-i, kuhu on installitud Homebrew, saate kasutada teistsugust lähenemisviisi:
$ brew install fn
==> Downloading https://homebrew.bintray.com/bottles/fn-0.5.8.high_sierra.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/b1/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb
######################################################################## 100.0%
==> Pouring fn-0.5.8.high_sierra.bottle.tar.gz
/usr/local/Cellar/fn/0.5.8: 5 files, 16.7MBNüüd oleme valmis oma funktsiooni CLI abil juurutama. Lihtsuse mõttes kasutame sisseehitatud käituskeskkonda, näiteks Node'i:
$ fn init --runtime node --trigger http hellonode
Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.Luuakse uus kataloog hellonode Fn-funktsiooni edasiarendamiseks loome mõned põhilised konfiguratsioonifailid. Uues loodud kataloogis saate luua oma rakenduse, järgides valitud keele või käituskeskkonna 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.javaFn loob projekti algstruktuuri, loob faili func.yaml, mis sisaldab Fn jaoks vajalikke sätteid ja määrab koodi malli teie valitud keeles.
Node'i käituskeskkonna 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 lokaalselt, et näha, kuidas kõik töötab.
Esmalt käivitame Fn-serveri. Nagu varem mainitud, on Fn-server Dockeri konteiner, seega pärast käivitamist laadib see Dockeri registrist pildi.
$ 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
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5Funktsiooni käivitamiseks peame selle välja töötama. See nõuab järgmist: имя приложенияFn-is tuleb kõik rakendused määrata seotud funktsioonide nimeruumidena.
Fn CLI otsib faili func.yaml praeguses kataloogis, mida kasutatakse funktsiooni konfigureerimiseks. Seega peame kõigepealt navigeerima oma 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-triggerNagu käsu väljundist näha, luuakse uus Dockeri konteineri kujutis, mis sisaldab meie funktsiooni. Funktsioon on kutsumiseks valmis ja meil on selleks kaks võimalust:
- kasutades Fn-käsku
invoke - otse läbi helistades
http
Väljakutse invoke Fn-klahvi kasutamine jäljendab testide jaoks lihtsalt HTTP-operatsiooni, mis on mugav kiireks kontrollimiseks:
$ fn invoke fnexo hellonode # вызываем функцию hellonode приложения fnexo
{"message":"Hello World"}Funktsiooni otse kutsumiseks peate teadma täielikku URL-i:
$ curl http://localhost:8080/t/fnexo/hellonode-trigger
{"message":"Hello World"}Fn-server avalikustab oma funktsioonid pordil 8080 ja funktsiooni URL näib vastavat skeemile. t/app/function, aga mitte täielikult. Funktsiooni ei kutsuta otse HTTP kaudu, vaid nn päästiku abil, mis, nagu nimigi ütleb, "käivitab" funktsioonikõne. Päästikud on defineeritud `func.yml projekt:
schema_version: 20180708
name: hellonode
version: 0.0.3
runtime: node
entrypoint: node func.js
format: json
triggers:
- name: hellonode-trigger
type: http
source: /hellonode-trigger # URL триггераSaame muuta päästiku nime, et see vastaks funktsiooni nimele, see lihtsustab kõike:
triggers:
- name: hellonode-trigger
type: http
source: /hellonode # совпадает с именем функцииSeejärel käivitame funktsiooni delivery uuesti ja kutsume seda välja uuelt trigerilt:
$ fn deploy --app fnexo hellonode --local
$ curl http://localhost:8080/t/fnexo/hellonode
{"message":"Hello World"}Kõik töötab! On aeg liikuda edasi reaalsete katsete juurde ja avaldada meie FaaS serveris!
Serverita funktsioonide teenuste installimine oma taristule
Seadistame kiiresti virtuaalmasina Exoscale CLI abil. Kui te pole seda veel seadistanud, saate seda kasutada See on lahe tööriist, mis suurendab veelgi teie tootlikkust. Ära unusta turvarühmas pordi 8080 avamiseks reeglit seadistada! Järgmised käsud käivitavad puhta virtuaalmasina, mis on valmis meie funktsioonide majutamiseks:
$ exo firewall create fn-securitygroup
$ exo firewall add fn-securitygroup ssh --my-ip
$ exo firewall add fn-securitygroup -p tcp -P 8080-8080 -c 0.0.0.0/0
$ exo vm create fn-server -s fn-securitygroupSeejärel saate virtuaalmasinasse SSH kaudu sisse logida ja Fn-serveri kaugserveri installida:
$ 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 installime Dockeri ja Fn-serveri samamoodi nagu kohalikus masinas ja käivitame serveri:
$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo systemctl start docker
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
$ sudo fn start
...
______
/ ____/___
/ /_ / __
/ __/ / / / /
/_/ /_/ /_/
v0.3.643Fn on funktsioonide vastuvõtmiseks valmis! Funktsioonide edastamiseks kaugserverisse kasutame käsku deploy kohalikust arvutist, lippu välja jättes --local.
Lisaks nõuab Fn Fn-serveri ja Dockeri registri asukoha määramist. Neid parameetreid saab määrata keskkonnamuutujate kaudu. FN_API_URL и FN_REGISTRY vastavalt, aga pakutakse ka mugavamat viisi juurutamiskonfiguratsioonide loomise ja haldamise hõlpsaks haldamiseks.
Fn terminites nimetatakse juurutamise konfiguratsiooni contextJärgmine käsk loob konteksti:
$ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankelSaate vaadata saadaolevaid kontekste järgmiselt:
$ fn list contexts
CURRENT NAME PROVIDER API URL REGISTRY
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
Ja äsja loodud konteksti vahetamiseks tehke järgmist.
$ fn use context exoscale
Now using context: exoscaleEdaspidi laadib Fn-funktsiooni kohaletoimetamine Dockeri pildid alla valitud DockerHubi konto abil (minu puhul nfrankel) ja seejärel teavitage kaugserverit (antud näites http://185.19.30.175:8080) teie objekti sisaldava viimase 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 .Lõpuks:
$ curl http://185.19.30.175:8080/t/fnexo/hellonode
{"message":"Hello World"}
Funktsioonide elutsükkel serverita andmetöötluses Fn-iga
Kohapealse serverita andmetöötluse eelised
Serverita andmetöötlus on mugav lahendus rakenduse sõltumatute osade kiireks rakendamiseks, mis suhtlevad keerukamate rakenduste või mikroteenustega.
See on sageli tingitud valitud tarnijaga seotuse varjatud kuludest, mis olenevalt konkreetsest kasutusjuhtumist ja mahust võivad tulevikus kaasa tuua kõrgemaid kulusid ja vähenenud paindlikkust.
Mitme- ja hübriidpilve arhitektuurid kannatavad samuti sel juhul, kuna võite kergesti sattuda olukorda, kus sooviksite kasutada serverita arvutust, kuid ettevõtte poliitikate tõttu ei pruugi see võimalik olla.
Fn on üsna lihtne kasutada ja pakub peaaegu identset FaaS-liidest minimaalsete üldkuludega. See välistab igasuguse seotuse ühegi tarnijaga; saate selle installida kohapeal või oma eelistatud pilveteenuse pakkuja kaudu. Teil on ka vabadus valida oma programmeerimiskeel.
See artikkel käsitleb ainult Fn-i põhitõdesid, kuid oma käituskeskkonna loomine on üsna lihtne ning üldist arhitektuuri saab veelgi suurendada, kasutades Fn-i koormuse tasakaalustajat või paigutades Fn-i kaitse tagamiseks puhverserveri taha.
Allikas: www.habr.com
