Ukwakha ezethu i-serverless okusekelwe ku-Fn

Ukwakha ezethu i-serverless okusekelwe ku-Fn

Ikhompyutha engenaseva ingenye yamathrendi agqama kakhulu kukhompyutha yamafu. Umgomo oyisisekelo wokusebenza ukuthi ingqalasizinda akuyona into ekhathaza i-DevOps, kodwa eyomhlinzeki wesevisi. Ukukala kwensiza kuzilungisa ngokuzenzakalela ukuze kulayishwe futhi kunezinga eliphezulu loshintsho.

Esinye isici esivamile ukuthambekela kokunciphisa nokugxila ikhodi, yingakho i-serverless computing ngezinye izikhathi ibizwa ngokuthi i-function as a service (FaaS).

Ngokomlando, umhlinzeki wokuqala wamafu ukunikeza i-FaaS nge-AWS Lambda kwakuyi-Amazon, yingakho igama. Abanye abahlinzeki besevisi yefu nabo banikela okufanayo:

  • Cloud Functions kusuka ku-Google
  • Imisebenzi ye-Azure evela kuMicrosoft

Zonke lezi zinkampani zihlinzeka ngekhompyutha engenasiphakeli, ukukala okuzenzakalelayo, futhi zikhokhela lokho okusebenzisayo kuphela, kodwa zikhiya amakhasimende emkhiqizweni wawo wobunikazi. Kodwa-ke, kunezinye izindlela zamahhala nezivulekile zekhompuyutha engenasiphakeli. Kuyaphawuleka ukuthi:

Zonke zizimele ngokuphelele kumafu, okungukuthi, zingafakwa kunoma yiliphi ifu, kufaka phakathi eyakho, eyomphakathi noma eyimfihlo, futhi kunjalo ku-Exoscale.

Isebenza kanjani iphrojekthi ye-Fn

I-Fn isuselwe ngokuphelele ku-Docker, iqukethe izingxenye ezimbili eziyinhloko:

  • Uhlelo lwe-CLI oluklanyelwe ukuphatha zonke izici zengqalasizinda ye-Fn, futhi lusebenzisana neseva ye-Fn,
  • Iseva ye-Fn ngokwayo iyisicelo esivamile esipakishwe esitsheni se-Docker.

Imisebenzi esetshenziswe ku-Fn iphinde isetshenziswe ezitsheni ezihlukene, okuvumela ukuthi usekele izilimi eziningi zokuhlela, isibonelo ... Clojure!

Ama-agumenti omsebenzi adluliselwa ku-standard input (STDIN), imiphumela ibhalwa kokuphumayo okujwayelekile (STDOUT). Uma ama-agumenti noma amanani okubuyisela engewona amanani alula (njengento ye-JSON), angaguqulwa kusetshenziswa isendlalelo esishubile esinikezwe i-Fn ngokwayo ngendlela ye-Funkction Development Kit (FDK).

Ukuze kube lula, amasethi akhelwe ngaphakathi ezifanekiso anikezwa ukusiza ukuthunyelwa kwe-FaaS ohlwini olubanzi lwezilimi ezahlukahlukene nezinguqulo zazo (Hamba, izinguqulo ezihlukile zeJava, iPython, njll.).

Ukudala i-FaaS kulula ngokulandela lo mdwebo:

  • Ukukhipha umsebenzi kusetshenziswa i-Fn CLI: ifayela lokumisa uhlelo lwe-Fn lakhiwa ngokusekelwe kusifanekiso esikhethiwe.
  • Sikhipha umsebenzi wethu, futhi sisebenzisa i-CLI Fn: isithombe sesitsha sibekwe endaweni yokugcina ethile, ngemva kwalokho iseva yaziswa ngobukhona nokubekwa kwalesi sithombe.

Ukwakha ezethu i-serverless okusekelwe ku-Fn
Umgomo wokuletha imisebenzi ku-Fn

Ukufakwa kwendawo kanye nokuhlolwa kwemisebenzi engenaseva

Ake siqale ukufaka i-Fn emshinini wendawo. Okokuqala, i-Docker ifakiwe, njengoba kudingwa ngu-Fn. Uma sicabanga ukuthi siku-Debian/Ubuntu:

$ sudo apt-get update
$ sudo apt-get install docker.io

Noma sebenzisa umphathi wephakheji/i-Docker yokwakha ngokuya ngohlelo lwakho. Ngemuva kwalokho ungaya ngqo ekufakeni i-Fn CLI. Isibonelo, usebenzisa i-curl:

$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh

Uma uku-OSX ne-Homebrew efakiwe, ungahamba ngenye indlela:

$ 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

