Fn oinarritutako gure zerbitzaririk gabekoa eraikitzea
Zerbitzaririk gabeko informatika hodeiko informatikaren joera nabarmenetako bat da. Oinarrizko funtzionamendu-printzipioa da azpiegitura ez dela DevOps-en ardura, zerbitzu hornitzailearena baizik. Baliabideen eskalatzea automatikoki doitzen da kargara eta aldaketa-tasa handia du.
Beste ezaugarri komun bat kodea minimizatzeko eta bideratzeko joera da, horregatik zerbitzaririk gabeko konputazioa zerbitzu gisa funtzionamendua (FaaS) deitzen zaio batzuetan.
Historikoki, AWS Lambda-rekin FaaS eskaintzen duen lehen hodeiko hornitzailea Amazon izan zen, hortik izena. Beste hodeiko zerbitzu hornitzaileek ere antzekoak eskaintzen dituzte:
Google-ren Cloud Functions
Microsoft-en Azure Functions
Enpresa hauek guztiek zerbitzaririk gabeko informatika, eskalatze automatikoa eskaintzen dute eta benetan erabiltzen duzunagatik bakarrik ordaintzen dute, baina bezeroak beren produktu jabedunean blokeatzen dituzte. Hala ere, badaude doako eta kode irekiko alternatibak zerbitzaririk gabeko konputaziorako. Aipatzekoa da:
Spring Cloud Funtzioak, Spring Framework ekosistema nahiko aberats baten parte gisa, AWS Lambda, Azure Functions eta OpenWhisk-en fatxada gisa ere erabil daitekeena,
Guztiak hodeietatik guztiz independenteak dira, hau da, edozein hodeitan instala daitezke, zurea, publikoa edo pribatua barne, eta noski Exoscale-n.
Fn proiektuak nola funtzionatzen duen
Fn Docker-en oinarritzen da guztiz, bi osagai nagusi ditu:
Fn azpiegituraren alderdi guztiak kudeatzeko eta Fn zerbitzariarekin elkarreragiten duen CLI programa.
Fn zerbitzaria bera Docker edukiontzi batean bildutako ohiko aplikazio bat da.
Fn-n zabaldutako funtzioak ere edukiontzi bereizietan exekutatzen dira, eta horrek programazio-lengoaia asko onartzen ditu, adibidez... Clojure!
Funtzio-argumentuak sarrera estandarrera (STDIN) pasatzen dira, emaitzak irteera estandarrera (STDOUT) idazten dira. Argumentuak edo itzultzeko balioak balio soilak ez badira (adibidez, JSON objektu bat), Fn-ek berak emandako abstrakzio geruza baten bidez bihurtu daitezke Funtzio Garapenerako Kit (FDK) moduan.
Erosotasunerako, txantiloi multzo integratuak eskaintzen dira FaaS hizkuntza ezberdinen eta haien bertsioen zerrenda zabal batean (Go, Java, Python, etab.) zabaltzea errazteko.
FaaS bat sortzea erraza da diagrama hau jarraituz:
Funtzioa Fn CLI erabiliz inplementatzea: Fn aplikazioaren konfigurazio fitxategi bat sortzen da hautatutako txantiloian oinarrituta.
Gure funtzioa zabaltzen dugu, berriro CLI Fn erabiliz: edukiontziaren irudia biltegi jakin batean jartzen da, eta ondoren zerbitzariari irudi horren existentzia eta kokapenaren berri ematen zaio.
Fn-i funtzioak emateko printzipioa
Zerbitzaririk gabeko funtzioen tokiko instalazioa eta probak
Has gaitezen Fn instalatzen tokiko makinan. Lehenik eta behin, Docker instalatzen da, Fn-k eskatzen duen moduan. Debian/Ubuntu-n gaudela suposatuz:
Edo erabili pakete-kudeatzailea/Docker-en eraikuntza zure sistemaren arabera. Ondoren, zuzenean Fn CLI instalatzera joan zaitezke. Adibidez, kizkurra erabiliz:
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
Homebrew instalatuta daukan OSX-n bazaude, beste bide batetik joan zaitezke:
Orain prest gaude hasiera batean gure funtzioa CLI erabiliz zabaltzeko. Sinpletasuna lortzeko, abiarazteko ingurune integratua erabiliko dugu, hala nola Node:
$ fn init --runtime node --trigger http hellonode
Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.
Direktorio berri bat sortuko da hellonode gure Fn funtzioa oinarrizko konfigurazio fitxategi batzuekin gehiago garatzeko. Sortu berri den direktorioaren barruan, zure aplikazioa sor dezakezu aukeratutako hizkuntzaren edo exekuzio-denboraren estandarrak jarraituz:
# Каталог с 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-k hasierako proiektuaren egitura sortzen du, fitxategi bat sortzen du func.yaml, Fn-rako beharrezko ezarpenak dituena, eta kodearen txantiloia zuk aukeratutako hizkuntzan ezartzen du.
Node exekuzio-denboraren kasuan, honek esan nahi du:
$ 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}
})
Orain azkar probatuko dugu gure funtzioa lokalean dena nola funtzionatzen duen ikusteko.
Lehenik eta behin, Fn zerbitzaria abiaraziko dugu. Esan bezala, Fn zerbitzaria Docker edukiontzi bat da, beraz, abiarazi ondoren, Docker erregistrotik irudia hartuko du.
$ 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
Gure funtzioa exekutatzeko, "zabaldu" behar da. Horrek eskatzen du имя приложения: Fn-n, aplikazio guztiak izen-espazio gisa zehaztu behar dira erlazionatutako funtzioetarako.
Fn CLI-k fitxategia bilatuko du func.yaml funtzioa konfiguratzeko erabiliko den uneko direktorioan. Beraz, lehenik eta behin gure direktoriora joan behar duzu 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
Komandoaren irteeran ikus dezakezun bezala, Docker edukiontziaren irudi berri bat sortzen da gure funtzioa duena. Funtzioa deitzeko prest dago, eta horretarako bi modu ditugu:
Fn komandoa erabiliz invoke
bidez zuzenean deituz http
deiaren invoke Fn bidez, HTTP bidezko lana emulatzen du probak egiteko, eta hori erosoa da proba azkarrak egiteko:
Fn zerbitzariak bere funtzioak erakusten ditu 8080 atakan eta funtzioaren URLa ereduarekin bat datorrela dirudi t/app/function, baina ez guztiz. HTTP bidez, funtzio bati ez zaio zuzenean deitzen, abiarazle deritzon baten bidez baizik, zeinak, bere izenaren arabera, funtzio-deia "hasi" egiten du. Abiarazleak urtean definitzen dira `func.yml proiektua:
Dena dabil! Eskala osoko esperimentuetara pasatzeko eta gure FaaS zerbitzarian argitaratzeko garaia da!
Zerbitzaririk gabeko funtzio zerbitzuak zure azpiegituran instalatzea
Instala dezagun azkar makina birtual bat Exoscale CLI erabiliz. Oraindik konfiguratu ez baduzu, erabil dezakezu gure hasierako gida azkarra. Hau zure produktibitatea are gehiago areagotuko duen tresna polita da. Ez ahaztu Segurtasun Taldean 8080 ataka irekitzeko arau bat konfiguratu behar duzula! Komando hauek makina birtual garbi bat abiaraziko dute, gure funtzioak ostatatzeko prest:
Ondoren, ssh makina birtualean sartu eta urruneko Fn zerbitzaria instalatu dezakezu:
$ 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)
Ondoren, instalatu Docker eta Fn zerbitzaria lehendik tokiko makinan egin zen moduan, abiarazi zerbitzaria:
Fn prest dago funtzioak jasotzeko! Funtzioak urruneko zerbitzari batera transferitzeko, komandoa erabiliko dugu deploy tokiko ordenagailutik bandera kenduta --local.
Horrez gain, Fn-k Fn zerbitzariaren eta Docker erregistroaren kokapena zehaztea eskatzen du. Aukera hauek ingurune-aldagaien bidez ezar daitezke FN_API_URL и FN_REGISTRY hurrenez hurren, baina hedapenerako konfigurazioen sorrera eta kudeaketa erraz kudeatzeko modu erosoagoa ere eskaintzen du.
Fn terminoetan, hedapenerako konfigurazioa deitzen da context. Komando honek testuingurua sortuko du:
Eskuragarri dauden testuinguruak honela ikus ditzakezu:
$ fn list contexts
CURRENT NAME PROVIDER API URL REGISTRY
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
Eta aldatu honela sortu berri den testuingurura:
$ fn use context exoscale
Now using context: exoscale
Hemendik aurrera, Fn funtzioen bidalketak Docker irudiak deskargatuko ditu hautatutako DockerHub kontua erabiliz (nire kasuan - nfrankel), eta gero urruneko zerbitzariari jakinarazi (adibide honetan - http://185.19.30.175:8080) zure funtzioa duen azken irudiaren kokapenari eta bertsioari buruz.
$ 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 .
Funtzioaren bizi-zikloa Fn-en oinarritutako zerbitzaririk gabeko informatikan
Zerbitzaririk gabeko konputazioaren abantailak zure gaitasunean
Zerbitzaririk gabeko konputazioa aplikazio edo mikrozerbitzu konplexuagoekin elkarreragiten duten aplikazio baten zati independenteak azkar inplementatzeko irtenbide erosoa da.
Hau sarritan aukeratutako saltzailean blokeatzeko kostu ezkutuaren ondorioz gertatzen da, eta horrek, erabilera-kasu zehatzaren eta bolumenaren arabera, etorkizunean kostu handiagoak eta malgutasuna murriztea ekar dezake.
Hodei anitzeko eta hodei hibridoen arkitekturak ere sufritzen dute kasu honetan, zerbitzaririk gabeko konputazioa erabili nahiko zenukeen egoera batean erraz aurki dezakezulako, baina politika korporatiboengatik agian ezinezkoa izango da.
Fn erabiltzeko nahiko erraza da eta FaaS interfaze ia bera eskain dezake, gainkostu gutxirekin. Saltzaileen blokeoa kentzen du eta lokalean edo nahi duzun hodeiko soluzio hornitzaile erosoan instalatu daiteke. Programazio-lengoaia aukeratzeko askatasuna ere badago.
Artikulu honek Fn-ren oinarriak soilik biltzen ditu, baina zure exekuzio-denbora sortzea nahiko erraza da, eta arkitektura orokorra zabalagoa izan daiteke Fn karga-orekatzailea erabiliz edo babesteko proxy baten atzean Fn jarriz.