Ho aha rona ntle le seva ho latela Fn

Ho aha rona ntle le seva ho latela Fn

Khomphutha e se nang seva ke e 'ngoe ea litloaelo tse hlahelletseng tsa cloud computing. Molao-motheo oa ts'ebetso ke hore lisebelisoa tsa motheo ha se taba ea DevOps, empa ke ea mofani oa litšebeletso. Sekala sa lisebelisoa se ikamahanya le maemo 'me se na le phetoho e phahameng.

Ntho e 'ngoe e tloaelehileng ke tšekamelo ea ho fokotsa le ho tsepamisa mohopolo khoutu, ke ka lebaka leo komporo e se nang seva ka linako tse ling e bitsoang mosebetsi e le tšebeletso (FaaS).

Ho tloha khale, mofani oa pele oa leru ho fana ka FaaS ka AWS Lambda e ne e le Amazon, ka hona lebitso. Bafani ba bang ba litšebeletso tsa maru le bona ba fana ka tse tšoanang:

  • Cloud Functions ho tsoa ho Google
  • Mesebetsi ea Azure e tsoang ho Microsoft

Likhamphani tsena kaofela li fana ka komporo e se nang seva, ho lekanya ka boits'oaro, 'me li lefella feela seo u hlileng u se sebelisang, empa li notlela bareki sehlahisoa sa bona sa thepa. Leha ho le joalo, ho na le mekhoa e meng ea mahala le e bulehileng bakeng sa komporo e se nang seva. Ke habohlokoa ho hlokomela:

  • sethala Apache OpenWhisk, e entsoeng ka mochine oa ho qhoqhoa ke IBM,
  • Mesebetsi ea Leru la Selemo, e le karolo ea "Spring Framework ecosystem" e ruileng, e ka sebelisoang hape e le sethala sa AWS Lambda, Azure Functions le OpenWhisk,
  • Morero oa Fn, e tšehetsoeng ke Oracle.

Kaofela ha tsona li ikemetse ka ho feletseng marung, ke hore, li ka kenngoa marung leha e le afe, ho kenyelletsa le tsa hau, tsa sechaba kapa tsa poraefete, 'me ehlile ho Exoscale.

Kamoo morero oa Fn o sebetsang kateng

Fn e thehiloe ka botlalo ho Docker, e na le likarolo tse peli tsa mantlha:

  • Lenaneo la CLI le etselitsoe ho laola likarolo tsohle tsa lisebelisoa tsa Fn, le ho sebelisana le seva sa Fn,
  • Seva ea Fn ka boeona ke sesebelisoa se tloaelehileng se kentsoeng ka sejaneng sa Docker.

Mesebetsi e sebelisoang ho Fn e boetse e etsoa ka lijaneng tse arohaneng, tse u lumellang hore u tšehetse lipuo tse ngata tsa lenaneo, mohlala ... Clojure!

Likhang tsa ts'ebetso li fetisetsoa ho "standard input" (STDIN), liphetho li ngolloa ho tlhahiso e tloaelehileng (STDOUT). Haeba likhang kapa boleng ba ho khutlisa e se boleng bo bonolo (joalo ka ntho ea JSON), li ka fetoloa ho sebelisoa lesela la ho hlaka le fanoeng ke Fn ka boeona ka sebopeho sa Function Development Kit (FDK).

Bakeng sa boiketlo, ho fanoa ka lihlopha tsa litempele tse hahelletsoeng ho thusa ho romelloa ha FaaS lethathamong le pharaletseng la lipuo tse fapaneng le liphetolelo tsa tsona (Eya, liphetolelo tse fapaneng tsa Java, Python, jj.).

Ho theha FaaS ho bonolo ka ho latela setšoantšo sena:

  • Ho tsamaisa tšebetso ka Fn CLI: faele ea tlhophiso ea ts'ebeliso ea Fn e entsoe ho ipapisitsoe le thempleite e khethiloeng.
  • Re etsa mosebetsi oa rona, hape re sebelisa CLI Fn: setšoantšo sa setshelo se behiloe sebakeng se itseng sa polokelo, ka mor'a moo seva se tsebisoa ka boteng le ho behoa ha setšoantšo sena.

Ho aha rona ntle le seva ho latela Fn
Molao-motheo oa ho fana ka mesebetsi ho Fn

