Kuvaka yedu serverless yakavakirwa paFn

Kuvaka yedu serverless yakavakirwa paFn

Serverless komputa ndeimwe yeanonyanya kuzivikanwa maitiro mu cloud computing. Iyo yakakosha yekushandisa musimboti ndeyekuti zvivakwa hazvisi zvine chekuita neDevOps, asi zvemupi webasa. Resource scaling inogadzirisa otomatiki kurodha uye ine yakanyanya mwero wekuchinja.

Chimwe chinhu chinozivikanwa ndeye tsika yekudzikisa uye kutarisa kodhi, ndosaka serverless komputa dzimwe nguva ichinzi basa sevhisi (FaaS).

Nhoroondo, wekutanga gore mupi kupa FaaS neAWS Lambda yaive Amazon, saka zita. Vamwe cloud service provider vanopawo zvakafanana:

  • Cloud Functions kubva kuGoogle
  • Azure Mabasa kubva kuMicrosoft

Makambani ese aya anopa serverless komputa, auto-scaling, uye inongobhadhara izvo zvaunoshandisa chaizvo, asi ivo vanokiya vatengi muchigadzirwa chavo chevaridzi. Nekudaro, kune yemahara uye yakavhurika sosi dzimwe nzira dze serverless komputa. Zvakakosha kucherechedza:

  • platform Apache OpenWhisk, yakagadzirwa muincubator neIBM,
  • Spring Cloud Mabasa, sechikamu cheyakapfuma yakapfuma Spring Framework ecosystem, iyo inogona zvakare kushandiswa sefacade yeAWS Lambda, Azure Mabasa uye OpenWhisk,
  • Project Fn, inotsigirwa naOracle.

Ese akazvimirira zvachose kubva kumakore, ndiko kuti, anogona kuiswa mune chero gore, kusanganisira yako, yeruzhinji kana yakavanzika, uye zvechokwadi muExoscale.

Mashandiro anoita chirongwa cheFn

Fn yakavakirwa zvachose paDocker, ine zvikamu zviviri zvikuru:

  • CLI chirongwa chakagadzirirwa kubata ese maficha eFn zvivakwa, uye inodyidzana neFn server,
  • Iyo Fn server pachayo ndeye yakajairwa application yakaiswa mumudziyo weDocker.

Mabasa akaiswa muFn anoitwawo mumidziyo yakasiyana, iyo inokubvumira kutsigira mitauro yakawanda yepurogiramu, semuenzaniso ... Clojure!

Nharo dzebasa dzinopfuudzwa kune yakajairwa kupinza (STDIN), mibairo inonyorwa kune yakajairwa kubuda (STDOUT). Kana iyo nharo kana kudzoka kukosha zvisiri nyore (senge chinhu cheJSON), zvinogona kushandurwa uchishandisa abstraction layer yakapihwa neFn pachayo muchimiro cheFundo Development Kit (FDK).

Kuti zvive nyore, akavakirwa-mukati seti ematemplate anopihwa kuti afambise kutumirwa kweFaaS mune yakakura runyorwa rwemitauro yakasiyana uye neshanduro dzayo (Enda, dzakasiyana shanduro dzeJava, Python, nezvimwewo).

Kugadzira FaaS kuri nyore nekutevera dhizaini iyi:

  • Kuendesa basa racho uchishandisa Fn CLI: faira yekumisikidza application yeFn inogadzirwa zvichibva pane yakasarudzwa template.
  • Isu tinoburitsa basa redu pachedu, zvakare tichishandisa CLI Fn: mufananidzo wemudziyo unoiswa mune imwe nzvimbo, mushure meiyo sevha inoziviswa nezvekuvapo uye kuiswa kwechifananidzo ichi.

Kuvaka yedu serverless yakavakirwa paFn
Iyo nheyo yekuendesa mabasa kuFn

Kuiswa kwenzvimbo uye kuyedzwa kwemabasa asina server

