Oman palvelimettoman rakentaminen Fn:n perusteella
Palvelimeton laskenta on yksi pilvitekniikan näkyvimmistä trendeistä. Toimintaperiaate on, että infrastruktuuri ei ole DevOpsin vaan palveluntarjoajan huolen. Resurssien skaalaus mukautuu automaattisesti kuormitukseen, ja sen muutosnopeus on suuri.
Toinen yleinen piirre on pyrkimys minimoida ja tarkentaa koodia, minkä vuoksi palvelimetonta tietojenkäsittelyä kutsutaan joskus palveluksi (FaaS).
Historiallisesti ensimmäinen pilvipalveluntarjoaja, joka tarjosi FaaS:n AWS Lambdan kanssa, oli Amazon, mistä myös nimi. Myös muut pilvipalveluntarjoajat tarjoavat samanlaisia:
Googlen pilvitoiminnot
Azure Functions Microsoftilta
Kaikki nämä yritykset tarjoavat palvelimetonta tietojenkäsittelyä, automaattista skaalausta ja maksavat vain siitä, mitä todella käytät, mutta ne lukitsevat asiakkaat omiin tuotteisiinsa. Palvelimettomaan tietokoneeseen on kuitenkin olemassa ilmaisia ja avoimen lähdekoodin vaihtoehtoja. On syytä huomata:
Kevään pilvitoiminnot, osana melko rikasta Spring Framework -ekosysteemiä, jota voidaan käyttää myös AWS Lambdan, Azure Functionsin ja OpenWhiskin julkisivuna,
Ne kaikki ovat täysin pilvistä riippumattomia, eli ne voidaan asentaa mihin tahansa pilveen, mukaan lukien omasi, julkiset tai yksityiset, ja tietysti Exoscale-sovellukseen.
Kuinka Fn-projekti toimii
Fn perustuu täysin Dockeriin, ja se koostuu kahdesta pääkomponentista:
CLI-ohjelma, joka on suunniteltu hallitsemaan kaikkia Fn-infrastruktuurin osa-alueita ja on vuorovaikutuksessa Fn-palvelimen kanssa,
Itse Fn-palvelin on tavallinen sovellus, joka on pakattu Docker-säilöön.
Fn:ssä käyttöönotetut toiminnot suoritetaan myös erillisissä konteissa, jolloin voit tukea monia ohjelmointikieliä, esimerkiksi... Clojure!
Funktioargumentit välitetään standardituloon (STDIN), tulokset kirjoitetaan standardilähtöön (STDOUT). Jos argumentit tai palautusarvot eivät ole yksinkertaisia arvoja (kuten JSON-objekti), ne voidaan muuntaa käyttämällä Fn:n itsensä tarjoamaa abstraktiokerrosta Function Development Kitin (FDK) muodossa.
Mukavuussyistä tarjotaan sisäänrakennettuja mallisarjoja, jotka helpottavat FaaS:n käyttöönottoa laajalla luettelolla eri kielistä ja niiden versioista (Go, Java-, Python-versiot jne.).
FaaS:n luominen on helppoa seuraamalla tätä kaaviota:
Toiminnon käyttöönotto Fn CLI:n avulla: Fn:lle luodaan sovelluksen määritystiedosto valitun mallin perusteella.
Otamme käyttöön oman toimintomme, jälleen CLI Fn:n avulla: konttikuva sijoitetaan tiettyyn arkistoon, jonka jälkeen palvelimelle ilmoitetaan tämän kuvan olemassaolosta ja sijainnista.
Periaate funktioiden toimittamisesta Fn:lle
Palvelimettomien toimintojen paikallinen asennus ja testaus
Aloitetaan Fn:n asentaminen paikalliselle koneelle. Ensin asennetaan Docker, kuten Fn vaatii. Olettaen, että olemme Debianissa/Ubuntussa:
Tai käytä paketinhallintaa/Docker-koontiversiota järjestelmäsi mukaan. Sitten voit siirtyä suoraan Fn CLI:n asentamiseen. Esimerkiksi curl-toiminnolla:
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
Jos käytät OSX:ää ja Homebrew on asennettuna, voit toimia toisin:
Olemme nyt valmiita ottamaan toimintomme käyttöön CLI:n avulla. Yksinkertaisuuden vuoksi käytämme sisäänrakennettua käynnistysympäristöä, kuten Node:
$ fn init --runtime node --trigger http hellonode
Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.
Uusi hakemisto luodaan hellonode kehittääksemme edelleen Fn-toimintoamme joidenkin perusasetustiedostojen avulla. Äskettäin luodun hakemiston sisällä voit luoda sovelluksesi valitsemasi kielen tai ajonaikaisten standardien mukaisesti:
# Каталог с 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 luo alkuperäisen projektin rakenteen, luo tiedoston func.yaml, joka sisältää tarvittavat Fn-asetukset, ja asettaa mallin koodille valitsemallasi kielellä.
Solmun suoritusajan tapauksessa tämä tarkoittaa:
$ 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}
})
Nyt testaamme nopeasti toimintaamme paikallisesti nähdäksemme, kuinka kaikki toimii.
Ensin käynnistämme Fn-palvelimen. Kuten jo mainittiin, Fn-palvelin on Docker-säiliö, joten käynnistyksen jälkeen se menee ja ottaa kuvan Docker-rekisteristä.
$ 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
Toimintomme suorittamiseksi se on "käännettävä". Tämä vaatii имя приложения: Fn:ssä kaikki sovellukset on määritettävä nimiavaruuksiksi toisiinsa liittyville funktioille.
Fn CLI etsii tiedostoa func.yaml nykyisessä hakemistossa, jota käytetään toiminnon määrittämiseen. Joten ensin sinun täytyy mennä hakemistoomme 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
Kuten näet komennon lähdöstä, luodaan uusi Docker-säiliökuva, joka sisältää funktiomme. Funktio on valmis kutsuttavaksi, ja meillä on kaksi tapaa tehdä se:
käyttämällä Fn-komentoa invoke
soittamalla suoraan kautta http
puhelu invoke Fn:n kautta se yksinkertaisesti emuloi työtä HTTP:n kautta testeihin, mikä on kätevää nopeaan testaukseen:
Fn-palvelin paljastaa toimintonsa portissa 8080 ja funktion URL näyttää vastaavan mallia t/app/function, mutta ei kokonaan. HTTP:n kautta funktiota ei kutsuta suoraan, vaan ns. triggerin kautta, joka nimensä mukaan "aloittaa" funktiokutsun. Triggerit on määritelty kohdassa `func.yml projekti:
Kaikki toimii! On aika siirtyä täysimittaisiin kokeiluihin ja julkaista FaaS palvelimella!
Palvelimettomien toimintopalvelujen asentaminen omaan infrastruktuuriin
Asennataan nopeasti virtuaalikone Exoscale CLI:n avulla. Jos et ole vielä määrittänyt sitä, voit käyttää sitä pika-aloitusoppaamme. Tämä on hieno työkalu, joka lisää tuottavuuttasi entisestään. Älä unohda, että sinun on määritettävä sääntö portin 8080 avaamiseksi suojausryhmässä! Seuraavat komennot käynnistävät puhtaan virtuaalikoneen, joka on valmis isännöimään toimintojamme:
Sitten voit siirtää ssh:n virtuaalikoneeseen ja asentaa Fn-etäpalvelimen:
$ 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)
Asenna sitten Docker ja Fn-palvelin samalla tavalla kuin jo tehtiin paikalliselle koneelle, käynnistä palvelin:
Fn on valmis vastaanottamaan toimintoja! Kohdennettuun toimintojen siirtoon etäpalvelimelle käytämme komentoa deploy paikalliselta tietokoneelta jättämällä pois lipun --local.
Lisäksi Fn edellyttää, että määrität Fn-palvelimen ja Docker-rekisterin sijainnin. Nämä asetukset voidaan asettaa ympäristömuuttujien kautta FN_API_URL и FN_REGISTRY mutta tarjoaa myös kätevämmän tavan hallita helposti käyttöönoton kokoonpanojen luomista ja hallintaa.
Fn-termeillä käyttöönoton konfiguraatiota kutsutaan context. Seuraava komento luo kontekstin:
Voit tarkastella käytettävissä olevia konteksteja seuraavasti:
$ fn list contexts
CURRENT NAME PROVIDER API URL REGISTRY
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
Ja vaihda juuri luotuun kontekstiin näin:
$ fn use context exoscale
Now using context: exoscale
Tästä eteenpäin Fn-ominaisuuden toimitus lataa Docker-kuvat valitulla DockerHub-tilillä (minun tapauksessani - nfrankel) ja ilmoita sitten etäpalvelimelle (tässä esimerkissä - http://185.19.30.175:8080) toimintosi sisältävän uusimman kuvan sijainnista ja versiosta.
$ 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 .
Toiminnan elinkaari Fn-pohjaisessa palvelimettomassa tietojenkäsittelyssä
Palvelittoman tietojenkäsittelyn edut omalla kapasiteetillasi
Palvelimeton tietojenkäsittely on kätevä ratkaisu sovelluksen itsenäisten osien nopeaan toteuttamiseen, jotka ovat vuorovaikutuksessa monimutkaisempien sovellusten tai mikropalvelujen kanssa.
Tämä johtuu usein piilokustannuksista, joita aiheutuu valittuun toimittajaan kiinnittymisestä, mikä voi erityisestä käyttötapauksesta ja määrästä riippuen johtaa korkeampiin kustannuksiin ja joustavuuden vähenemiseen tulevaisuudessa.
Myös monipilvi- ja hybridipilviarkkitehtuurit kärsivät tässä tapauksessa, koska voit helposti joutua tilanteeseen, jossa haluaisit käyttää palvelimetonta laskemista, mutta yrityskäytäntöjen vuoksi se ei välttämättä ole mahdollista.
Fn on melko helppokäyttöinen ja voi tarjota lähes saman FaaS-rajapinnan pienellä lisäkululla. Se eliminoi toimittajan lukkiutumisen, ja se voidaan asentaa paikallisesti tai mihin tahansa sopivaan valitsemaasi pilviratkaisujen tarjoajaan. Ohjelmointikielen valinnassa on myös vapautta.
Tämä artikkeli kattaa vain Fn:n perusteet, mutta oman suoritusajan luominen on melko yksinkertaista, ja yleistä arkkitehtuuria voidaan ottaa käyttöön laajemmin käyttämällä Fn-kuormitustasainta tai sijoittamalla Fn suojauksen välityspalvelimen taakse.