
â on ĂŒks silmapaistvamaid suundi pilvandmetöötluses. Peamine tööpĂ”himĂ”te on see, et infrastruktuuri haldamine ei kuulu DevOps'ide, vaid teenusepakkujate ĂŒlesanne. Ressursside skaleerimine kohandub automaatselt koormuse jĂ€rgi ja omab suurt muutmiskiirus.
Teine ĂŒhine joon on tendents koodi minimeerimiseks ja fokusseerimiseks, mistĂ”ttu nimetatakse serverivabu arvutusi mĂ”nikord "funktsioon kui teenus" (FaaS).
Ajalooliselt oli esimene pilveteenuste pakkuja, kes pakkus FaaS-i AWS Lambda kaudu, Amazon, kust see nimi pÀrineb. Ka teised pilveteenuste pakkujad pakuvad analooge:
- Google'i Cloud Functions
- Microsofti Azure Functions
KÔik need ettevÔtted pakuvad serverivabu arvutusi, automaatset skaleerimist ja tasu ainult tegelikult kasutatud ressursside eest, kuid nad seovad kliente oma patenteeritud toote juurde. Siiski on olemas tasuta avatud lÀhtekoodiga alternatiive serverivabade arvutuste korraldamiseks. Tasub mÀrkida:
- Platvormi , mida arendab IBM-i inkubaator,
- , mis on osa piisavalt rikkalikust Spring Frameworki ökosĂŒsteemist, mida saab kasutada ka AWS Lambda, Azure Functions ja OpenWhiski fasadina,
- , mida toetab Oracle.
KÔik need on tÀielikult sÔltumatud pilvedest, st need on installitavad igas pilves, sealhulgas teie enda, avalikus vÔi erapilves, ja muidugi ka Exoscale'is.
Kuidas Fn projekt on ĂŒles ehitatud
Fn pÔhineb tÀielikult Docker'il, koosnedes kahest pÔhikomponendist:
- CLI programmist, mis on mÔeldud Fn infrastruktuuri kÔigi aspektide haldamiseks ja koostööks Fn serveriga,
- Ise Fn server, tavaline rakendus, mis on pakitud Docker konteinerisse.
Fn'is juurutatud funktsioonid töötavad samuti eraldi konteinerites, mis vÔimaldab toetada vÀga mitmeid programmeerimiskeeli, nÀiteks⊠Clojure!
Funktsioonide argumendid edastatakse standardse sisendi (STDIN) kaudu, tulemused kirjutatakse standardsele vÀljundile (STDOUT). Kui argumendid vÔi tagastatavad vÀÀrtused ei ole lihtsad vÀÀrtused (nÀiteks JSON objekt), saavad need olla muudetud abistava kihi kaudu, mille Fn pakub funktsioonide arendamise komplektina (FDK).
Kasutamiseks on saadaval sisseehitatud mallide komplektid, mis lihtsustavad FaaSi juurutamist erinevatel keeltes ja nende versioonides (Go, erinevad Java versioonid, Python jne).
FaaSi loomine on lihtne, jÀrgides seda skeemi:
- Jurutame funktsiooni CLI Fn abil: loodakse rakenduse konfigureerimisfail Fn jaoks, mis pÔhineb valitud mallil.
- VÀljastame oma funktsiooni, taas CLI Fn abil: konteineripilt paigutatakse mingisse registrisse, pÀrast mida serverit teavitakse selle pildi olemasolust ja asukohast.