Ngatitange kuisa Fn pamushini wepano. Kutanga, Docker inoiswa, sezvinodiwa naFn. Tichifunga kuti tiri paDebian / Ubuntu:

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

Kana shandisa pasuru maneja / Docker kuvaka zvinoenderana nehurongwa hwako. Ipapo iwe unogona kuenda wakananga kuisa iyo Fn CLI. Semuenzaniso, kushandisa curl:

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

Kana iwe uri paOSX ine Homebrew yakaiswa, unogona kuenda neimwe nzira:

$ 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

Isu takagadzirira kutanga kuendesa basa redu tichishandisa CLI. Kuti zvive nyore, isu tichashandisa yakavakirwa-mukati yekumisikidza nharaunda, senge Node:

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

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

Dhairekitori idzva richagadzirwa hellonode kuenderera mberi nekuvandudza yedu Fn basa nemamwe mafaera ekutanga ekugadzirisa. Mukati medhairekitori richangobva kugadzirwa, unogona kugadzira yako application uchitevera zviyero zvemutauro waunosarudza kana nguva yekumhanya:

# Каталог с 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 inogadzira yekutanga purojekiti chimiro, inogadzira faira func.yaml, ine zvigadziro zvinodiwa zveFn, uye inogadzirisa template yekodhi mumutauro wawakasarudza.

Panyaya yeNode runtime, izvi zvinoreva:

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

Iye zvino tichakurumidza kuyedza basa redu munharaunda kuti tione kuti zvese zvinoshanda sei.

Kutanga, isu tichatanga iyo Fn server. Sezvatotaurwa, iyo Fn server iDocker mudziyo, saka, mushure mekutanga, ichaenda uye inotora mufananidzo kubva kuDocker 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

Kuti tiite basa redu, rinofanira "kukungurutswa". Izvi zvinoda имя приложения: MuFn, zvese zvinoshandiswa zvinofanirwa kutsanangurwa senzvimbo dzemazita emabasa ane hukama.

Fn CLI ichatsvaga iyo faira func.yaml mudhairekitori razvino iro richashandiswa kugadzirisa basa. Saka chekutanga iwe unofanirwa kuenda kune yedu dhairekitori 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

Sezvauri kuona kubva pakubuda kwemirairo, mufananidzo mutsva weDocker mudziyo unogadzirwa une basa redu. Basa racho rakagadzirira kudanwa, uye tine nzira mbiri dzekuzviita:

  • uchishandisa iyo Fn command invoke
  • kufona zvakananga kuburikidza http

Dambudziko invoke kuburikidza neFn inongotevedzera basa kuburikidza neHTTP yebvunzo, iri nyore kukurumidza kuyedzwa:

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

{"message":"Hello World"}

Kuti ufonere basa zvakananga, unofanirwa kuziva iyo URL yakazara:

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

{"message":"Hello World"}

