
â Ă«shtĂ« njĂ« nga tendencat mĂ« tĂ« dukshme nĂ« computingun cloud. Parimi kryesor i funksionimit Ă«shtĂ« se infrastruktura Ă«shtĂ« pĂ«rgjegjĂ«si e ofruesve tĂ« shĂ«rbimeve dhe jo e DevOps-Ă«ve. Zgjerimi i resurseve pĂ«rshtatet automatikisht me ngarkesĂ«n dhe ka njĂ« shpejtĂ«si tĂ« lartĂ« ndryshimi.
Një karakteristikë tjetër e zakonshme është tendenca për minimizimin dhe fokusimin e kodit, prandaj computingun pa serverë ndonjëherë e quajnë "funksion si shërbim" (FaaS).
Ofruesi i parë historik i shërbimeve cloud, që ofroi FaaS me AWS Lambda, ishte Amazon, nga ku erdhi ky emër. Ofrues të tjerë të shërbimeve cloud gjithashtu ofrojnë analoge:
- Cloud Functions nga Google
- Azure Functions nga Microsoft
Të gjithë këta ofrues japin computing pa serverë, zgjerim automatik dhe pagese vetëm për burimet e përdorura realisht, por ata lidhin klientët me produktin e tyre pronar. Megjithatë, ekzistojnë alternativa falas me kod të hapur për krijimin e computingut pa serverë. Duhet thënë:
- Platforma , e zhvilluar nga inkubatori IBM,
- , si pjesë e një ekosisteme mjaft të pasur të Spring Framework, e cila gjithashtu mund të përdoret si një fasadë për AWS Lambda, Azure Functions dhe OpenWhisk,
- , mbështetur nga Oracle.
Të gjitha këto janë plotësisht të pavarura nga cloud, që do të thotë se instalohen në çdo cloud, duke përfshirë cloud-in tuaj personal, publik ose privat, dhe natyrisht në Exoscale.
Si është ndërtuar projekti Fn
Fn është plotësisht i bazuar në Docker, përbëhet nga dy komponentë kryesorë:
- CLI e programit, e dizajnuar për të menaxhuar të gjitha aspektet e infrastrukturës Fn dhe për tu ndërvepruar me serverin Fn,
- Në vetë serverin Fn, një aplikacion i zakonshëm, i paketuar në një kontejner për Docker.
Funksionet që zhvillohen në Fn gjithashtu ekzekutohen në kontejnerë të veçantë, duke lejuar mbështetje për shumë gjuhë programimi, për shembull... 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., objekt JSON) â ato mund tĂ« konvertohen pĂ«rmes njĂ« shtrese abstarximi qĂ« ofrohet nga vetĂ« Fn si njĂ« paketĂ« zhvillimi funksionesh (FDK).
Për lehtësi, ofrohen grupe të integruar modelesh që lehtësojnë zhvillimin e FaaS në një gamë të gjerë gjuhësh dhe versionesh të tyre (Go, versionet e ndryshme të Java, Python, etj.).
Krijimi i FaaS është i thjeshtë, duke ndjekur këtë skemë:
- Zhvillojmë funksionin me ndihmën e CLI Fn: krijohet një skedar konfigurimi aplikacioni për Fn, i bazuar në modelin e zgjedhur.
- Nisemi me funksionin tonë, përsëri me ndihmën e CLI Fn: imazhi i kontejnerit ruhen në një depo, pas së cilës serveri njoftohet për ekzistencën dhe vendndodhjen e këtij imazhi.

