
ā viena no izteiktÄkajÄm tendencÄm mÄkoÅskaitļoÅ”anÄ. Pamata darbÄ«bas princips ir tÄds, ka infrastruktÅ«ra ir pakalpojumu sniedzÄju rÅ«pe, nevis DevOps speciÄlistu. Resursu mÄrogoÅ”ana automÄtiski pielÄgojas slodzei un ir ar augstu izmaiÅu Ätrumu.
VÄl viena kopÄ«ga iezÄ«me ir tendence minimizÄt un koncentrÄt kodu, tÄpÄc serverless skaitļoÅ”anu reizÄm sauc par "funkcija kÄ pakalpojumu" (FaaS).
VÄsturiskÄ ziÅÄ pirmais mÄkoÅpakalpojumu sniedzÄjs, kurÅ” piedÄvÄja FaaS ar AWS Lambda, bija Amazon, no kurienes arÄ« radies Å”is nosaukums. Citi mÄkoÅpakalpojumu sniedzÄji piedÄvÄ lÄ«dzÄ«gas alternatÄ«vas:
- Google Cloud Functions
- Microsoft Azure Functions
Visas Ŕīs kompÄnijas piedÄvÄ serverless skaitļoÅ”anu, automÄtisku mÄrogoÅ”anu un maksÄÅ”anu tikai par faktiski izmantotajiem resursiem, bet tajÄ paÅ”Ä laikÄ piesaista klientus savam patentÄtajam produktam. TomÄr pastÄv bezmaksas alternatÄ«vas ar atvÄrtÄ koda risinÄjumiem serverless skaitļoÅ”anai. VÄrts pieminÄt:
- Platformu , kuru izstrÄdÄ IBM inkubators,
- , kÄ daļu no diezgan bagÄtÄ«gas Spring Framework ekosistÄmas, kuru var izmantot arÄ« kÄ AWS Lambda, Azure Functions un OpenWhisk saskarni,
- , kuru atbalsta Oracle.
Visi tie ir pilnÄ«gi neatkarÄ«gi no mÄkoÅiem, t.i., tos var uzstÄdÄ«t jebkurÄ mÄkoÅos, tostarp jÅ«su paÅ”u, publiskajÄ vai privÄtajÄ, un protams, Exoscale.
KÄ ir izveidots projekts Fn
Fn pilnÄ«bÄ balstÄs uz Docker, sastÄv no diviem galvenajiem komponentiem:
- CLI programma, kas paredzÄta, lai pÄrvaldÄ«tu visus Fn infrastruktÅ«ras aspektus, un mijiedarbojas ar Fn serveri,
- Pats Fn servers, parasts lietojums, iepakots Docker konteinerÄ.
Funkcijas, kas izvietotas Fn, tiek izpildÄ«tas arÄ« atseviŔķos konteineros, kas ļauj atbalstÄ«t daudzus programmÄÅ”anas valodas, piemÄram⦠Clojure!
Funkciju argumenti tiek nodoti standarta ievadÄ (STDIN), rezultÄti tiek rakstÄ«ti standarta izvadÄ (STDOUT). Ja argumenti vai atgriezamÄs vÄrtÄ«bas nav vienkÄrÅ”i vÄrtÄ«bas (piemÄram, JSON objekts) ā tÄs var tikt pÄrveidotas, izmantojot abstrahÄÅ”anas slÄni, ko nodroÅ”ina Fn kÄ funkciju izstrÄdes komplektu (FDK).
Lai atvieglotu darbu, tiek piedÄvÄti iebÅ«vÄti veidÅu komplekti, kas atvieglo FaaS izvÄrÅ”anu plaÅ”Ä dažÄdu valodu un to versiju sarakstÄ (Go, dažÄdas Java versijas, Python u.c.).
FaaS izveide ir vienkÄrÅ”a, sekojot Å”ai shÄmai:
- Izvietot funkciju, izmantojot CLI Fn: tiek izveidots lietojumprogrammas konfigurÄcijas fails Fn, pamatojoties uz izvÄlÄto veidni.
- Izdojam savu funkciju, atkal izmantojot CLI Fn: konteineru attÄls tiek ievietots kÄdÄ krÄtuvÄ, pÄc tam serveris tiek informÄts par attÄla esamÄ«bu un izvietojumu.