Manje sesilungele ukuqale sikhiphe umsebenzi wethu sisebenzisa i-CLI. Ukwenza kube lula, sizosebenzisa indawo yokwethulwa eyakhelwe ngaphakathi, njengeNode:

$ fn init --runtime node --trigger http hellonode

Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.

Kuzokwakhiwa uhla lwemibhalo olusha hellonode ukuze sithuthukise umsebenzi wethu we-Fn ngamanye amafayela wokumisa ayisisekelo. Ngaphakathi kohla lwemibhalo olusanda kwakhiwa, ungakha uhlelo lwakho lokusebenza ngokulandela izindinganiso zolimi olukhethile noma isikhathi sokusebenza:

# Каталог с 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

I-Fn idala isakhiwo sokuqala sephrojekthi, idala ifayela func.yaml, equkethe izilungiselelo ezidingekayo ze-Fn, futhi isetha isifanekiso sekhodi ngolimi olukhethile.

Endabeni yesikhathi sokusebenza se-Node, lokhu kusho:

$ 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}
})

Manje sizohlola ngokushesha umsebenzi wethu endaweni ukuze sibone ukuthi yonke into isebenza kanjani.

Okokuqala, sizoqala iseva ye-Fn. Njengoba sekushiwo, iseva ye-Fn iyisitsha se-Docker, ngakho-ke, ngemva kokuqala, izohamba futhi ithathe isithombe ku-Docker registry.

$ fn start -d                    # запускаем локальный сервер в фоне

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

Ukuze siqhube umsebenzi wethu, kufanele "ukhishwe". Lokhu kudinga имя приложения: Ku-Fn, zonke izinhlelo zokusebenza kufanele zicaciswe njengezikhala zamagama zemisebenzi ehlobene.

I-Fn CLI izocinga ifayela func.yaml ohlwini lwamanje oluzosetshenziswa ukulungisa umsebenzi. Ngakho-ke okokuqala udinga ukuya kusiqondisi sethu hellonode.

$ cd hellonode
$ fn deploy --app fnexo --local  # выкатываем функцию локально, имя приложения - fnexo.
                                 # параметр local не заливает образ в удаленный реестр,
                                 # запуская его напрямую

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-trigger

Njengoba ubona kokuphumayo komyalo, kwakhiwa isithombe esisha sesitsha se-Docker esiqukethe umsebenzi wethu. Umsebenzi usulungele ukubizwa, futhi sinezindlela ezimbili zokuwenza:

  • usebenzisa umyalo we-Fn invoke
  • efona ngqo nge http

Shayela invoke nge-Fn imane ilingise umsebenzi nge-HTTP ukuze ihlolwe, elungele ukuhlolwa okusheshayo:

$ fn invoke fnexo hellonode      # вызываем функцию hellonode приложения fnexo

{"message":"Hello World"}

Ukuze ushayele umsebenzi ngokuqondile, udinga ukwazi i-URL egcwele:

$ curl http://localhost:8080/t/fnexo/hellonode-trigger

{"message":"Hello World"}