Parimi i dorëzimit të funksioneve në Fn
Instalimi dhe testimi lokal i funksioneve pa server
Le të fillojmë instalimin e Fn në makinën lokale. Së pari, instalohet Docker, siç kërkohet nga 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. Pastaj mund të kaloni direkt 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ë shkoni një rrugë tjetër:
$ brew install fn
==> Po shkarkon https://homebrew.bintray.com/bottles/fn-0.5.8.high_sierra.bottle.tar.gz
==> Po shkarkon nga https://akamai.bintray.com/b1/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb
######################################################################## 100.0%
==> Po derdhëm fn-0.5.8.high_sierra.bottle.tar.gz
/usr/local/Cellar/fn/0.5.8: 5 skedarë, 16.7MBTani gjithçka është gati për nisjen fillestare të funksionit tonë duke përdorur CLI. Për lehtësi, do të përdorim ambientin e integruar për ekzekutim, për shembull Node:
$ fn init --runtime node --trigger http hellonode
Krijimi i funksionit në: /hellonode
Boilerplate-i i funksionit është krijuar.
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 thelbësorë. Brenda katalogut të sapokrijuar mund të krijoni aplikacionin tuaj, duke ndjekur standardet e gjuhës ose ambientit të ekzekutimit të zgjedhur nga ju:
# ĐаŃĐ°Đ»ĐŸĐł Ń 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, i cili pĂ«rmban instalimet e nevojshme pĂ«r Fn, dhe vendos modelin 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 do ta verifikojmë shpejt funksionin tonë në mënyrë lokale, për të parë si funksionon gjithçka.
Së pari ne do të nisnim serverin Fn. Siç u tha më parë, serveri Fn është një konteiner Docker, kështu që pas nisjes, ai do të shkojë dhe do të marrë imazhin nga regjistri Docker.
$ fn start -d # nisim serverin lokal në sfond
Nuk është gjetur imazhi 'fnproject/fnserver:latest' lokalmente
latest: Po tërheq nga fnproject/fnserver
ff3a5c916c92: Tërheqja përfundoi
1a649ea86bca: Tërheqja përfundoi
ce35f4d5f86a: Tërheqja përfundoi
...
Statusi: Imazhi më i ri u shkarkua për fnproject/fnserver:latest
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5Për të nisur funksionin tonë, ai duhet "të lëshohet". Për këtë kërkohet emri i aplikacionit: në Fn të gjitha aplikacionet duhet të specifikohen në formën e hapësirave të emrave për funksionet e lidhura.
Fn CLI do të kërkojë skedarin func.yaml në katalogun aktual, i cili 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 # lëshojmë funksionin lokalisht, emri i aplikacionit - fnexo.
# parametrat lokal nuk e ngarkon imazhin në regjistrin e distancuar,
# duke e nisur atë direkt
Duke vendosur hellonode në aplikacionin: fnexo
Rritur në versionin 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...
Suksesshëm u krijua aplikacioni: fnexo
Suksesshëm u krijua funksioni: hellonode me nfrankel/hellonode:0.0.3
Suksesshëm u krijua trigger: hellonode-triggerSiç mund të shihni nga rezultati i komandës, krijohet një imazh i ri kontenieri për Docker, i cili përmban funksionin tonë. Funksioni është gati për t'u thirrur, dhe ne kemi dy mënyra për ta bërë këtë:
- duke përdorur komandën Fn
invoke - duke e thirrur drejtpërdrejt përmes
http
Thirrja invoke nëpërmjet Fn thjesht imiton funksionimin përmes HTTP për teste, që është e përshtatshme për kontroll të shpejtë:
$ fn invoke fnexo hellonode # thërrasim funksionin hellonode të aplikacionit fnexo
{"message":"Hello World"}Për të thirrur funksionin drejtpërdrejt, duhet të njohësh 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 plotësisht. Përmes HTTP, funksioni nuk thirret drejtpërdrejt, por përmes asaj që quhet trigger, i cili sipas emrit të tij "niçkë" thirrjen e funksionit. Triggers 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 për ta përshtatur me emrin e funksionit, kjo do ta thjeshtojë gjithçka:
triggers:
- name: hellonode-trigger
type: http
source: /hellonode # përputhet me emrin e funksionitPastaj e nisim 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"}Gjithçka funksionon! ĂshtĂ« koha tĂ« kalojmĂ« nĂ« eksperimente tĂ« natyrshme dhe tĂ« publikojmĂ« FaaS-in tonĂ« nĂ« server!
Instalimi i shërbimeve të funksioneve pa server në infrastrukturën tuaj.
Le tĂ« instalojmĂ« shpejt njĂ« makinĂ« virtuale duke pĂ«rdorur CLI Exoscale. NĂ«se nuk e keni konfiguruar akoma â mund tĂ« pĂ«rdorni . Ky Ă«shtĂ« njĂ« mjet i shkĂ«lqyer qĂ« do tĂ« rrisĂ« edhe mĂ« shumĂ« produktivitetin tuaj. Mos harroni tĂ« konfiguroni njĂ« rregull pĂ«r hapjen e portit 8080 nĂ« Grupi i SigurisĂ«! Komandat nĂ« vijim do tĂ« nisin njĂ« makinĂ« virtuale tĂ« pastĂ«r, tĂ« gatshme pĂ«r tĂ« pranuar funksionet tona:
$ 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ë conectoheni përmes ssh në makinën virtuale dhe të instaloni serverin e largët Fn:
$ exo ssh fn-server
Autenticiteti i hostit '185.19.30.175 (185.19.30.175)' nuk mund të krijohet.
Fingerprint-i i çelësit ECDSA është SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.
Jeni të sigurt që dëshironi të vazhdoni me konektimin (po/jo)? po
Kujdes: Shtuar përherë '185.19.30.175' (ECDSA) në listën e hosteve të njohur.
Mirë se vini në Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)Pastaj instaloni Docker dhe serverin Fn po ashtu siç është bërë 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 funksione! Për transmetimin e funksioneve në serverin e largët do të përdorim komandën deploy nga kompjuteri lokal, duke e anashkaluar flagun --local.
Përveç kësaj, Fn kërkon specifikimin e vendndodhjes së serverit Fn dhe regjistrit të Docker. Këto parametra mund të vendosen përmes variablave të mjedisit FN_API_URL dhe FN_REGISTRY përkatësisht, por ofrohet një mënyrë më të lehtë për menaxhimin e krijimit dhe administratës së konfigurimeve për vendosjen.
Në terminologjinë e Fn, konfigurimi për vendosjen quhet context. Komanda në vazhdim do të krijojë kontekstin:
$ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankelMund ta shihni kontekstin e disponueshëm ashtu:
$ fn list contexts
CURRENT NAME PROVIDER API URL REGISTRY
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
Dhe të kaloni në kontekstin që sapo u krijua ashtu:
$ fn use context exoscale
Tani po pĂ«rdoret konteksti: exoscaleDuke kĂ«tij vendi, funksioni Fn do tĂ« ngarkojĂ« imazhet Docker duke pĂ«rdorur llogarinĂ« e zgjedhur nĂ« DockerHub (nĂ« rastin tim â nfrankel), pas tĂ« 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ën lokale nga katalogu hellonode
Duke vendosur funksionin në: /.
Duke vendosur hellonode në aplikacionin: fnexo
Rritur në versionin 0.0.5
Duke ndërtuar imazhin nfrankel/hellonode:0.0.5 .Finalmente:
$ curl http://185.19.30.175:8080/t/fnexo/hellonode
{"message":"Përshëndetje Botë"}
Cikli i jetës së funksionit në llogaritjet pa serverë me bazë Fn
Avantazhet e llogaritjeve pa serverë në infrastrukturat tuaja
Llogaritjet pa serverë janë një zgjidhje e përshtatshme për implementimin e shpejtë të pjesëve të pavarura të aplikacionit që bashkëveprojnë me aplikacione më të ndërlikuara ose mikroshërbime.
Shpesh, kjo lidhet me kostot e fshehura të bllokimit me ofruesin e zgjedhur, që, në varësi të rastit të përdorimit dhe shkallës, mund të çojë në kosto më të larta dhe në një reduktim të fleksibilitetit në të ardhmen.
Arkitekturat shumë-shërbim dhe hibrid gjithashtu vuajnë në këtë rast, pasi mund të ndodhë që dëshira për të përdorur llogaritjet pa serverë, por për shkak të politikës së kompanisë, kjo mund të jetë e pamundur.
Fn është mjaft e thjeshtë në përdorim, mund të ofrojë një ndërfaqe të ngjashme me FaaS, me pak të meta. Ajo eliminon çdo bllokim të ofruesit, mund ta instaloni lokalmente ose në çdo ofrues të zgjidhjeve të cloud që preferoni. Gjithashtu, ka liri në zgjedhjen e gjuhës së programimit.
Në këtë artikull paraqiten vetëm themeli i Fn, por krijimi i një ambienti ekzekutues të veçantë është mjaft i thjeshtë, dhe struktura e përgjithshme mund të shtrihet më gjerë duke përdorur balancuesin e ngarkesës Fn, ose duke vendosur Fn pas një proxy për mbrojtje.
Burimi: habr.com