Iyo Fn sevha inofumura mabasa ayo pachiteshi 8080 uye iyo URL yebasa inoita seinoenderana nemaitiro t/app/function, asi kwete zvachose. Kuburikidza neHTTP, basa harina kunzi zvakananga, asi kuburikidza neanonzi trigger, iyo, maererano nezita rayo, "inotanga" kudana kwebasa. Zvinokonzera zvinotsanangurwa mukati `func.yml chirongwa:

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

Tinogona kushandura zita rekuti rifanane nezita rebasa, izvi zvinorerutsa zvese:

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

Ipapo isu tinomhanyisa basa rekutumira zvakare uye toridaidza kubva kune nyowani trigger:

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

{"message":"Hello World"}

Zvose zviri kushanda! Yave nguva yekuenderera kune yakazara-chiyero kuyedza uye kushambadza yedu FaaS pane server!

Kuisa serverless basa masevhisi pane yako wega zvivakwa

Ngatikurumidze kuisa muchina chaiwo tichishandisa iyo Exoscale CLI. Kana usati waimisa, unogona kushandisa gwara redu rekutanga rinokurumidza. Ichi chishandiso chinotonhorera chinozowedzera chigadzirwa chako zvakanyanya. Usakanganwa kuti iwe unofanirwa kugadzirisa mutemo kuvhura port 8080 muChengetedzo Boka! Iyo inotevera mirairo ichavhura yakachena chaiyo muchina, yakagadzirira kubata mabasa edu:

$ 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

Ipapo iwe unogona ssh mumushini chaiwo uye woisa iri kure Fn server:

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

Wobva waisa Docker uye Fn sevha nenzira imwechete sezvanga zvatoitwa pamushini wemuno, tanga sevha:

$ 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 yakagadzirira kugamuchira mabasa! Kune yakanangwa kuendesa mabasa kune iri kure server, isu tichashandisa iwo murairo deploy kubva pakombuta yemuno nekusiya mureza --local.

Mukuwedzera, Fn inoda kuti iwe utaure nzvimbo yeFn server uye Docker registry. Izvi zvingasarudzwa zvinogona kuiswa kuburikidza nemamiriro ezvinhu akasiyana FN_API_URL и FN_REGISTRY zvichiteerana, asi zvakare inopa imwe nzira iri nyore yekugadzirisa kusikwa uye manejimendi ezvirongwa zvekutumira.

Mune Fn mazwi, iyo gadziriso yekutumirwa inonzi context. Murairo unotevera uchagadzira mamiriro:

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

Unogona kuona mamiriro aripo seizvi:

$ fn list contexts

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

Uye chinja kune mamiriro achangogadzirwa seizvi:

 $ fn use context exoscale

 Now using context: exoscale

Kubva pano zvichienda mberi, iyo Fn ficha yekuendesa inodhawunirodha Docker mifananidzo uchishandisa yakasarudzwa DockerHub account (munyaya yangu - nfrankel), wobva wazivisa sevha iri kure (mumuenzaniso uyu - http://185.19.30.175:8080) nezvenzvimbo uye vhezheni yemufananidzo wazvino une basa rako.

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

Pakupedzisira:

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

{"message":"Hello World"}

Kuvaka yedu serverless yakavakirwa paFn
Shanda Hupenyu muFn-Yakavakirwa Serverless Computing

Zvakanakira serverless komputa pane yako wega

Serverless komputa ndiyo mhinduro iri nyore yekukurumidza kuita yakazvimiririra zvikamu zvechishandiso zvinopindirana nemamwe akaomarara maapplication kana microservices.

Izvi zvinowanzoitika nekuda kwemutengo wakavanzika wekuvhara mukati memutengesi akasarudzwa, izvo, zvichienderana neiyo chaiyo yekushandisa kesi uye vhoriyamu, inogona kutungamirira kumitengo yakakwirira uye kuderedzwa kushanduka mune ramangwana.

Multi-cloud uye hybrid cloud architectures zvakare inotambura munyaya iyi, nokuti unogona kuzviwana uri mumamiriro ezvinhu apo iwe unoda kushandisa serverless computing, asi nekuda kwemitemo yekambani zvingave zvisingagoneki.

Fn iri nyore kushandisa uye inogona kupa inenge yakafanana neFaaS interface, ine zvishoma pamusoro. Iyo inobvisa chero mutengesi kukiya-mukati uye inogona kuisirwa munharaunda kana mune chero yakanakira gore mhinduro mupi wesarudzo yako. Panewo rusununguko pakusarudza mutauro wepurogiramu.

Ichi chinyorwa chinongovhara izvo zvekutanga zveFn, asi kugadzira yako nguva yekumhanya kuri nyore, uye iyo yakazara dhizaini inogona kufambiswa zvakanyanya uchishandisa Fn load balancer, kana nekuisa Fn kuseri kwe proxy kudzivirira.

Source: www.habr.com

Voeg