Að byggja okkar eigið netþjónalaust byggt á Fn

Að byggja okkar eigið netþjónalaust byggt á Fn

Miðlaralaus tölva er ein mest áberandi stefna í tölvuskýi. Grundvallarrekstrarreglan er sú að innviðir eru ekki áhyggjuefni DevOps, heldur þjónustuveitandans. Tilfangsstærð stillir sig sjálfkrafa að álagi og hefur mikla breytingatíðni.

Annar sameiginlegur eiginleiki er tilhneigingin til að lágmarka og einbeita sér að kóða, þess vegna er netþjónalaus tölva stundum kölluð virkni sem þjónusta (FaaS).

Sögulega séð var fyrsta skýjafyrirtækið til að bjóða FaaS með AWS Lambda Amazon, þess vegna nafnið. Aðrir skýjaþjónustuaðilar bjóða einnig upp á svipaðar:

  • Cloud Functions frá Google
  • Azure aðgerðir frá Microsoft

Öll þessi fyrirtæki bjóða upp á netþjónalausa tölvuvinnslu, sjálfvirka stærðarstærð og borga aðeins fyrir það sem þú notar í raun, en þau loka viðskiptavinum inn í sérvöru sína. Hins vegar eru ókeypis og opinn uppspretta valkostir fyrir netþjónalausa tölvuvinnslu. Þess má geta:

  • Pallur Apache OpenWhisk, þróað í útungunarvél af IBM,
  • Vorskýjaaðgerðir, sem hluti af nokkuð ríku Spring Framework vistkerfi, sem einnig er hægt að nota sem framhlið fyrir AWS Lambda, Azure Functions og OpenWhisk,
  • Verkefni Fn, studd af Oracle.

Öll eru þau algjörlega óháð skýjum, það er að segja, þau geta verið sett upp í hvaða skýi sem er, þar með talið þitt eigið, opinbera eða einkarekna, og auðvitað í Exoscale.

Hvernig Fn verkefnið virkar

Fn er algjörlega byggt á Docker, samanstendur af tveimur meginþáttum:

  • CLI forrit hannað til að stjórna öllum þáttum Fn innviða og hefur samskipti við Fn netþjóninn,
  • Fn þjónninn sjálfur er venjulegt forrit sem er pakkað í Docker ílát.

Aðgerðirnar sem notaðar eru í Fn eru einnig framkvæmdar í aðskildum gámum, sem gerir þér kleift að styðja við mörg forritunarmál, til dæmis... Clojure!

Aðgerðarrök eru send í staðlað inntak (STDIN), niðurstöður eru skrifaðar í staðlaða úttak (STDOUT). Ef rökin eða skilagildin eru ekki einföld gildi (eins og JSON hlutur) er hægt að breyta þeim með því að nota abstraktlag sem Fn sjálft útvegar í formi Function Development Kit (FDK).

Til hægðarauka er boðið upp á innbyggð sett af sniðmátum til að auðvelda uppsetningu FaaS á víðtækum lista yfir mismunandi tungumál og útgáfur þeirra (Go, mismunandi útgáfur af Java, Python, osfrv.).

Það er auðvelt að búa til FaaS með því að fylgja þessari skýringarmynd:

  • Að útfæra aðgerðina með því að nota Fn CLI: forritastillingarskrá fyrir Fn er búin til byggt á völdu sniðmáti.
  • Við rúllum út okkar eigin aðgerð, aftur með því að nota CLI Fn: gámamyndin er sett í ákveðna geymslu, eftir það er þjóninum tilkynnt um tilvist og staðsetningu þessarar myndar.

Að byggja okkar eigið netþjónalaust byggt á Fn
Meginreglan um að skila aðgerðum til Fn

Staðbundin uppsetning og prófun á netþjónalausum aðgerðum

Við skulum byrja að setja upp Fn á staðbundinni vél. Í fyrsta lagi er Docker sett upp, eins og krafist er af Fn. Að því gefnu að við séum á Debian/Ubuntu:

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

Eða notaðu pakkastjóra/Docker smíði í samræmi við kerfið þitt. Þá geturðu farið beint í að setja upp Fn CLI. Til dæmis, með því að nota krulla:

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

Ef þú ert á OSX með Homebrew uppsett geturðu farið í hina áttina:

$ 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

Við erum nú tilbúin til að nota aðgerðina okkar í upphafi með því að nota CLI. Til einföldunar munum við nota innbyggt sjósetningarumhverfi, eins og Node:

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

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

Ný möppu verður búin til hellonode til að þróa enn frekar Fn aðgerðina okkar með nokkrum grunnstillingarskrám. Inni í nýstofnuðu möppunni geturðu búið til forritið þitt í samræmi við staðla fyrir valið tungumál eða keyrslutíma:

# Каталог с 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 býr til upphafsverkefni verkefnisins, býr til skrá func.yaml, sem inniheldur nauðsynlegar stillingar fyrir Fn, og setur sniðmátið fyrir kóðann á tungumálinu sem þú valdir.

Þegar um er að ræða Node keyrslutíma þýðir þetta:

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

Nú munum við fljótt prófa virkni okkar á staðnum til að sjá hvernig allt virkar.

Fyrst munum við ræsa Fn netþjóninn. Eins og áður hefur komið fram er Fn þjónninn Docker gámur, þess vegna mun hann, eftir ræsingu, taka myndina úr Docker skránni.

$ 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

Til að keyra aðgerðina okkar verður það að vera „rúllað út“. Þetta krefst имя приложения: Í Fn verða öll forrit að vera tilgreind sem nafnrými fyrir tengdar aðgerðir.

Fn CLI mun leita að skránni func.yaml í núverandi möppu sem verður notuð til að stilla aðgerðina. Svo fyrst þarftu að fara í möppuna okkar 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

Eins og þú sérð af skipunarúttakinu er ný Docker gámamynd búin til sem inniheldur aðgerðina okkar. Aðgerðin er tilbúin til að kalla á hana og við höfum tvær leiðir til að gera það:

  • með því að nota Fn skipunina invoke
  • hringir beint í gegnum http

Hringdu invoke í gegnum Fn líkir það einfaldlega eftir vinnu í gegnum HTTP fyrir próf, sem er þægilegt fyrir fljótlegar prófanir:

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

{"message":"Hello World"}

Til að hringja beint í aðgerð þarftu að vita alla vefslóðina:

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

{"message":"Hello World"}

Fn þjónninn afhjúpar aðgerðir sínar á höfn 8080 og vefslóð aðgerðarinnar virðist passa við mynstrið t/app/function, en ekki alveg. Í gegnum HTTP er fall ekki kölluð beint, heldur í gegnum svokallaðan trigger, sem samkvæmt nafninu „ræsir“ fallkallið. Kveikjur eru skilgreindar í `func.yml verkefni:

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

Við getum breytt kveikjanafninu til að passa við aðgerðaheitið, þetta mun einfalda allt:

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

Síðan keyrum við aðgerðaafhendinguna aftur og köllum hana frá nýjum kveikju:

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

{"message":"Hello World"}

Allt er að virka! Það er kominn tími til að fara yfir í tilraunir í fullri stærð og birta FaaS okkar á þjóninum!

Að setja upp netþjónalausa virkniþjónustu á eigin innviði

Við skulum setja upp sýndarvél fljótt með því að nota Exoscale CLI. Ef þú hefur ekki sett það upp ennþá geturðu notað Hraðbyrjunarleiðbeiningar okkar. Þetta er flott tól sem mun auka framleiðni þína enn meira. Ekki gleyma því að þú þarft að stilla reglu til að opna port 8080 í öryggishópnum! Eftirfarandi skipanir munu ræsa hreina sýndarvél, tilbúin til að hýsa aðgerðir okkar:

$ 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

Síðan geturðu ssh inn í sýndarvélina og sett upp ytri Fn netþjóninn:

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

Settu síðan upp Docker og Fn netþjóninn á sama hátt og var þegar gert á staðbundinni vél, ræstu netþjóninn:

$ 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 er tilbúið til að taka á móti aðgerðum! Fyrir markvissan flutning aðgerða á ytri miðlara munum við nota skipunina deploy úr heimatölvunni með því að sleppa fánanum --local.

Að auki, Fn krefst þess að þú tilgreinir staðsetningu Fn netþjónsins og Docker skrárinnar. Hægt er að stilla þessa valkosti með umhverfisbreytum FN_API_URL и FN_REGISTRY í sömu röð, en býður einnig upp á þægilegri leið til að stjórna stofnun og stjórnun stillinga fyrir uppsetningu auðveldlega.

Í Fn-skilmálum er uppsetningin fyrir uppsetningu kallað context. Eftirfarandi skipun mun búa til samhengið:

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

Þú getur skoðað tiltækt samhengi eins og þetta:

$ fn list contexts

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

Og skiptu yfir í samhengið sem var bara búið til svona:

 $ fn use context exoscale

 Now using context: exoscale

Héðan í frá mun afhending Fn eiginleikans hlaða niður Docker myndum með því að nota valinn DockerHub reikning (í mínu tilviki - nfrankel), og tilkynntu síðan ytri þjóninum (í þessu dæmi - http://185.19.30.175:8080) um staðsetningu og útgáfu nýjustu myndarinnar sem inniheldur aðgerðina þína.

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

Loksins:

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

{"message":"Hello World"}

Að byggja okkar eigið netþjónalaust byggt á Fn
Lífsferill aðgerða í Fn-undirstaða netþjónalausrar tölvuvinnslu

Kostir netþjónalausrar tölvuvinnslu að eigin getu

Serverless computing er þægileg lausn til að fljótt innleiða sjálfstæða hluta forrits sem hafa samskipti við flóknari forrit eða örþjónustur.

Þetta stafar oft af duldum kostnaði við að læsa sig inni við valinn söluaðila, sem, allt eftir tilteknu notkunartilviki og magni, getur leitt til hærri kostnaðar og minni sveigjanleika í framtíðinni.

Fjölskýja- og blendingsskýjaarkitektúr þjást líka í þessu tilfelli, vegna þess að þú getur auðveldlega lent í aðstæðum þar sem þú vilt nota netþjónalausa tölvu, en vegna stefnu fyrirtækja er það ekki mögulegt.

Fn er frekar auðvelt í notkun og getur veitt nánast sama FaaS viðmótið, með litlum kostnaði. Það útilokar hvers kyns lokun söluaðila og hægt er að setja það upp á staðnum eða í hvaða þægilegu skýjalausn sem er að eigin vali. Það er líka frelsi í því að velja forritunarmál.

Þessi grein fjallar aðeins um grunnatriði Fn, en það er frekar einfalt að búa til þinn eigin keyrslutíma og heildararkitektúrinn er hægt að nota víðar með því að nota Fn álagsjafnvægi, eða með því að setja Fn á bak við umboð til verndar.

Heimild: www.habr.com

Bæta við athugasemd