Ho kenya le ho hlahloba lits'ebetso tse se nang seva

Ha re qale ho kenya Fn mochining oa lehae. Taba ea pele, Docker e kentsoe, joalo ka ha ho hlokoa ke Fn. Ho nka hore re ho Debian / Ubuntu:

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

Kapa sebelisa mookameli oa sephutheloana / Docker build ho latela sistimi ea hau. Joale o ka ea ka kotloloho ho kenya Fn CLI. Ka mohlala, ho sebelisa curl:

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

Haeba u ho OSX ka Homebrew e kentsoe, u ka ea ka tsela e 'ngoe:

$ 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

Joale re se re itokiselitse ho qala ts'ebetso ea rona re sebelisa CLI. Bakeng sa ho nolofatsa, re tla sebelisa tikoloho ea ho qala e hahelletsoeng, joalo ka Node:

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

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

Ho tla etsoa directory e ncha hellonode ho ntšetsa pele tšebetso ea rona ea Fn ka lifaele tse ling tsa mantlha tsa tlhophiso. Ka har'a bukana e sa tsoa etsoa, ​​​​o ka etsa kopo ea hau ho latela maemo a puo eo u e khethileng kapa nako ea ho sebetsa:

# Каталог с 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 e theha sebopeho sa morero oa pele, e etsa faele func.yaml, e nang le litlhophiso tse hlokahalang bakeng sa Fn, 'me e seta template ea khoutu ka puo eo ue khethileng.

Tabeng ea nako ea ho sebetsa ea Node, sena se bolela:

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

Joale re tla lekola ts'ebetso ea rona sebakeng sa heno ho bona hore na tsohle li sebetsa joang.

Pele, re tla qala seva ea Fn. Joalokaha ho se ho boletsoe, seva sa Fn ke setshelo sa Docker, ka hona, kamora ho qala, se tla ea ho nka setšoantšo ho tsoa ho ngoliso ea Docker.

$ 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

Ho tsamaisa mosebetsi oa rona, e tlameha ho "rolloa". Sena se hloka имя приложения: Ho Fn, lits'ebetso tsohle li tlameha ho hlalosoa e le libaka tsa mabitso bakeng sa mesebetsi e amanang.

Fn CLI e tla batla faele func.yaml bukeng ea hajoale e tla sebelisoa ho hlophisa tšebetso. Kahoo pele o hloka ho ea ho directory ea rona 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

Joalokaha u bona ho tsoa tlhahiso ea taelo, ho entsoe setšoantšo se secha sa setshelo sa Docker se nang le ts'ebetso ea rona. Mosebetsi o se o loketse ho bitsoa, ​​'me re na le litsela tse peli tsa ho o etsa:

  • sebelisa taelo ea Fn invoke
  • ho letsetsa ka kotloloho ka http

Bothata invoke ka Fn e mpa e etsisa mosebetsi ka HTTP bakeng sa liteko, e loketseng tlhahlobo e potlakileng:

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

{"message":"Hello World"}

Bakeng sa ho letsetsa tšebetso ka kotloloho, o hloka ho tseba URL e felletseng:

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

{"message":"Hello World"}

