
â Ă«shtĂ« njĂ« nga tendencat mĂ« tĂ« dukshme nĂ« llogaritjet ĐŸĐ±Đ»Đ°ĐșŃ. Parimi themelor i funksionimit Ă«shtĂ« se infrastruktura Ă«shtĂ« njĂ« shqetĂ«sim i ofruesit tĂ« shĂ«rbimeve, jo i DevOps. Zgjerimi i burimeve automatizohet sipas ngarkesĂ«s dhe ka njĂ« shpejtĂ«si tĂ« lartĂ« tĂ« ndryshimit.
Një tjetër karakteristikë e zakonshme është tendenca për minimalizimin dhe fokusimin e kodit, prandaj llogaritjet pa serverë ndonjëherë Quhen "funksion si shërbim" (FaaS).
Historikisht, ofruesi i parĂ« i shĂ«rbimeve ĐŸĐ±Đ»Đ°ĐșŃ qĂ« ofroi FaaS me AWS Lambda ishte Amazon, nga e cila rrjedh kjo emĂ«r. Ofruesit e tjerĂ« tĂ« shĂ«rbimeve ĐŸĐ±Đ»Đ°ĐșŃ gjithashtu ofrojnĂ« analoge:
- Cloud Functions nga Google
- Azure Functions nga Microsoft
Të gjitha këto kompani ofrojnë llogaritje pa serverë, zgjerim automatik dhe pagesë vetëm për burimet e përdorura në realitet, por ato i lidhen klientët me produktin e tyre pronar. Megjithatë, ekzistojnë alternativa falas me burim të hapur për organizimin e llogaritjeve pa serverë. Duhet theksuar:
- Platforma , e zhvilluar në inkubatorin e IBM,
- , si pjesë e një ekosistemi të pasur të Spring Framework, i cili gjithashtu mund të përdoret si një fasadë për AWS Lambda, Azure Functions dhe OpenWhisk,
- , i mbështetur nga kompania Oracle.
Të gjitha ato janë plotësisht të pavarura nga re, domethënë ato mund të instalohen në çdo re, përfshirë re tuajat private, publike ose natyrisht në Exoscale.
Si është organizuar projekti Fn
Fn është plotësisht i bazuar në Docker, përbëhet nga dy komponentë kryesorë:
- CLI programi, i projektuar për të menaxhuar të gjitha aspektet e infrastrukturës Fn dhe për të komunikuar me serverin Fn,
- Saktësisht serveri Fn, një aplikacion i zakonshëm, i paketuar në një kontejner për Docker.
Funksionet që janë shpërndarë në Fn, gjithashtu ekzekutohen në kontejnerë të veçantë, duke lejuar mbështetje për shumë gjuhë programimi, si⊠Clojure!
Argumentet e funksioneve dĂ«rgohen nĂ« hyrjen standarde (STDIN), rezultatet shkruhen nĂ« daljen standarde (STDOUT). NĂ«se argumentet ose vlerat e kthyer nuk janĂ« vlera tĂ« thjeshta (p.sh., njĂ« objekt JSON) â ato mund tĂ« konvertohen pĂ«rmes njĂ« shtrese abstraksioni, e cila Ă«shtĂ« e ofruar nga vetĂ« Fn nĂ« formĂ«n e njĂ« kompleti pĂ«r zhvillimin e funksioneve (FDK).
Për lehtësi, ofrohen grupe të paracaktuara që lehtësojnë zbatimin e FaaS në një listë të gjerë gjuhësh dhe versionesh të tyre (Go, versione të ndryshme të Java, Python, etj.).
Krijimi i FaaS është i thjeshtë, duke ndjekur këtë skemë:
- Zbatojmë funksionin përmes CLI Fn: krijohet një skedar konfigurimi për aplikacionin për Fn, i bazuar në modelin e zgjedhur.
- Rriparimi i funksionit tënd, gjithashtu me ndihmën e CLI Fn: imazhi i kontejnerit vendoset në një repository të caktuar, pas së cilës serveri njoftohet për ekzistencën dhe vendndodhjen e këtij imazhi.

