
â en av de mest bemerkelsesverdige trendene innen skyberegninger. Hovedprinsippet er at infrastrukturen ikke er et ansvar for DevOps, men for tjenesteleverandĂžren. Ressursene skaleres automatisk til belastningen og har en hĂžy grad av endringshastighet.
En annen vanlig egenskap er trenden mot minimalisering og fokusering av koden, derfor blir serverlÞse beregninger noen ganger kalt «funksjon som tjeneste» (FaaS).
Historisk sett var Amazon den fÞrste leverandÞren av skybaserte tjenester som tilbÞd FaaS med AWS Lambda, og det er her navnet stammer fra. Andre skybaserte tjenesteleverandÞrer tilbyr ogsÄ sine egne varianter:
- Cloud Functions fra Google
- Azure Functions fra Microsoft
Alle disse selskapene tilbyr serverlÞse beregninger, automatisk skalering og betaling for faktisk brukte ressurser, men de binder ogsÄ kundene til sitt proprietÊre produkt. Det finnes imidlertid gratis alternativer med Äpen kildekode for Ä organisere serverlÞse beregninger. Det er verdt Ä merke seg:
- Plattformen , utviklet av IBM i et inkubatorprogram,
- , som en del av det ganske rike Þkosystemet til Spring Framework, som ogsÄ kan brukes som et fasade pÄ AWS Lambda, Azure Functions og OpenWhisk,
- , stĂžttet av Oracle.
Alle disse er helt uavhengige av skyer, det vil si at de kan installeres i hvilken som helst sky, inkludert din egen, offentlig eller privat, og selvfĂžlgelig i Exoscale.
Hvordan Fn prosjektet fungerer
Fn er helt basert pÄ Docker og bestÄr av to hovedkomponenter:
- CLI-programmet, som er ment Ă„ administrere alle aspekter av Fn-infrastrukturen, og som interagerer med Fn-serveren,
- Selve Fn-serveren, et vanlig program pakket i en Docker-kontainer.
Funksjoner som distribueres i Fn kjÞres ogsÄ i separate beholdere, noe som gjÞr det mulig Ä stÞtte en rekke programmeringssprÄk, for eksempel⊠Clojure!
Funksjonsargumenter blir sendt til standard input (STDIN), resultatene skrives til standard output (STDOUT). Hvis argumentene eller returverdiene ikke er enkle verdier (for eksempel JSON-objekter) â kan de bli konvertert ved hjelp av et abstraksjonslag som tilbys av Fn i form av et funksjonsutviklingssett (FDK).
For brukervennlighet tilbys innebygde malsett som forenkler distribusjonen av FaaS pÄ en omfattende liste over forskjellige sprÄk og deres versjoner (Go, forskjellige versjoner av Java, Python osv.).
Ă opprette FaaS er enkelt, fĂžlg denne planen:
- Distribuer funksjonen ved hjelp av CLI Fn: En konfigurasjonsfil for applikasjonen opprettes for Fn, basert pÄ den valgte malen.
- Distribuerer egen funksjon, igjen ved hjelp av CLI Fn: Docker-imaget plasseres i et lager, hvoretter serveren blir informert om eksistensen og plasseringen av dette imaget.