Seva ea Fn e pepesa mesebetsi ea eona ho port 8080 mme URL ea ts'ebetso e bonahala e ts'oana le paterone t/app/function, empa eseng ka ho feletseng. Ka HTTP, mosebetsi ha o bitsoe ka ho toba, empa ka seo ho thoeng ke trigger, eo, ho ea ka lebitso la eona, "qala" pitso ea mosebetsi. Litlhahiso li hlalosoa ka hare `func.yml morero:

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

Re ka fetola lebitso la trigger hore le lumellane le lebitso la ts'ebetso, sena se tla nolofatsa tsohle:

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

Ebe re tsamaisa phepelo ea ts'ebetso hape ebe re e bitsa ho tsoa ho trigger e ncha:

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

{"message":"Hello World"}

Tsohle lia sebetsa! Ke nako ea ho fetela litekong tse felletseng le ho phatlalatsa FaaS ea rona ho seva!

Ho kenya lits'ebeletso tse se nang seva ho lisebelisoa tsa hau

Ha re kenyeng mochini o sebetsang ka potlako re sebelisa Exoscale CLI. Haeba ha o so e behe, o ka e sebelisa tataiso ea rona ea ho qala kapele. Ena ke sesebelisoa se pholileng se tla eketsa tlhahiso ea hau le ho feta. Se ke oa lebala hore o hloka ho hlophisa molao oa ho bula port 8080 ho Sehlopha sa Tšireletso! Litaelo tse latelang li tla hlahisa mochine o hloekileng oa sebele, o itokiselitseng ho tšoara mesebetsi ea rona:

$ 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

Ebe o ka ssh mochining o sebetsang ebe o kenya seva e hole ea Fn:

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

Ebe u kenya Docker le seva sa Fn ka tsela e ts'oanang le eo e neng e se e entsoe mochining oa lehae, qala seva:

$ 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 e ikemiselitse ho amohela mesebetsi! Bakeng sa phetiso e lebisitsoeng ea mesebetsi ho seva e hole, re tla sebelisa taelo deploy ho tsoa komporong ea lehae ka ho siea folakha --local.

Ntle le moo, Fn e hloka hore o hlalose sebaka sa seva sa Fn le ngoliso ea Docker. Likhetho tsena li ka hlophisoa ka mefuta e fapaneng ea tikoloho FN_API_URL и FN_REGISTRY ka ho latellana, empa hape e fana ka mokhoa o bonolo haholoanyane oa ho laola habonolo popo le tsamaiso ea litlhophiso bakeng sa ho romelloa.

Ka mantsoe a Fn, tlhophiso ea ho romelloa e bitsoa context. Taelo e latelang e tla theha moelelo oa taba:

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

U ka sheba maemo a teng ka tsela ena:

$ fn list contexts

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

'Me u fetohele moelelong o sa tsoa etsoa tjena:

 $ fn use context exoscale

 Now using context: exoscale

Ho tloha mona ho ea pele, tlhahiso ea karolo ea Fn e tla khoasolla litšoantšo tsa Docker ho sebelisa ak'haonte e khethiloeng ea DockerHub (tabeng ea ka - nfrankel), ebe o tsebisa seva e hole (mohlala ona - http://185.19.30.175:8080) mabapi le sebaka le mofuta oa setšoantšo sa morao-rao se nang le tšebetso ea hau.

$ 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 .

Qetellong:

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

{"message":"Hello World"}

Ho aha rona ntle le seva ho latela Fn
Mosebetsi oa Lifecycle ho Fn-Based Serverless Computing

Melemo ea komporo e se nang seva ka bokhoni ba hau

Serverless computing ke tharollo e bonolo ea ho kenya ts'ebetsong kapele likarolo tse ikemetseng tsa ts'ebeliso tse sebetsanang le lits'ebetso tse rarahaneng kapa li-microservices.

Hangata sena se bakoa ke litšenyehelo tse patiloeng tsa ho koala ho morekisi ea khethiloeng, eo, ho itšetlehile ka boemo bo itseng ba tšebeliso le molumo, e ka lebisang litšenyehelong tse phahameng le ho fokotsa ho feto-fetoha ha maemo nakong e tlang.

Mehaho e mengata ea maru le lebasetere e boetse e utloa bohloko tabeng ena, hobane u ka iphumana u le boemong boo u ka ratang ho sebelisa k'homphieutha e se nang seva, empa ka lebaka la maano a khoebo ho ka 'na ha se ke ha khoneha.

Fn e bonolo haholo ho e sebelisa mme e ka fana ka sebopeho se batlang se tšoana le sa FaaS, se nang le bokaholimo bo fokolang. E felisa ho koaloa ha barekisi 'me e ka kenngoa sebakeng sa heno kapa ho mofani ofe kapa ofe ea bonolo oa tharollo ea leru eo u e ratang. Hape ho na le bolokolohi ba ho khetha puo ea lenaneo.

Sengoliloeng sena se akaretsa feela metheo ea Fn, empa ho iketsetsa nako ea hau ea ho sebetsa ho bonolo haholo, 'me meralo e akaretsang e ka sebelisoa ka bongata ho sebelisa sekala sa Fn load, kapa ka ho beha Fn ka morao ho proxy bakeng sa ts'ireletso.

Source: www.habr.com

Eketsa ka tlhaloso