Po ndërtojmë serverless tonin mbi bazën e Fn

Po ndërtojmë serverless tonin mbi bazën e Fn

Llogaritjet pa serverĂ« — Ă«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 Apache OpenWhisk, e zhvilluar nĂ« inkubatorin e IBM,
  • Spring Cloud Functions, 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,
  • Projekti Fn, 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.

Po ndërtojmë serverless tonin mbi bazën e Fn
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.io

Ose 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 | sh

Në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.7MB

Tani 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.java

Fn 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
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5

Pë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 sukses

Siç 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-it

Mund 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 funksionit

Më 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 udhĂ«zimin tonĂ« pĂ«r nisjen e shpejtĂ«. 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-securitygroup

Pastaj 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.643

Fn ë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 nfrankel

Mund 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: exoscale

Duke 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"}

Po ndërtojmë serverless tonin mbi bazën e Fn
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

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster