We are building our own serverless based on Fn

We are building our own serverless based on Fn

Serveriteta arvutus — ĂŒks kĂ”ige silmatorkavamaid suundi pilveteenustes. Peamine pĂ”himĂ”te on see, et infrastruktuuri eest hoolitseb mitte DevOps, vaid teenusepakkuja. Ressursside automaatne skaleerimine kohandub koormusega ja omab kĂ”rgendatud muutmiskiirus.

Teine levinud tunnusjoon on kalduvus vÀhendada ja fokuseerida koodi, mistÔttu nimetatakse serveriteta arvutust mÔnikord ka kui "funktsioonina teenus" (FaaS).

Ajalooliselt oli esimene pilveteenuste pakkuja, kes pakkus FaaS-i AWS Lambda kaudu, Amazon, kust see nimetus pÀrineb. Teised pilveteenuste pakkujad pakuvad ka analooge:

  • Google'i Cloud Functions
  • Microsofti Azure Functions

KÔik need ettevÔtted pakuvad serveriteta arvutust, automaatset skaleerimist ja tasu ainult tegelikult kasutatud ressursside eest, kuid nad seovad kliente oma omandiÔigusega tootele. Siiski on olemas tasuta avatud lÀhtekoodiga alternatiive serveriteta arvutuse korraldamiseks. Tasub mÀrkida:

  • Platvorm Apache OpenWhisk, mida arendab IBM-i inkubaator,
  • Spring Cloud Functions, osana varsin rikkaasta Spring Framework -ekosysteemistĂ€, jota voidaan kĂ€yttÀÀ myös AWS Lambdan, Azure Functionsin ja OpenWhiskin julkisivuna,
  • Fn-projekti, jota tukee Oracle.

Kaikki ne ovat tÀysin riippumattomia pilvistÀ, ts. ne voidaan asentaa mihin tahansa pilveen, mukaan lukien oma, julkinen tai yksityinen, ja tietenkin Exoscaleen.

Miten Fn-projekti toimii

Fn perustuu tÀysin Dockeriin ja koostuu kahdesta pÀÀkomponentista:

  • CLI-ohjelmasta, joka on tarkoitettu hallitsemaan kaikkia Fn-infrastruktuurin nĂ€kökohtia ja vuorovaikutusta Fn-palvelimen kanssa,
  • Itse Fn-palvelin, tavallinen sovellus, joka on pakattu Docker-konttiin.

Fn:ssĂ€ kĂ€yttöön otetut funktiot suoritetaan myös erillisissĂ€ konteissa, mikĂ€ mahdollistaa useiden ohjelmointikielten kĂ€ytön, esimerkiksi
 Clojure!

Funktioiden argumentit vĂ€litetÀÀn standardiin syötteeseen (STDIN), ja tulokset kirjoitetaan standardiin ulostuloon (STDOUT). Jos argumentit tai palautusarvot eivĂ€t ole yksinkertaisia arvoja (esim. JSON-objekti) — ne voidaan muuttaa Fn:n tarjoaman funktioiden kehityspaketin (FDK) avulla.

Mugavuse huvides pakuvad sisseehitatud ƥabloonide komplekti, mis lihtsustavad FaaS-i kÀivitamist mitmesugustes keeltes ja nende versioonides (Go, erinevad Java versioonid, Python jne).

FaaS-i loomine on lihtne, jÀrgides seda skeemi:

  • KĂ€ivitame funktsiooni CLI Fn abil: luuakse rakenduse konfigureerimisfail Fn jaoks, mis pĂ”hineb valitud ĆĄabloonil.
  • TĂ”ukame oma funktsiooni, samuti CLI Fn abil: konteineripilt paigutatakse mĂ”nda registrisse, pĂ€rast mida teavitatakse serverit selle olemasolust ja asukohast.

We are building our own serverless based on Fn
Fn-s funktsioonide kohaletoimetamise pÔhimÔte

Kohalik installatsioon ja serverivabade funktsioonide testimine

Alustame Fn-i paigaldamist kohalikule masinale. Esiteks installime Dockerit, nagu nÔuab Fn. Eeldatakse, et kasutame Debian/Ubuntu:

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

VĂ”i kasutage pakihaldurit/ Dockerit vastavalt oma sĂŒsteemile. seejĂ€rel saab minna otse Fn CLI installatsiooni juurde. NĂ€iteks, kasutades curl-i:

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

Kui töötate OSX-is, kus on installitud Homebrew, saate minna teise teed:

$ brew install fn

