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:
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,
Ö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.
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:
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 þ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:
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:
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:
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 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 .
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.