Funktsioonide kohaletoimetamise pÔhimÔte Fn-s
Kohalik installatsioon ja serverivaba funktsioonide testimine
Alustame Fn-i installimist kohalikus masinas. Esiteks installitakse Docker, nagu Fn nĂ”uab. Eeldame, et oleme Debian/Ubuntu sĂŒsteemil:
$ sudo apt-get update
$ sudo apt-get install docker.ioVĂ”i kasutage oma sĂŒsteemi jaoks pakihaldurit/ Dockerit. SeejĂ€rel saame otse jĂ€tkata Fn CLI installimisega. NĂ€iteks curl abil:
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | shKui töötate OSX-il koos Homebrew'ga, vÔib minna teist teed:
$ brew install fn
==> Laadimine https://homebrew.bintray.com/bottles/fn-0.5.8.high_sierra.bottle.tar.gz
==> Laadimine aadressilt 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 failid, 16.7MBNĂŒĂŒd on kĂ”ik valmis meie funktsiooni esmaseks juurutamiseks CLI abil. Lihtsuse huvides kasutame sisseehitatud keskkonda, nĂ€iteks Node'i:
$ fn init --runtime node --trigger http hellonode
Funktsioon luuakse asukohas: /hellonode
Funktsiooni aluskood genereeritud.
func.yaml loodud.Loodud saab uus kataloog hellonode edasi meie Fn funktsiooni arendamiseks koos mÔnede pÔhikonfigureerimisfailidega. Uues loodud kataloogis saate luua oma rakenduse, jÀrgides teie 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 ning loob faili func.yaml, mis sisaldab Fn-ile vajalikke seadistusi, ja seab valitud keeles koodimalli.
Node'i kÀituskeskkonna puhul tÀhendab see:
$ 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 kontrollime kiiresti meie funktsiooni kohalikult, et nĂ€ha, kuidas kĂ”ik töötab.
KÔigepealt kÀivitame Fn serveri. Nagu juba mainitud, on Fn server Docker konteiner, seega peale kÀivitamist see lÀheb ja vÔtab pildi Docker registrist.
$ fn start -d # kÀivitame kohaliku serveri taustal
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
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5KÀivitamiseks tuleb meie funktsioon "vÀlja viia". Selleks on vajalik rakenduse nimi: Fn-is peavad kÔik rakendused olema mÀÀratud seotud funktsioonide nimedena.
Fn CLI otsib faili func.yaml praeguses kataloogis, mis rakendub funktsiooni seadistamiseks. Seega peame esmalt minema meie katalooge hellonode.
$ cd hellonode
$ fn deploy --app fnexo --local # vÀljastame funktsiooni kohalikult, rakenduse nimi - fnexo.
# parameeter local ei lae pilti kaugregistrisse,
# kÀivitades selle otse
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 nÀha kÀsu vÀljundist, luuakse uus Docker konteineri pilt, mis sisaldab meie funktsiooni. Funktsioon on kutsumiseks valmis ning meil on kaks vÔimalust selle tegemiseks:
- kasutades kÀsku Fn
invoke - kutsudes otse lÀbi
http
Kutsumine invoke Fn emuleerib lihtsalt HTTP tööd testide jaoks, mis on kiire testimise jaoks mugav:
$ fn invoke fnexo hellonode # kutsume fnexo rakenduse hellonode funktsiooni
{"message":"Hello World"}Funktsiooni otse kutsumiseks tuleb teada tÀielikku URL-i:
$ curl http://localhost:8080/t/fnexo/hellonode-trigger
{"message":"Hello World"}Fn server pakub oma funktsioone porti 8080 kaudu ning nÀib, et funktsiooni URL vastab skeemile t/app/function, kuid mitte tÀielikult. HTTP kaudu kutsutakse funktsiooni mitte otse, vaid nn triggeri kaudu, mis oma nime kohaselt "kÀivitab" funktsiooni kutsumise. Triggerid on mÀÀratletud `func.yml projekti:
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 # triggeri URLSaame muuta triggeri nime, et see vastaks funktsiooni nimele, see lihtsustab kÔike:
triggers:
- name: hellonode-trigger
type: http
source: /hellonode # vastab funktsiooni nimeleSeejÀrel kÀivitame funktsiooni tarnimise veel kord ja kutsume selle uue triggeri kaudu:
$ fn deploy --app fnexo hellonode --local
$ curl http://localhost:8080/t/fnexo/hellonode
{"message":"Tere, maailm"}KÔik töötab! On just Ôige aeg minna reaalsesse katsetusse ja avaldada meie FaaS serveris!
Serverless funktsioonide teenuste seadistamine oma infrastruktuuris
Alustame kiiresti virtuaalse masina seadistamist Exoscale'i CLI abil. Kui te ei ole seda veel seadistanud â vĂ”ite kasutada . See on suurepĂ€rane tööriist, mis tĂ”stab veelgi teie tootlikkust. Ărge unustage seadistada reeglit port 8080 avamiseks Security Group'is! JĂ€rgmised kĂ€sud kĂ€ivitavad puhta virtuaalse masina, 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 saab SSH kaudu virtuaalsesse masinasse siseneda ja paigaldada kaugserveri Fn:
$ exo ssh fn-server
Hosti '185.19.30.175 (185.19.30.175)' autentsust ei saa kehtestada.
ECDSA vÔtme sÔrmejÀlg on SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.
Kas soovite jĂ€tkata ĂŒhenduse loomist (jah/ei)? jah
Hoiatus: '185.19.30.175' (ECDSA) on pĂŒsivalt lisatud tuntud hostide nimekirja.
Tere tulemast Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)SeejÀrel paigaldame Docker'i ja Fn serveri samuti nagu seda tehti kohalikul masinal ning 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 valmis funktsioonide vastuvÔtmiseks! Funktsioonide sihtimise jaoks kaugserverisse kasutame kÀsku deploy kohalikust arvutist, jÀttes vÀlja flagi --local.
Lisaks peab Fn nÀitama Fn serveri ja Docker'i registri asukohta. Need parameetrid vÔivad olla mÀÀratud keskkonnamuutujate kaudu FN_API_URL ja FN_REGISTRY vastavalt, kuid pakutakse ka mugavamat viisi konfiguratsioonide loomise ja haldamise hÔlbustamiseks.
Fn kontekst, mida kasutatakse rakenduse juurutamiseks, nimetatakse context. JÀrgmine kÀsk loob konteksti:
$ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankelSaate vaadata saadaval olevaid kontekste nii:
$ 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ĂŒlituda just loodud konteksti nii:
$ fn use context exoscale
NĂŒĂŒd kasutame konteksti: exoscaleAlates sellest kohast hakkab Fn funktsioonide tarnimine laadima Docker'i pilte, kasutades valitud kontot DockerHub'is (minu puhul â nfrankel), seejĂ€rel teavitab see kaugserverit (sel juhul â http://185.19.30.175:8080) viimase pildi asukohast ja versioonist, mis sisaldab teie funktsiooni.
$ fn deploy --app fnexo . # kÀivitatakse lokaalselt hellonode kataloogist
Funktsiooni laadimine asukohas: /.
Laadimine hellonode rakendusse: fnexo
Versioon tÔstetud 0.0.5-ni
Pildi koostamine nfrankel/hellonode:0.0.5 .LÔpuks:
$ curl http://185.19.30.175:8080/t/fnexo/hellonode
{"message":"Tere, maailm"}
Fn baasil serverless arvutustes funktsiooni elutsĂŒkkel
Serverless arvutuste eelised oma infrastruktuuris
Serverless arvutused on mugav lahendus sÔltumatute rakenduse osade kiireks juurutamiseks, mis suhtlevad keerukamate rakenduste vÔi mikroteenustega.
Sageli on sellel peidetud kulu seondumine valitud teenusepakkujaga, mis sÔltuvalt konkreetsest kasutusjuhtumist ja mahust vÔib viia kÔrgemate kuludeni ja vÀhenenud paindlikkuseni tulevikus.
Multicloud ja hĂŒbriidsete pilvearhitektuuride korral tekivad samuti probleemid, kuna vĂ”ib lihtsalt sattuda olukorda, kus soovite kasutada serverless arvutusi, kuid ettevĂ”tte poliitika tĂ”ttu vĂ”ib see olla vĂ”imatu.
Fn on kasutajasÔbralik, see vÔib pakkuda peaaegu samasugust FaaS liidest, vÀikeste kuludega. See vabastab teid igasugustest teenusepakkuja sidemetest, seda saab installida lokaalselt vÔi valida sobivas pilveteenuse pakkujas. Samuti on vabade valikute osas programmeerimiskeeles.
Artiklis tutvustatakse vaid Fn pĂ”hialuseid, kuid oma tĂ€itmisvĂ”imekeskkonna loomine on piisavalt lihtne ning ĂŒldist arhitektuuri saab laiendada Fn tasakaalustaja kasutamisega vĂ”i paigutades Fn proksi taha kaitseks.
Allikas: habr.com