Iseva ye-Fn iveza imisebenzi yayo ku-port 8080 futhi i-URL yomsebenzi ibonakala ifana nephethini t/app/function, kodwa hhayi ngokuphelele. Nge-HTTP, umsebenzi awubizwa ngokuqondile, kodwa ngokusebenzisa okuthiwa yi-trigger, okuthi, ngokusho kwegama layo, "iqala" ucingo lomsebenzi. Izibangeli zichazwa ku `func.yml iphrojekthi:

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 триггера

Singashintsha igama le-trigger ukuze lifane negama lomsebenzi, lokhu kuzokwenza yonke into ibe lula:

triggers:
- name: hellonode-trigger
  type: http
  source: /hellonode    # совпадает с именем функции

Bese siqala ukuletha umsebenzi futhi futhi sikubize kusuka kusibangeli esisha:

$ fn deploy --app fnexo hellonode --local
$ curl http://localhost:8080/t/fnexo/hellonode

{"message":"Hello World"}

Konke kuyasebenza! Isikhathi sokudlulela ekuhlolweni kwesikali esigcwele futhi sishicilele i-FaaS yethu kuseva!

Ukufaka izinsiza zokusebenza ezingenasiphakeli kungqalasizinda yakho

Masifake ngokushesha umshini obonakalayo sisebenzisa i-Exoscale CLI. Uma ungakayisethi okwamanje, ungasebenzisa umhlahlandlela wethu wokuqala osheshayo. Leli ithuluzi elipholile elizokhuphula umkhiqizo wakho nakakhulu. Ungakhohlwa ukuthi udinga ukumisa umthetho ukuze uvule imbobo 8080 Eqenjini Lokuphepha! Imiyalo elandelayo izokwethula umshini we-virtual ohlanzekile, olungele ukusingatha imisebenzi yethu:

$ 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

Ngemuva kwalokho ungangena emshinini obonakalayo bese ufaka iseva ye-Fn ekude:

$ exo ssh fn-server

The authenticity of host '185.19.30.175 (185.19.30.175)' can't be established.
ECDSA key fingerprint is SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '185.19.30.175' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)

Bese ufaka i-Docker nesiphakeli se-Fn ngendlela efanayo naleyo esenziwe ngayo emshinini wendawo, qala iseva:

$ 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

I-Fn isilungele ukwamukela imisebenzi! Ukudlulisa okuhlosiwe kwemisebenzi kuseva ekude, sizosebenzisa umyalo deploy kusuka kukhompuyutha yendawo ngokukhipha ifulegi --local.

Ngaphezu kwalokho, i-Fn idinga ukuthi ucacise indawo yeseva ye-Fn kanye nerejista ye-Docker. Lezi zinketho zingasethwa ngokuguquguquka kwemvelo FN_API_URL и FN_REGISTRY ngokulandelana, kodwa futhi inikeza indlela elula kakhulu yokuphatha kalula ukudalwa nokuphathwa kokucushwa kokuthunyelwa.

Ngokwemigomo ye-Fn, ukucushwa kokuthunyelwa kubizwa context. Umyalo olandelayo uzodala umongo:

$ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankel

Ungabuka izimo ezitholakalayo kanje:

$ fn list contexts

CURRENT NAME      PROVIDER      API URL                      REGISTRY
    default       default       http://localhost:8080/
    exoscale      default       http://185.19.30.175:8080    nfrankel

Futhi shintshela kumongo osanda kwakhiwa kanje:

 $ fn use context exoscale

 Now using context: exoscale

Kusukela lapha kuqhubeke, ukulethwa kwesici se-Fn kuzolanda izithombe ze-Docker kusetshenziswa i-akhawunti ekhethiwe ye-DockerHub (endabeni yami - nfrankel), bese wazisa iseva ekude (kulesi sibonelo - http://185.19.30.175:8080) mayelana nendawo nenguqulo yesithombe sakamuva esiqukethe umsebenzi wakho.

$ fn deploy --app fnexo .   # выполняется на локальной машине из каталога hellonode

Deploying function at: /.
Deploying hellonode to app: fnexo
Bumped to version 0.0.5
Building image nfrankel/hellonode:0.0.5 .

Okokugcina:

$ curl http://185.19.30.175:8080/t/fnexo/hellonode

{"message":"Hello World"}

Ukwakha ezethu i-serverless okusekelwe ku-Fn
Umsebenzi we-Lifecycle ku-Fn-Based Serverless Computing

Izinzuzo zekhompuyutha engenasiphakeli ngomthamo wakho

I-Serverless Computing iyisixazululo esikahle sokuqalisa ngokushesha izingxenye ezizimele zohlelo lokusebenza ezisebenzisana nezinhlelo zokusebenza eziyinkimbinkimbi noma ama-microservices.

Lokhu kuvame ukubangelwa izindleko ezifihliwe zokukhiya kumthengisi okhethiwe, okuthi, kuye ngesimo esithile sokusetshenziswa kanye nevolumu, kungaholela ezindlekweni eziphakeme kanye nokunciphisa ukuguquguquka esikhathini esizayo.

Izakhiwo ze-multi-cloud kanye ne-hybrid cloud clouds nazo ziyahlupheka kulokhu, ngoba ungazithola kalula esimweni lapho ungathanda ukusebenzisa i-serverless computing, kodwa ngenxa yezinqubomgomo zenkampani kungase kungenzeki.

I-Fn isebenziseka kalula futhi inganikeza cishe isixhumi esibonakalayo se-FaaS, esine-overhead encane. Iqeda noma yikuphi ukukhiywa ngaphakathi komthengisi futhi ingafakwa endaweni noma kunoma yimuphi umhlinzeki wesisombululo samafu ongcono ozikhethele wona. Kukhona nenkululeko ekukhetheni ulimi lokuhlela.

Lesi sihloko sihlanganisa izinto eziyisisekelo ze-Fn kuphela, kodwa ukudala esakho isikhathi sokusebenza kulula kakhulu, futhi isakhiwo sisonke singasatshalaliswa kabanzi kusetshenziswa isilinganisi somthwalo we-Fn, noma ngokubeka u-Fn ngemuva kommeleli ukuze uvikeleke.

Source: www.habr.com

Engeza amazwana