Funkciju piegÄdes princips Fn
LokÄlÄ uzstÄdīŔana un bezserveru funkciju testÄÅ”ana
SÄksim ar Fn uzstÄdīŔanu vietÄjÄ datorÄ. Vispirms ir jÄinstalÄ Docker, kÄ to prasa Fn. PieÅemam, ka esam Debian/Ubuntu:
$ sudo apt-get update
$ sudo apt-get install docker.ioVai nu izmantojiet pakotÅu pÄrvaldnieku / Docker bÅ«vniecÄ«bu atbilstoÅ”i jÅ«su sistÄmai. PÄc tam varat tieÅ”i pÄriet uz Fn CLI uzstÄdīŔanu. PiemÄram, izmantojot curl:
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | shJa strÄdÄjat ar OSX, kur ir uzstÄdÄ«ts Homebrew, varat doties citu ceļu:
$ brew install fn
==> LejupielÄdÄ https://homebrew.bintray.com/bottles/fn-0.5.8.high_sierra.bottle.tar.gz
==> LejupielÄdÄ no https://akamai.bintray.com/b1/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb
######################################################################## 100.0%
==> Tiek ielejots fn-0.5.8.high_sierra.bottle.tar.gz
/usr/local/Cellar/fn/0.5.8: 5 faili, 16.7MBTagad viss ir gatavs, lai sÄkotnÄji izvÄrstu mÅ«su funkciju, izmantojot CLI. Lai atvieglotu, mÄs izmantosim iebÅ«vÄto vidi palaiÅ”anai, piemÄram, Node:
$ fn init --runtime node --trigger http hellonode
Izveido funkciju: /hellonode
Funkciju paraugs Ä£enerÄts.
func.yaml izveidots.Tiks izveidots jauns katalogs hellonode turpmÄkai mÅ«su Fn funkcijas attÄ«stÄ«bai ar dažiem pamatkonfigurÄcijas failiem. IekÅ” jaunizveidotÄ kataloga jÅ«s varat izveidot savu lietojumprogrammu, ievÄrojot izvÄlÄtÄ valodas vai izpildes vides standartu:
# ŠŠ°Ńалог Ń 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 izveido projekta sÄkotnÄjo struktÅ«ru, izveidojot failu func.yaml, kas satur nepiecieÅ”amÄs iestatīŔanas fn un nosaka veidni kodam valodÄ, kuru izvÄlÄjÄties.
Ja runÄjam par Node izpildlaiku, tas nozÄ«mÄ:
$ 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}
})Tagad mÄs Ätri pÄrbaudÄ«sim mÅ«su funkciju lokÄli, lai redzÄtu, kÄ viss darbojas.
Vispirms mÄs palaidÄ«sim Fn serveri. KÄ jau tika teikts, Fn servers ir Docker konteiners, tÄpÄc pÄc palaiÅ”anas tas Åems attÄlu no Docker reÄ£istra.
$ fn start -d # palaidÄ«sim lokÄlo serveri fonÄ
Image 'fnproject/fnserver:latest' nav atrasts lokÄli
latest: Velk no fnproject/fnserver
ff3a5c916c92: Velk pabeigts
1a649ea86bca: Velk pabeigts
ce35f4d5f86a: Velk pabeigts
...
Status: LejupielÄdÄts jaunÄks attÄls kÄ fnproject/fnserver:latest
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5Lai palaistu mÅ«su funkciju, tai jÄbÅ«t "izlaistai". Tam nepiecieÅ”ams lietoÅ”anas nosaukums: Fn visÄm lietojumprogrammÄm jÄbÅ«t noteiktÄm kÄ nosaukumu telpÄm saistÄ«tÄm funkcijÄm.
Fn CLI meklÄs failu func.yaml paÅ”reizÄjÄ katalogÄ, kas tiks izmantots funkcijas konfigurÄÅ”anai. TÄpÄc vispirms jÄpÄrslÄdzas uz mÅ«su katalogu hellonode.
$ cd hellonode
$ fn deploy --app fnexo --local # izlaidÄ«sim funkciju lokÄli, lietojumprogrammas nosaukums - fnexo.
# vietÄjais parametrs neieliek attÄlu attÄlinÄtajÄ reÄ£istrÄ,
# palaidīsim to tieŔi
Izlaižot hellonode lietojumprogrammÄ: fnexo
PalielinÄts lÄ«dz versijai 0.0.2
Veido attÄlu nfrankel/hellonode:0.0.3 .
Atjaunojam funkciju hellonode, izmantojot attÄlu nfrankel/hellonode:0.0.3...
Veiksmīgi izveidota lietojumprogramma: fnexo
Veiksmīgi izveidota funkcija: hellonode ar nfrankel/hellonode:0.0.3
VeiksmÄ«gi izveidots triggers: hellonode-triggerKÄ var redzÄt no komandas izvadÄ, tiek izveidots jauns Docker konteinera attÄls, kas satur mÅ«su funkciju. Funkcija ir gatava vÄrdus saukt, un mums ir divi veidi, kÄ to izdarÄ«t:
- izmantojot Fn komandu
invoke - izsaucot tieŔi caur
http
Izsaukt invoke izmantojot Fn, vienkÄrÅ”i emulÄ HTTP darbu testiem, kas ir Ärti Ätrai pÄrbaudei:
$ fn invoke fnexo hellonode # izsaucam funkciju hellonode lietojumprogrammÄ fnexo
{"message":"Hello World"}Lai izsauktu funkciju tieÅ”i, jÄzina pilns URL:
$ curl http://localhost:8080/t/fnexo/hellonode-trigger
{"message":"Hello World"}Fn servers piedÄvÄ savas funkcijas caur 8080 portu, un, kÄ Å”Ä·iet, funkcijas URL atbilst shÄmai t/app/function, bet ne pilnÄ«bÄ. Caur HTTP funkcija netiek izsaukta tieÅ”i, bet caur saukto izsistÄju, kas, kÄ norÄda nosaukums, "izsauc" funkciju. IzsistÄji tiek noteikti `func.yml projekta:
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 # Trigeru URLMÄs varam mainÄ«t trigeru nosaukumu, lai tas atbilstu funkcijas nosaukumam, tas atvieglos procesu:
triggers:
- name: hellonode-trigger
type: http
source: /hellonode # atbilst funkcijas nosaukumamPÄc tam mÄs vÄlreiz palaižam funkcijas piegÄdi un izsaucam to no jauna trigera:
$ fn deploy --app fnexo hellonode --local
$ curl http://localhost:8080/t/fnexo/hellonode
{"message":"Hello World"}Viss strÄdÄ! Tagad ir Ä«stais laiks veikt reÄlus eksperimentus un publicÄt mÅ«su FaaS serverÄ«!
Serverless funkciju pakalpojumu uzstÄdīŔana uz savas infrastruktÅ«ras
Ätri uzstÄdÄ«sim virtuÄlo maŔīnu, izmantojot Exoscale CLI. Ja jÅ«s to vÄl neesat konfigurÄjis ā varat izmantot . Tas ir lielisks rÄ«ks, kas vÄl vairÄk palielinÄs jÅ«su produktivitÄti. Neaizmirstiet iestatÄ«t noteikumu, lai atvÄrtu 8080 portu droŔības grupÄ! Å ie komandas palaidÄ«s tÄ«ru virtuÄlo maŔīnu, kas gatava mÅ«su funkciju izvietoÅ”anai:
$ 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-securitygroupPÄc tam varat piekļūt virtuÄlajai maŔīnai, izmantojot ssh, un uzstÄdÄ«t Fn atÄlinÄto serveri:
$ exo ssh fn-server
Hosta '185.19.30.175 (185.19.30.175)' autentiskums nevar tikt noteikts.
ECDSA atslÄgas pirksta nospiedums ir SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.
Vai esat pÄrliecinÄts, ka vÄlaties turpinÄt savienojumu (jÄ/nÄ)? jÄ
BrÄ«dinÄjums: uz visiem laikiem pievienots '185.19.30.175' (ECDSA) zinÄmo hostu sarakstam.
Laipni lÅ«dzam Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)PÄc tam uzstÄdÄm Docker un Fn serveri tÄpat kÄ tas tika darÄ«ts uz vietÄjÄs maŔīnas, palaižam 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 ir gatavs funkciju saÅemÅ”anai! Lai funkcijas mÄrÄ·tiecÄ«gi nolasÄ«tu no attÄlinÄtÄ servera, izmantosim komandu deploy no vietÄjÄ datora, izslÄdzot eglÄ«tes --local.
TurklÄt Fn prasa norÄdÄ«t Fn servera un Docker reÄ£istra atraÅ”anÄs vietu. Å ie parametri var tikt iestatÄ«ti, izmantojot vides mainÄ«gos FN_API_URL un FN_REGISTRY atbilstoÅ”i, taÄu tiek piedÄvÄts arÄ« ÄrtÄks veids, kÄ viegli pÄrvaldÄ«t konfigurÄciju izveidi un pÄrvaldÄ«bu izvietoÅ”anai.
Fn terminoloÄ£ijÄ kontekstu izvietoÅ”anai sauc par context. NÄkamÄ komanda izveidos kontekstu:
$ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankelJÅ«s varat apskatÄ«t pieejamos kontekstus Å”Ädi:
$ fn list contexts
PAÅ REIZÄJAIS NOSAUKUMS PROVIDER API URL REGISTRY
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
Un pÄrslÄgties uz tikko izveidoto kontekstu ir Å”Ädi:
$ fn use context exoscale
Tagad izmantojam kontekstu: exoscaleSÄkot no Ŕīs vietas, Fn funkciju piegÄde tiks ielÄdÄjusi Docker attÄlus, izmantojot izvÄlÄto kontu DockerHub (manÄ gadÄ«jumÄ ā nfrankel), pÄc tam paziÅojot attÄlinÄtajam serverim (Å”ajÄ piemÄrÄ ā http://185.19.30.175:8080) par pÄdÄjÄ attÄla, kas satur jÅ«su funkciju, atraÅ”anÄs vietu un versiju.
$ fn deploy --app fnexo . # izpildÄms uz lokÄlÄs maŔīnas no hellonode direktorijas
PiegÄdÄ funkciju: /.
PiegÄde hellonode uz lietotni: fnexo
Jums pieŔķirta versija 0.0.5
BÅ«vÄjot attÄlu nfrankel/hellonode:0.0.5 .Visbeidzot:
$ curl http://185.19.30.175:8080/t/fnexo/hellonode
{"message":"Hello World"}
Funkcijas dzÄ«ves cikls bezserveru skaitīŔanÄ, balstoties uz Fn
Bezserveru skaitīŔanas priekÅ”rocÄ«bas uz jÅ«su iespÄjÄm
Bezserveru skaitīŔana ā Ärts risinÄjums, lai Ätri ieviestu neatkarÄ«gas lietojumprogrammas daļas, kas sadarbojas ar sarežģītÄkÄm lietojumprogrammÄm vai mikropakalpojumiem.
Bieži tas saistÄ«ts ar slÄptÄm izmaksÄm, piesaistot izvÄlÄtajam pakalpojumu sniedzÄjam, kas atkarÄ«bÄ no konkrÄtÄ pielietojuma un apjoma var novest pie augstÄkÄm izmaksÄm un samazinÄtas elastÄ«bas nÄkotnÄ.
Multicloud un hibrÄ«das mÄkoÅu arhitektÅ«ras arÄ« cieÅ” Å”ÄdÄ gadÄ«jumÄ, jo var viegli nonÄkt situÄcijÄ, kad vÄlÄtos izmantot bezserveru skaitīŔanu, bet korporatÄ«vÄs politikas dÄļ tas varÄtu bÅ«t neiespÄjami.
Fn ir pietiekami vienkÄrÅ”s lietoÅ”anÄ, var sniegt gandrÄ«z tÄdu paÅ”u FaaS interfeisu, ar nelielÄm izmaksÄm. Tas atbrÄ«vos no jebkÄdÄm piesaistÄm pakalpojumu sniedzÄjiem, to var uzstÄdÄ«t lokÄli vai pie jebkura ÄrtÄ mÄkoÅu pakalpojumu sniedzÄja pÄc jÅ«su izvÄles. TÄpat ir brÄ«vÄ«ba izvÄlÄties programmÄÅ”anas valodu.
RakstÄ ir aplÅ«kotas tikai Fn pamati, taÄu paÅ”a izpildes vides izveide ir diezgan vienkÄrÅ”a, un vispÄrÄjo arhitektÅ«ru var izplatÄ«t plaÅ”Äk, izmantojot Fn slodzes balansÄtÄju vai izvietojot Fn aiz proksi aizsardzÄ«bai.
Avots: habr.com