==> Laadimine https://homebrew.bintray.com/bottles/fn-0.5.8.high_sierra.bottle.tar.gz
==> Laadimine aadressilt 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 faili, 16.7MB

NĂŒĂŒd on kĂ”ik valmis meie funktsiooni esialgseks seadistamiseks CLI abil. Lihtsuse huvides kasutame sissehitatud keskkonda, nĂ€iteks Node:

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

Funktsiooni loomine aadressil: /hellonode
Funktsiooni mall genereeritud.
func.yaml loodud.

Loodud on uus kataloog hellonode meie Fn funktsiooni edasise arenduse jaoks koos mÔningate pÔhikonfiguratsioonifailidega. Uues loodud kataloogis saate luua oma rakenduse, jÀrgides valitud keele vÔi keskkonna standardeid:

# ĐšĐ°Ń‚Đ°Đ»ĐŸĐł с 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 loob projekti algstruktuuri, genereerib faili func.yaml, mis sisaldab Fn-i jaoks vajalikke seadistusi ja seab ĂŒles koodimalli, kasutades valitud keelt.

Node'i keskkonna korral tÀhendab see:

$ 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ĂŒĂŒd kontrollime kiiresti meie funktsiooni kohalikult, et nĂ€ha, kuidas kĂ”ik töötab.

Esiteks kÀivitame Fn serveri. Nagu juba mainitud, on Fn server Docker konteiner, seega pÀrast kÀivitamist tÔmbab ta pildi Docker registrist.

$ fn start -d                    # kÀivita kohalik server taustal

Kohalikult ei leitud pilti 'fnproject/fnserver:latest'
latest: TÔmbamine fnproject/fnserver'ist
ff3a5c916c92: TÔmbamine lÔpetatud
1a649ea86bca: TÔmbamine lÔpetatud
ce35f4d5f86a: TÔmbamine lÔpetatud

...

Olekuraport: Uuem pilt on tÔmmatud fnproject/fnserver:latest
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5

Kuna tahame oma funktsiooni „vĂ€lja panna”, on vaja teha jĂ€rgmised toimingud. rakenduse nimi: Fn-s peavad kĂ”ik rakendused olema mÀÀratud nimede ruumide kaudu seotud funktsioonide jaoks.

Fn CLI otsib faili func.yaml praeguses kataloogis, mida rakendatakse funktsiooni seadistamiseks. Seega peame esmalt minema oma katalooge. hellonode.

$ cd hellonode
$ fn deploy --app fnexo --local  # juurutame funktsiooni kohaliku nimega fnexo.
                                 # kohalik valik ei lae pilti kaugregistrisse,
                                 # kÀivitab selle otse

Juurutamine hellonode rakendusele: fnexo
TÔstetud versiooniks 0.0.2
Kuvatakse pilt nfrankel/hellonode:0.0.3 .
Kasutades hellonode funktsiooni pilti nfrankel/hellonode:0.0.3...
Rakendus fnexo on edukalt loodud
Funktsioon hellonode koos nfrankel/hellonode:0.0.3 on edukalt loodud
KÀivitatud on hellonode-trigger kÀivitus

Nagu nÀha kÀsu vÀljundist, luuakse uus Docker konteineri pilt, mis sisaldab meie funktsiooni. Funktsioon on kutsumiseks valmis, ja meil on kaks vÔimalust seda teha:

  • kasutades kĂ€sku Fn invoke
  • kutsudes otse http

Kutse invoke Fn lihtsalt simuleerib HTTP töötlust testimiseks, mis on kiire kontrolli jaoks mugav:

$ fn invoke fnexo hellonode      # kutsume vÀlja hellonode funktsiooni rakenduses fnexo

{"message":"Hello World"}

Funktsiooni otse kutsumiseks tuleb teada tÀis-URLi:

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

{"message":"Hello World"}