Principi i shpërndarjes së funksioneve në Fn
Instalimi dhe testimi lokal i funksioneve pa server
Le të fillojmë me instalimin e Fn në makinen lokale. Së pari, instalohet Docker, siç kërkon Fn. Supozohet që jemi në Debian/Ubuntu:
$ sudo apt-get update
$ sudo apt-get install docker.ioOse përdorni menaxherin e paketave/ndërtimin e Docker sipas sistemit tuaj. Më pas, mund të kaloni drejtpërdrejt në instalimin e Fn CLI. Për shembull, me ndihmën e curl:
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | shNëse punoni në OSX me Homebrew të instaluar, mund të ndiqni një rrugë tjetër:
$ 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.7MBTani që gjithçka është gati për vendosjen fillestare të funksionit tonë me përdorimin e CLI. Për lehtësi, ne do të përdorim ambientin e integruar për ekzekutimin, për shembull Node:
$ fn init --runtime node --trigger http hellonode
Krijimi i funksionit në: /hellonode
Struktura e funksionit është gjeneruar.
func.yaml është krijuar.Do të krijohet një katalog i ri hellonode për zhvillimin e mëtejshëm të funksionit tonë Fn me disa skedarë konfigurimi bazë. Brenda katalogut të sapokrijuar, mund të krijoni aplikacionin tuaj, duke ndjekur standardet e gjuhës ose ambientit të ekzekutimit që keni zgjedhur:
# ĐаŃĐ°Đ»ĐŸĐł Ń 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 krijon strukturĂ«n fillestare tĂ« projektit, krijon skedarin func.yaml, qĂ« pĂ«rmban instalimet e nevojshme pĂ«r Fn, dhe vendos njĂ« model pĂ«r kodin nĂ« gjuhĂ«n qĂ« keni zgjedhur.
Në rastin e ambientit të ekzekutimit Node, kjo do të thotë:
$ 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}
})Tani, ne do të verifikojmë shpejt funksionin tonë lokal për të parë si funksionon gjithçka.
Për të filluar, ne do të startojmë serverin Fn. Siç është thënë më parë, serveri Fn është një kontejner Docker, kështu që pas nisjes do të marrë imazhin nga regjistri Docker.
$ fn start -d # startojmë serverin lokal në sfond
Nuk mund të gjendet imazhi 'fnproject/fnserver:latest' lokalmente
latest: Duke tërhequr nga fnproject/fnserver
ff3a5c916c92: Tërheqja tërhequr plotësisht
1a649ea86bca: Tërheqja tërhequr plotësisht
ce35f4d5f86a: Tërheqja tërhequr plotësisht
...
Statusi: E shkarkuar imazhi më të ri për fnproject/fnserver:latest
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5Për të aktivizuar funksionin tonë, ne duhet ta "çelim" atë. Për këtë kërkohet emri i aplikacionit: në Fn të gjitha aplikacionet duhet të jenë të caktuara si hapësira emrash për funksionet e lidhura.
Fn CLI do të kërkojë skedarin func.yaml në katalogun aktual, që do të përdoret për konfigurimin e funksionit. Pra, së pari duhet të kalojmë në katalogun tonë. hellonode.
$ cd hellonode
$ fn deploy --app fnexo --local # pohojmë funksionin lokal, emri i aplikacionit - fnexo.
# parametri local nuk ngarkon imazhin në regjistrin e largët,
# duke e ekzekutuar direkt
Po deploy-oj hellonode në aplikacionin: fnexo
Versioni është rritur në 0.0.2
Duke ndërtuar imazhin nfrankel/hellonode:0.0.3 .
Duke përditësuar funksionin hellonode duke përdorur imazhin nfrankel/hellonode:0.0.3...
Krijimi i aplikacionit: fnexo ka qenë me sukses
Krijimi i funksionit: hellonode me nfrankel/hellonode:0.0.3 ka qenë me sukses
Krijimi i trigerrit: hellonode-trigger ka qenë me suksesSiç mund të shihni nga dalja e komandës, krijohet një imazh i ri konteineri për Docker, që përmban funksionin tonë. Funksioni është gati për thirrje, dhe kemi dy mënyra për ta bërë këtë:
- duke përdorur komandën Fn
invoke - duke e thirrur direkt përmes
http
Thirrja invoke përmes Fn thjesht imiton funksionimin HTTP për teste, që është e dobishme për verifikim të shpejtë:
$ fn invoke fnexo hellonode # thërrasim funksionin hellonode të aplikacionit fnexo
{"message":"Hello World"}Për të thirrur funksionin direkt, nevojitet të dimë URL-në e plotë:
$ curl http://localhost:8080/t/fnexo/hellonode-trigger
{"message":"Hello World"}Serveri Fn ofron funksionet e tij përmes portit 8080, dhe, siç duket, URL-ja e funksionit përputhet me skemën t/app/function, por jo jo plotë. Nëpërmjet HTTP, funksioni nuk thirret direkt, por përmes një trigger-i të quajtur, i cili sipas emrit të tij "aktive" thirrjen e funksionit. Trigger-et përcaktohen në `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 # URL e trigger-itMund të ndryshojmë emrin e trigger-it që të përputhet me emrin e funksionit, kjo do ta thjeshtojë gjithçka:
triggers:
- name: hellonode-trigger
type: http
source: /hellonode # përputhet me emrin e funksionitMë pas, e aktivizojmë përsëri shpërndarjen e funksionit dhe e thërrasim atë nga trigger-i i ri:
$ fn deploy --app fnexo hellonode --local
$ curl http://localhost:8080/t/fnexo/hellonode
{"message":"Hello World"}Të gjitha funksionon! Koha është për eksperimente të natyrshme dhe të publikojmë FaaS-in tonë në server!
Instalimi i shërbimeve të funksioneve pa server në infrastrukturën tonë
Le t'i vendosim shpejt njĂ« makinĂ« virtuale duke pĂ«rdorur CLI Exoscale. NĂ«se ende nuk e keni ndarĂ« â mund tĂ« pĂ«rdorni . Ky Ă«shtĂ« njĂ« mjet i shkĂ«lqyer qĂ« do ta rrisĂ« edhe mĂ« shumĂ« produktivitetin tuaj. Mos harroni tĂ« configuroni njĂ« rregull pĂ«r hapjen e portit 8080 nĂ« Grupin e SigurisĂ«! Komandat e mĂ«poshtme do tĂ« startojnĂ« njĂ« makinĂ« virtuale tĂ« pastĂ«r, gati pĂ«r tĂ« hostuar funksionet tanĂ«:
$ 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-securitygroupPastaj mund të lidheni përmes ssh në makinën virtuale dhe të instaloni serverin e largët Fn:
$ exo ssh fn-server
Autenticiteti i host-it '185.19.30.175 (185.19.30.175)' nuk mund të vërtetohet.
Përshkrimi i çelësit ECDSA është SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.
Jeni të sigurt që doni të vazhdoni lidhjen (po/jo)? po
Kujdes: Shtuar përherë '185.19.30.175' (ECDSA) në listën e hosteve të njohur.
Mirësevini në Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)Pastaj instalohet Docker dhe serveri Fn ashtu siç është bërë edhe në makinën lokale, filloni serverin:
$ 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 është gati për të pranuar funksionet! Për ngarkimin e funksioneve në serverin e largët do të përdorim komandën deploy nga kompjuteri lokal, duke anashkaluar flamurin --local.
Për më tepër, Fn kërkon të specifikoni vendndodhjen e serverit Fn dhe regjistrit Docker. Këto parametra mund të vendosen përmes variablave të ambientit FN_API_URL dhe FN_REGISTRY përkatësisht, por ofrohet edhe një mënyrë më të lehtë për menaxhimin e krijimit dhe konfigurimeve për shpërndarje.
Në terma të Fn, konfigurimi për shpërndarje quhet context. Komanda e mëposhtme do të krijojë një kontekst:
$ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankelMund të shihni kontekstet e disponueshme kështu:
$ fn list contexts
CURRENT NAME PROVIDER API URL REGISTRY
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
Dhe mund të kaloni në kontekstin që sapo u krijua kështu:
$ fn use context exoscale
Tani po pĂ«rdoret konteksti: exoscaleDuke filluar nga ky moment, shpĂ«rndarja e funksioneve Fn do tĂ« ngarkojĂ« imazhe Docker, duke pĂ«rdorur llogarinĂ« tuaj tĂ« zgjedhur nĂ« DockerHub (nĂ« rastin tim â nfrankel), pas sĂ« cilĂ«s do tĂ« njoftojĂ« serverin e largĂ«t (nĂ« kĂ«tĂ« shembull â http://185.19.30.175:8080) pĂ«r vendndodhjen dhe versionin e imazhit mĂ« tĂ« fundit qĂ« pĂ«rmban funksionin tuaj.
$ fn deploy --app fnexo . # ekzekutohet në makinë lokale nga katalogu hellonode
Duke shpërndarë funksionin në: /.
Duke shpërndarë hellonode në aplikacionin: fnexo
Rritur në version 0.0.5
Duke ndërtuar imazhin nfrankel/hellonode:0.0.5 .Së fundi:
$ curl http://185.19.30.175:8080/t/fnexo/hellonode
{"message":"Hello World"}
Cikliku i jetës së funksionit në llogaritjet pa serverë të bazuara në Fn
Përparësitë e llogaritjeve pa serverë në infrastrukturën tuaj
Llogaritjet pa serverë janë një zgjidhje e lehtë për implementimin e shpejtë të pjesëve të pavarura të aplikacioneve që ndërveprojnë me aplikacione më komplekse ose mikro-shërbime.
Shpesh, kjo lidhet me koston e fshehur të lidhjes me ofruesin e zgjedhur, e cila, varësisht nga rastet specifike të përdorimit dhe volumi, mund të çojë në kosto më të larta dhe ulje të fleksibilitetit në të ardhmen.
Arkitekturat multi-rete dhe hibridë gjithashtu vuajnë në këtë rast, sepse mund të ndodheni lehtësisht në një situatë ku do të dëshironit të përdorni llogaritjet pa serverë, por kjo mund të jetë e pamundur për shkak të politikave të korporatave.
Fn është mjaft i lehtë për t'u përdorur, dhe mund të ofrojë një ndërfaqe të ngjashme me FaaS, me shpenzime të vogla. Ai do t'ju çojë nga çdo lidhje me ofruesin, mund ta instaloni lokal ose në çdo ofrues të zgjidhjeve cloud që preferoni. Gjithashtu, ka liri në zgjedhjen e gjuhës së programimit.
Artikulli paraqet vetëm bazat e Fn, por krijimi i një mjedisi ekzekutimi të vet është mjaft i thjeshtë, dhe arkitektura e përgjithshme mund të zgjerohët më gjerë duke përdorur një balancues ngarkese Fn, ose duke vendosur Fn pas një proxy për mbrojtje.
Burimi: habr.com
