Bezservera skaitļoÅ”ana ir viena no redzamÄkajÄm mÄkoÅdatoÅ”anas tendencÄm. DarbÄ«bas pamatprincips ir tÄds, ka infrastruktÅ«ra nav DevOps, bet pakalpojumu sniedzÄja rÅ«pes. Resursu mÄrogoÅ”ana automÄtiski pielÄgojas slodzei, un tai ir augsts izmaiÅu Ätrums.
VÄl viena izplatÄ«ta iezÄ«me ir tendence samazinÄt un fokusÄt kodu, tÄpÄc bezservera skaitļoÅ”anu dažreiz sauc par funkciju kÄ pakalpojumu (FaaS).
VÄsturiski pirmais mÄkoÅa pakalpojumu sniedzÄjs, kas piedÄvÄja FaaS ar AWS Lambda, bija Amazon, tÄpÄc arÄ« nosaukums. ArÄ« citi mÄkoÅpakalpojumu sniedzÄji piedÄvÄ lÄ«dzÄ«gus pakalpojumus:
Google mÄkoÅfunkcijas
Azure Functions no Microsoft
Visi Å”ie uzÅÄmumi nodroÅ”ina skaitļoÅ”anu bez serveriem, automÄtisko mÄrogoÅ”anu un maksÄ tikai par to, ko jÅ«s faktiski izmantojat, taÄu tie piesaista klientus viÅu patentÄtajam produktam. TomÄr bezservera skaitļoÅ”anai ir bezmaksas un atvÄrtÄ pirmkoda alternatÄ«vas. Ir vÄrts atzÄ«mÄt:
Pavasara mÄkoÅu funkcijas, kas ir daļa no diezgan bagÄtÄ«gas Spring Framework ekosistÄmas, ko var izmantot arÄ« kÄ fasÄdi AWS Lambda, Azure Functions un OpenWhisk,
Visi no tiem ir pilnÄ«gi neatkarÄ«gi no mÄkoÅiem, tas ir, tos var instalÄt jebkurÄ mÄkonÄ«, tostarp jÅ«su, publiskajÄ vai privÄtajÄ, un, protams, Exoscale.
KÄ darbojas Fn projekts
Fn pilnÄ«bÄ balstÄs uz Docker, sastÄv no diviem galvenajiem komponentiem:
CLI programma, kas izstrÄdÄta, lai pÄrvaldÄ«tu visus Fn infrastruktÅ«ras aspektus un mijiedarbojas ar Fn serveri,
Pats Fn serveris ir parasta lietojumprogramma, kas iepakota Docker konteinerÄ.
Fn izvietotÄs funkcijas tiek izpildÄ«tas arÄ« atseviŔķos konteineros, kas ļauj atbalstÄ«t daudzas programmÄÅ”anas valodas, piemÄram... Clojure!
Funkciju argumenti tiek nodoti standarta ievadei (STDIN), rezultÄti tiek ierakstÄ«ti standarta izvadÄ (STDOUT). Ja argumenti vai atgrieÅ”anas vÄrtÄ«bas nav vienkÄrÅ”as vÄrtÄ«bas (piemÄram, JSON objekts), tos var konvertÄt, izmantojot abstrakcijas slÄni, ko nodroÅ”ina pats Fn funkciju izstrÄdes komplekta (FDK) veidÄ.
ÄrtÄ«bas labad tiek piedÄvÄti iebÅ«vÄti veidÅu komplekti, kas atvieglo FaaS izvietoÅ”anu plaÅ”Ä dažÄdu valodu un to versiju sarakstÄ (Go, dažÄdas Java, Python versijas utt.).
FaaS izveidoÅ”ana ir vienkÄrÅ”a, sekojot Å”ai diagrammai:
Funkcijas izvietoÅ”ana, izmantojot Fn CLI: tiek izveidots lietojumprogrammas konfigurÄcijas fails Fn, pamatojoties uz atlasÄ«to veidni.
MÄs izlaižam savu funkciju, atkal izmantojot CLI Fn: konteinera attÄls tiek ievietots noteiktÄ repozitorijÄ, pÄc kura serveris tiek informÄts par Ŕī attÄla esamÄ«bu un izvietojumu.
Funkciju piegÄdes princips Fn
Bezserveru funkciju lokÄla uzstÄdÄ«Å”ana un testÄÅ”ana
SÄksim Fn instalÄÅ”anu vietÄjÄ datorÄ. PirmkÄrt, tiek instalÄts Docker, kÄ to pieprasa Fn. PieÅemot, ka mÄs izmantojam Debian/Ubuntu:
Vai arÄ« izmantojiet pakotÅu pÄrvaldnieku/Docker bÅ«vÄjumu atbilstoÅ”i savai sistÄmai. PÄc tam varat pÄriet tieÅ”i uz Fn CLI instalÄÅ”anu. PiemÄram, izmantojot ÄokuroÅ”anÄs:
$ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
Ja izmantojat operÄtÄjsistÄmu OSX ar instalÄtu Homebrew, varat izvÄlÄties citu ceļu:
Tagad esam gatavi sÄkotnÄji izvietot savu funkciju, izmantojot CLI. VienkÄrŔības labad mÄs izmantosim iebÅ«vÄtu palaiÅ”anas vidi, piemÄram, Node:
$ fn init --runtime node --trigger http hellonode
Creating function at: /hellonode
Function boilerplate generated.
func.yaml created.
Tiks izveidots jauns direktorijs hellonode lai tÄlÄk attÄ«stÄ«tu mÅ«su Fn funkciju ar dažiem pamata konfigurÄcijas failiem. JaunizveidotajÄ direktorijÄ varat izveidot savu lietojumprogrammu, ievÄrojot jÅ«su izvÄlÄtÄs valodas vai izpildlaika standartus:
# ŠŠ°ŃŠ°Š»Š¾Š³ Ń 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 izveido sÄkotnÄjo projekta struktÅ«ru, izveido failu func.yaml, kas satur nepiecieÅ”amos Fn iestatÄ«jumus, un iestata koda veidni jÅ«su izvÄlÄtajÄ valodÄ.
Node izpildlaika gadÄ«jumÄ tas nozÄ«mÄ:
$ 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}
})
Tagad mÄs Ätri pÄrbaudÄ«sim mÅ«su funkciju lokÄli, lai redzÄtu, kÄ viss darbojas.
PirmkÄrt, mÄs sÄksim Fn serveri. KÄ jau minÄts, Fn serveris ir Docker konteiners, tÄpÄc pÄc palaiÅ”anas tas aizies un paÅems attÄlu no Docker reÄ£istra.
Lai izpildÄ«tu mÅ«su funkciju, tai ir jÄbÅ«t āizrullÄtaiā. Tas prasa ŠøŠ¼Ń ŠæŃŠøŠ»Š¾Š¶ŠµŠ½ŠøŃ: Fn valodÄ visas lietojumprogrammas ir jÄnorÄda kÄ saistÄ«to funkciju nosaukumvietas.
Fn CLI meklÄs failu func.yaml paÅ”reizÄjÄ direktorijÄ, kas tiks izmantota funkcijas konfigurÄÅ”anai. TÄpÄc vispirms jums jÄiet uz mÅ«su direktoriju 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
KÄ redzat no komandas izvades, tiek izveidots jauns Docker konteinera attÄls, kas satur mÅ«su funkciju. Funkcija ir gatava izsaukÅ”anai, un mums ir divi veidi, kÄ to izdarÄ«t:
izmantojot Fn komandu invoke
zvanot tieŔi pa http
Zvans invoke izmantojot Fn, tas vienkÄrÅ”i emulÄ darbu, izmantojot HTTP testiem, kas ir Ärti Ätrai pÄrbaudei:
Fn serveris atklÄj savas funkcijas portÄ 8080, un Ŕķiet, ka funkcijas URL atbilst modelim t/app/function, bet ne pilnÄ«bÄ. Izmantojot HTTP, funkcija netiek izsaukta tieÅ”i, bet ar tÄ saukto trigeri, kas pÄc nosaukuma āsÄkā funkcijas izsaukumu. Trigeri ir definÄti `func.yml projekts:
Viss darbojas! Ir pienÄcis laiks pÄriet uz pilna mÄroga eksperimentiem un publicÄt mÅ«su FaaS serverÄ«!
Bezserveru funkciju pakalpojumu instalÄÅ”ana savÄ infrastruktÅ«rÄ
Ätri instalÄsim virtuÄlo maŔīnu, izmantojot Exoscale CLI. Ja vÄl neesat to iestatÄ«jis, varat to izmantot mÅ«su ÄtrÄ darba sÄkÅ”anas rokasgrÄmata. Å is ir forÅ”s rÄ«ks, kas vÄl vairÄk palielinÄs jÅ«su produktivitÄti. Neaizmirstiet, ka jums ir jÄkonfigurÄ noteikums, lai droŔības grupÄ atvÄrtu portu 8080! Å Ä«s komandas palaidÄ«s tÄ«ru virtuÄlo maŔīnu, kas ir gatava mitinÄt mÅ«su funkcijas:
PÄc tam varat ssh virtuÄlajÄ maŔīnÄ un instalÄt attÄlo Fn serveri:
$ 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)
PÄc tam instalÄjiet Docker un Fn serveri tÄdÄ paÅ”Ä veidÄ, kÄ tas jau tika darÄ«ts vietÄjÄ maŔīnÄ, startÄjiet serveri:
Fn ir gatavs uztvert funkcijas! MÄrÄ·tiecÄ«gai funkciju pÄrsÅ«tÄ«Å”anai uz attÄlo serveri mÄs izmantosim komandu deploy no vietÄjÄ datora, izlaižot karogu --local.
TurklÄt Fn ir jÄnorÄda Fn servera un Docker reÄ£istra atraÅ”anÄs vieta. Å Ä«s opcijas var iestatÄ«t, izmantojot vides mainÄ«gos FN_API_URL Šø FN_REGISTRY attiecÄ«gi, bet arÄ« piedÄvÄ ÄrtÄku veidu, kÄ viegli pÄrvaldÄ«t izvietoÅ”anai paredzÄto konfigurÄciju izveidi un pÄrvaldÄ«bu.
Fn izteiksmÄ tiek izsaukta izvietoÅ”anas konfigurÄcija context. Å Ä« komanda izveidos kontekstu:
$ fn list contexts
CURRENT NAME PROVIDER API URL REGISTRY
default default http://localhost:8080/
exoscale default http://185.19.30.175:8080 nfrankel
Un pÄrslÄdzieties uz kontekstu, kas tikko tika izveidots Å”Ädi:
$ fn use context exoscale
Now using context: exoscale
No Ŕī brīža Fn funkcijas piegÄde lejupielÄdÄs Docker attÄlus, izmantojot atlasÄ«to DockerHub kontu (manÄ gadÄ«jumÄ - nfrankel), un pÄc tam paziÅojiet attÄlajam serverim (Å”ajÄ piemÄrÄ - http://185.19.30.175:8080) par jaunÄkÄ attÄla, kurÄ ir jÅ«su funkcija, atraÅ”anÄs vietu un versiju.
$ 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 .
Funkcijas dzÄ«ves cikls uz Fn balstÄ«tÄ bezservera skaitļoÅ”anÄ
Bez servera skaitļoŔanas priekŔrocības ar jūsu paŔu jaudu
Bezserveru skaitļoÅ”ana ir Ärts risinÄjums, lai Ätri ieviestu neatkarÄ«gas lietojumprogrammas daļas, kas mijiedarbojas ar sarežģītÄkÄm lietojumprogrammÄm vai mikropakalpojumiem.
Tas bieži vien ir saistÄ«ts ar slÄptajÄm izmaksÄm, kas saistÄ«tas ar piesaisti izvÄlÄtajam pÄrdevÄjam, kas atkarÄ«bÄ no konkrÄtÄ lietoÅ”anas gadÄ«juma un apjoma var radÄ«t lielÄkas izmaksas un samazinÄt elastÄ«bu nÄkotnÄ.
Å ajÄ gadÄ«jumÄ cieÅ” arÄ« vairÄku mÄkoÅu un hibrÄ«dmÄkoÅu arhitektÅ«ras, jo var viegli nonÄkt situÄcijÄ, kad gribÄtos izmantot bezserveru skaitļoÅ”anu, taÄu korporatÄ«vo politiku dÄļ tas var nebÅ«t iespÄjams.
Fn ir diezgan viegli lietojams, un tas var nodroÅ”inÄt gandrÄ«z tÄdu paÅ”u FaaS interfeisu ar nelielÄm izmaksÄm. Tas novÄrÅ” jebkÄdu pÄrdevÄja bloÄ·ÄÅ”anu, un to var instalÄt lokÄli vai jebkurÄ ÄrtÄ mÄkoÅa risinÄjumu nodroÅ”inÄtÄjÄ pÄc jÅ«su izvÄles. ProgrammÄÅ”anas valodas izvÄlÄ ir arÄ« brÄ«vÄ«ba.
Å ajÄ rakstÄ ir apskatÄ«ti tikai Fn pamati, taÄu sava izpildlaika izveide ir diezgan vienkÄrÅ”a, un vispÄrÄjo arhitektÅ«ru var izvietot plaÅ”Äk, izmantojot Fn slodzes balansÄtÄju vai novietojot Fn aiz starpniekservera aizsardzÄ«bai.