Prinsipp for distribusjon av funksjoner i Fn
Lokal installasjon og testing av serverlĂžse funksjoner
La oss begynne Ä installere Fn pÄ den lokale maskinen. FÞrst installeres Docker, slik det kreves av Fn. Vi antar at vi bruker Debian/Ubuntu:
$ sudo apt-get update
$ sudo apt-get install docker.ioEller bruk pakkeadministratoren/byggingen av Docker i henhold til systemet ditt. Deretter kan vi gÄ rett til installasjonen av Fn CLI. For eksempel, med curl:
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | shHvis du jobber pÄ OSX med installert Homebrew, kan du ta en annen rute:
$ brew install fn
==> Downloader https://homebrew.bintray.com/bottles/fn-0.5.8.high_sierra.bottle.tar.gz
==> Downloader fra https://akamai.bintray.com/b1/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb
######################################################################## 100.0%
==> Hellende fn-0.5.8.high_sierra.bottle.tar.gz
/usr/local/Cellar/fn/0.5.8: 5 filer, 16.7MBNÄ er alt klart for den fÞrste distribusjonen av funksjonen vÄr ved hjelp av CLI. For enkelhets skyld vil vi bruke det innebygde miljÞet for Ä kjÞre, for eksempel Node:
$ fn init --runtime node --trigger http hellonode
Oppretter funksjon i: /hellonode
Funksjonens mal er generert.
func.yaml er opprettet.En ny katalog vil bli opprettet hellonode for videre utvikling av Fn-funksjonen vÄr med noen grunnleggende konfigurasjonsfiler. Inne i den nyskapte katalogen kan du lage applikasjonen din, i henhold til standardene for det valgte sprÄket eller kjÞringsmiljÞet:
# ĐаŃĐ°Đ»ĐŸĐł Ń 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.javaFn oppretter en grunnleggende prosjektstruktur og lager filen func.yaml, som inneheld nĂždvendige installasjonar for Fn, og set opp mal for koden pĂ„ sprĂ„ket du valde.
I tilfelle av Node-runtime, betyr dette:
$ 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}
})No skal vi raskt sjekke funksjonen vÄr lokalt for Ä sjÄ korleis alt fungerer.
For Ä begynne med, skal vi starte Fn-serveren. Som tidlegare nemnt, er Fn-serveren ein Docker-container, sÄ den vil gÄ og ta bildet frÄ Docker-registeret etter at den er starta.
$ fn start -d # startar lokal server i bakgrunnen
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
668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5For Ä rulle ut funksjonen vÄr, mÄ den «deployas». Dette krev namn pÄ applikasjonen: i Fn mÄ alle applikasjonar definerast som namnrom for tilknyttede funksjonar.
Fn CLI vil leita etter fila func.yaml i den gjeldande katalogen, som vil bli brukt til Ä konfigurere funksjonen. SÄ vi mÄ fÞrst gÄ til katalogen vÄr hellonode.
$ cd hellonode
$ fn deploy --app fnexo --local # ruller ut funksjonen lokalt, applikasjonsnavnet - fnexo.
# parameteren local lastar ikkje opp bildet til fjernregisteret,
# men kĂžyre det direkte
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-triggerSom ein kan sjÄ frÄ utskrifta av komandoen, blir det laga eit nytt containerbilde for Docker som inneheld funksjonen vÄr. Funksjonen er klar til Ä bli kalla, og vi har to mÄtar Ä gjere dette pÄ:
- ved Ă„ bruke kommandoen Fn
invoke - ogsÄ ved Ä kalle direkte gjennom
http
Kall invoke gjennom Fn simulerer eigentleg HTTP-arbeid for testing, noko som er praktisk for raske sjekkar:
$ fn invoke fnexo hellonode # kallar funksjonen hellonode i applikasjonen fnexo
{"message":"Hello World"}For Ä kalle funksjonen direkte, mÄ ein kjenne den fullstendige URL-en:
$ curl http://localhost:8080/t/fnexo/hellonode-trigger
{"message":"Hello World"}Fn-serveren gir funksjonane sine gjennom port 8080, og URL-en for funksjonen ser ut til Ä fÞlge mÞnsteret t/app/function, men ikkje heilt. Gjennom HTTP blir funksjonen ikkje kalla direkte, men gjennom det sÄkalla triggeret, som gjennom namnet sitt «utlÞysar» kall av funksjonen. Triggerar blir definert i `func.yml prosjektet:
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 til triggerenVi kan endre navnet pÄ triggeren for Ä samsvare med funksjonsnavnet, dette vil forenkle alt:
triggers:
- name: hellonode-trigger
type: http
source: /hellonode # samsvar med funksjonsnavnetSĂ„ starter vi distribusjonen av funksjonen igjen og kaller den fra den nye triggeren:
$ fn deploy --app fnexo hellonode --local
$ curl http://localhost:8080/t/fnexo/hellonode
{"message":"Hello World"}Alt fungerer! Det er pÄ tide Ä gÄ videre med eksperimentene og publisere vÄr FaaS pÄ serveren!
Installerer serverlÞse funksjoner pÄ din egen infrastruktur
La oss raskt sette opp en virtuell maskin ved hjelp av Exoscale CLI. Hvis du ikke har satt det opp ennĂ„ â kan du bruke . Dette er et flott verktĂžy som vil Ăžke produktiviteten din ytterligere. Ikke glem Ă„ sette opp en regel for Ă„ Ă„pne port 8080 i sikkerhetsgruppen! FĂžlgende kommandoer vil starte en ren virtuell maskin, klar for hosting av funksjonene vĂ„re:
$ 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-securitygroupDeretter kan du logge inn via ssh pÄ den virtuelle maskinen og installere Fn-serveren:
$ 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)Deretter installerer vi Docker og Fn-serveren pÄ samme mÄte som vi gjorde pÄ den lokale maskinen, og starter serveren:
$ 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.643Fn er klart til Ä motta funksjoner! For Ä mÄlrette funksjoner til den eksterne serveren, vil vi bruke kommandoen deploy fra den lokale datamaskinen, og hopper over flagget --local.
I tillegg krever Fn at du angir plasseringen av Fn-serveren og Docker-registeret. Disse parameterne kan settes via miljÞvariabler FN_API_URL og FN_REGISTRY henholdsvis, men det tilbys ogsÄ en mer praktisk mÄte for enkel administrasjon av konfigurasjoner for distribusjon.
I Fn-termer er konfigurasjonen for distribusjon kalt context. Den fĂžlgende kommandoen vil opprette konteksten:
$ fn create context exoscale --provider default --api-url http://185.19.30.175:8080 --registry nfrankelDu kan se tilgjengelige kontekster slik:
$ fn list contexts
NĂ
VĂRENDE NAVN LEVERANDĂR API URL REGISTER
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
For Ă„ bytte til konteksten som nettopp ble opprettet, gjĂžr du slik:
$ fn use context exoscale
NĂ„ bruker vi konteksten: exoscaleFra dette punktet vil Fn-funksjonsleveransen laste ned Docker-bilder ved Ă„ bruke den valgte kontoen pĂ„ DockerHub (i mitt tilfelle â nfrankel), hvoretter den vil varsle den eksterne serveren (i dette eksemplet â http://185.19.30.175:8080) om plasseringen og versjonen av det siste bildet som inneholder funksjonen din.
$ fn deploy --app fnexo . # kjÞres pÄ lokal maskin fra mappen hellonode
Distribuerer funksjonen til: /.
Distribuerer hellonode til app: fnexo
Oppgradert til versjon 0.0.5
Bygger bilde nfrankel/hellonode:0.0.5 .Til slutt:
$ curl http://185.19.30.175:8080/t/fnexo/hellonode
{"message":"Hello World"}
Livssyklus for funksjoner i serverlÞs beregning basert pÄ Fn
Fordeler med serverlÞs beregning pÄ egne ressurser
ServerlĂžs beregning er en praktisk lĂžsning for rask implementering av uavhengige deler av applikasjonen, som samhandler med mer komplekse applikasjoner eller mikrotjenester.
Ofte er dette knyttet til skjulte kostnader ved Ä forplikte seg til en valgt leverandÞr, noe som, avhengig av spesifikke bruksomrÄder og volum, kan fÞre til hÞyere kostnader og lavere fleksibilitet i fremtiden.
Multisky- og hybridcloud-arkitekturer lider ogsÄ i slike tilfeller, da man gjerne kan finne seg i en situasjon der man Þnsker Ä bruke serverlÞs beregning, men pÄ grunn av bedriftspolitikk kan dette vÊre umulig.
Fn er ganske enkelt Ä bruke, kan gi nesten samme FaaS-grensesnitt, med smÄ kostnader. Det fjerner alle forpliktelser til leverandÞrer, og kan installeres lokalt eller hos hvilken som helst Þnsket leverandÞr av skybaserte lÞsninger. Det finnes ogsÄ frihet til Ä velge programmeringssprÄk.
Artikkelen presenterer bare grunnlagene for Fn, men Ă„ lage ditt eget kjĂžringsmiljĂž er ganske enkelt, og den generelle arkitekturen kan utvides med bruk av en Fn-lastbalanserer, eller ved Ă„ plassere Fn bak en proxy for beskyttelse.
Kilde: habr.com