Fn server pakub oma funktsioone lĂ€bi sadama 8080, ja tundub, et funktsiooni URL vastab skeemile t/app/function, kuid mitte tĂ€ielikult. HTTP kaudu kutsutakse funktsiooni mitte otse, vaid nn triggeriga, mis oma nime kohaselt „kĂ€ivitab” funktsiooni kutsumise. Triggerid mÀÀratletakse `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    # triggeri URL

Saame muuta triggeri nime nii, et see vastaks funktsiooni nimele, see lihtsustab kÔike:

triggers:
- name: hellonode-trigger
  type: http
  source: /hellonode    # vastab funktsiooni nimele

SeejÀrel kÀivitame funktsiooni tarnimise uuesti ja kutsume selle vÀlja uuest triggerist:

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

{"message":"Hello World"}

KÔik töötab! On Ôige aeg liikuda praktiliste katsete juurde ja avaldada meie FaaS serveris!

Serverivabade funktsioonide teenuste paigaldamine oma infrastruktuurile

Korraldame kiiresti virtuaalmasina seadistamise Exoscale CLI abil. Kui te pole seda veel seadistanud — vĂ”ite kasutada meie kiire kĂ€ivitamise juhend. See on suurepĂ€rane tööriist, mis tĂ”stab veelgi teie tootlikkust. Ärge unustage seadistada reeglit portaali 8080 avamiseks Security Group'is! JĂ€rgmised kĂ€sud kĂ€ivitavad puhta virtuaalmasina, mis on valmis meie funktsioonide majutamiseks:

$ 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

SeejÀrel saab SSH kaudu virtuaalmasinale siseneda ja installida Fn-i kaugrestori:

$ exo ssh fn-server

Hosti '185.19.30.175 (185.19.30.175)' autentsust ei saa kindlaks teha.
ECDSA vÔtme sÔrmejÀlg on SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.
Kas olete kindel, et soovite jĂ€tkata ĂŒhenduse loomist (jah/ei)? jah
Hoiatus: '185.19.30.175' (ECDSA) lisati alatiseks tuntud hostide nimekirja.
Tere tulemast Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)

SeejÀrel installime Dockeri ja Fn-serveri, nagu on juba tehtud kohalikul masinal, ja kÀivitame serveri:

$ 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 on valmis funktsioonide vastuvÔtmiseks! Funktsioonide suunamiseks kaugrestorisse kasutame kÀsku deploy kohalikult arvutilt, jÀttes vÀlja lipu --local.

Lisaks nÔuab Fn, et mÀÀrata Fn-serveri ja Dockeri registri asukoht. Need parameetrid saab seada keskkonnamuutujate kaudu FN_API_URL ja FN_REGISTRY seega, kuid on pakutud ka mugavamat viisi konfiguratsioonide loomise ja haldamise hÔlpsaks juhtimiseks.

Fn-i mÔistes nimetatakse implementatsiooni konfiguratsiooni context. JÀrgmine kÀsk loob konteksti:

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

Saate vaadata saadaval olevaid kontekste jÀrgmiselt:

$ fn list contexts

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

Ja vahetada just loodud konteksti jÀrgmiselt:

 $ fn use context exoscale

 Now using context: exoscale

Alates sellest kohast hakkab Fn-i funktsioonide pakkumine laadima Docker-pilte, kasutades valitud konto DockerHubis (minu puhul — nfrankel), seejĂ€rel teavitab eemalat serverit (selles nĂ€ites — http://185.19.30.175:8080) teie funktsiooni viimasest pildist ja versioonist asukohast.

$ fn deploy --app fnexo .   # tÀidetakse lokaalselt kataloogist hellonode

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

LÔpuks:

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

{"message":"Hello World"}

We are building our own serverless based on Fn
Fn-pĂ”histes serverivabades arvutustes on funktsiooni elutsĂŒkkel

Serverless-arvutuse eelised oma jÔudluse alusel

Serverless-arvutused on mugav lahendus rakenduse iseseisvate osade kiireks juurutamiseks, mis suhtlevad keerukamate rakenduste vÔi mikroteenustega.

Sageli on see seotud varjatud kulude probleemiga, mis on seotud valitud teenusepakkujaga, mis sÔltub konkreetsest kasutusjuhust ja mahust, mis vÔib tulevikus viia kÔrgemate kulude ja madalama paindlikkuseni.

Multicloud ja hĂŒbriidpilvaarhitektuurid kannatavad samuti, kuna vĂ”ib tekkida olukord, kus on soov kasutada serverless-arvutusi, kuid ettevĂ”tte poliitika tĂ”ttu ei pruugi see olla vĂ”imalik.

Fn on piisavalt lihtne kasutada ja vÔib pakkuda peaaegu sama FaaSi liidest vÀikeste kuludega. See eemaldab teenusepakkujaga seotud sidemed, kuna saate seda installida kohapealselt vÔi valida endale sobiva pilveteenuse pakkuja. Samuti on olemas vabadus programmeerimiskeele valikul.

Artiklis on tutvustatud ainult Fn pĂ”hialuseid, kuid oma tĂ€itmisĂŒsteemi loomine on piisavalt lihtne ja ĂŒldist arhitektuuri saab laiendada Fn koormuse tasakaalustaja abil vĂ”i paigutades Fn vahepealseks kaitseks.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster