Bez serveriem nav runa par serveru fizisku trÅ«kumu. TÄ nav konteineru slepkava vai pÄrejoÅ”a tendence. Å Ä« ir jauna pieeja sistÄmu veidoÅ”anai mÄkonÄ«. Å odienas rakstÄ mÄs pieskarsimies bezserveru lietojumprogrammu arhitektÅ«rai, redzÄsim, kÄda loma ir bezserveru pakalpojumu sniedzÄjam un atvÄrtÄ koda projektiem. Visbeidzot, parunÄsim par bez servera lietoÅ”anas problÄmÄm.
Es gribu uzrakstÄ«t lietojumprogrammas (vai pat interneta veikala) servera daļu. TÄ varÄtu bÅ«t tÄrzÄÅ”ana, satura publicÄÅ”anas pakalpojums vai slodzes lÄ«dzsvarotÄjs. JebkurÄ gadÄ«jumÄ bÅ«s daudz galvassÄpju: jums bÅ«s jÄsagatavo infrastruktÅ«ra, jÄnosaka lietojumprogrammu atkarÄ«bas un jÄdomÄ par resursdatora operÄtÄjsistÄmu. Tad jums bÅ«s jÄatjaunina mazie komponenti, kas neietekmÄ pÄrÄjÄ monolÄ«ta darbÄ«bu. NeaizmirsÄ«sim par mÄrogoÅ”anu zem slodzes.
Ko darÄ«t, ja mÄs Åemam Ä«slaicÄ«gus konteinerus, kuros vajadzÄ«gÄs atkarÄ«bas jau ir iepriekÅ” instalÄtas, un paÅ”i konteineri ir izolÄti viens no otra un no resursdatora OS? MÄs sadalÄ«sim monolÄ«tu mikropakalpojumos, no kuriem katrs var tikt atjauninÄts un mÄrogots neatkarÄ«gi no citiem. Ievietojot kodu Å”ÄdÄ konteinerÄ, es varu to palaist jebkurÄ infrastruktÅ«rÄ. Jau labÄk.
Ko darÄ«t, ja nevÄlaties konfigurÄt konteinerus? Es nevÄlos domÄt par lietojumprogrammas mÄrogoÅ”anu. Es nevÄlos maksÄt par tukÅ”gaitas konteineriem, kad pakalpojuma slodze ir minimÄla. Es gribu uzrakstÄ«t kodu. KoncentrÄjieties uz biznesa loÄ£iku un ievediet produktus tirgÅ« gaismas ÄtrumÄ.
Å Ädas domas mani noveda pie skaitļoÅ”anas bez serveriem. Bez servera Å”ajÄ gadÄ«jumÄ nozÄ«mÄ nevis serveru fiziska neesamÄ«ba, bet infrastruktÅ«ras pÄrvaldÄ«bas galvassÄpju neesamÄ«ba.
Ideja ir tÄda, ka lietojumprogrammu loÄ£ika ir sadalÄ«ta neatkarÄ«gÄs funkcijÄs. ViÅiem ir notikumu struktÅ«ra. Katra funkcija veic vienu āmikrouzdevumuā. Viss, kas no izstrÄdÄtÄja tiek prasÄ«ts, ir ielÄdÄt funkcijas mÄkoÅa nodroÅ”inÄtÄja nodroÅ”inÄtajÄ konsolÄ un saistÄ«t tÄs ar notikumu avotiem. Kods tiks izpildÄ«ts pÄc pieprasÄ«juma automÄtiski sagatavotÄ konteinerÄ, un es maksÄÅ”u tikai par izpildes laiku.
PaskatÄ«simies, kÄ tagad izskatÄ«sies lietojumprogrammu izstrÄdes process.
No izstrÄdÄtÄja puses
IepriekÅ” mÄs sÄkÄm runÄt par pieteikumu interneta veikalam. TradicionÄlajÄ pieejÄ sistÄmas galveno loÄ£iku veic monolÄ«ts pielietojums. Un serveris ar lietojumprogrammu pastÄvÄ«gi darbojas, pat ja nav slodzes.
Lai pÄrietu uz bez servera, mÄs sadalÄm lietojumprogrammu mikrouzdevumos. Katrai no tÄm mÄs rakstÄm savu funkciju. Funkcijas ir neatkarÄ«gas viena no otras un neuzglabÄ stÄvokļa informÄciju (bezvalsts). Tie var bÅ«t pat rakstÄ«ti dažÄdÄs valodÄs. Ja kÄds no tiem ānokrÄ«tā, visa lietojumprogramma neapstÄsies. Lietojumprogrammas arhitektÅ«ra izskatÄ«sies Å”Ädi:
SadalÄ«jums funkcijÄs programmÄ Serverless ir lÄ«dzÄ«gs darbam ar mikropakalpojumiem. Bet mikropakalpojums var veikt vairÄkus uzdevumus, un ideÄlÄ gadÄ«jumÄ funkcijai vajadzÄtu veikt vienu. IedomÄsimies, ka uzdevums ir apkopot statistiku un parÄdÄ«t to pÄc lietotÄja pieprasÄ«juma. Mikropakalpojumu pieejÄ uzdevumu veic viens pakalpojums ar diviem ieejas punktiem: rakstÄ«Å”anu un lasÄ«Å”anu. Bezserveru skaitļoÅ”anÄ tÄs bÅ«s divas dažÄdas funkcijas, kas nav saistÄ«tas viena ar otru. IzstrÄdÄtÄjs ietaupa skaitļoÅ”anas resursus, ja, piemÄram, statistika tiek atjauninÄta biežÄk, nekÄ tiek lejupielÄdÄta.
Bezserveru funkcijas ir jÄizpilda Ä«sÄ laika periodÄ (taimauts), ko nosaka pakalpojumu sniedzÄjs. PiemÄram, AWS taimauts ir 15 minÅ«tes. Tas nozÄ«mÄ, ka ilgmūžīgÄs funkcijas bÅ«s jÄmaina, lai tÄs atbilstu prasÄ«bÄm ā tas atŔķir Serverless no citÄm mÅ«sdienÄs populÄrajÄm tehnoloÄ£ijÄm (konteineri un platforma kÄ pakalpojums).
Katrai funkcijai pieŔķiram notikumu. Notikums ir darbÄ«bas izraisÄ«tÄjs:
Notikums Darbība, ko funkcija veic
Produkta attÄls ir augÅ”upielÄdÄts repozitorijÄ.
Saspiediet attÄlu un augÅ”upielÄdÄjiet to direktorijÄ
FiziskÄ veikala adrese ir atjauninÄta datu bÄzÄ
IelÄdÄjiet jaunu atraÅ”anÄs vietu kartÄs
Klients maksÄ par preci
SÄciet maksÄjumu apstrÄdi
Notikumi var bÅ«t HTTP pieprasÄ«jumi, straumÄÅ”anas dati, ziÅojumu rindas un tÄ tÄlÄk. Notikumu avoti ir datu izmaiÅas vai gadÄ«jumi. TurklÄt funkcijas var aktivizÄt taimeris.
ArhitektÅ«ra tika izstrÄdÄta, un lietojumprogramma gandrÄ«z kļuva bez servera. TÄlÄk mÄs ejam pie pakalpojumu sniedzÄja.
No pakalpojumu sniedzÄja puses
Parasti bezserveru skaitļoÅ”anu piedÄvÄ mÄkoÅpakalpojumu sniedzÄji. Tos sauc dažÄdi: Azure Functions, AWS Lambda, Google Cloud Functions, IBM Cloud Functions.
MÄs izmantosim pakalpojumu, izmantojot pakalpojumu sniedzÄja konsoli vai personÄ«go kontu. Funkcijas kodu var lejupielÄdÄt vienÄ no Å”iem veidiem:
rakstÄ«t kodu iebÅ«vÄtajos redaktoros, izmantojot tÄ«mekļa konsoli,
lejupielÄdÄt arhÄ«vu ar kodu,
strÄdÄt ar publiskÄm vai privÄtÄm git krÄtuvÄm.
Å eit mÄs iestatÄm notikumus, kas izsauc funkciju. Notikumu kopas dažÄdiem pakalpojumu sniedzÄjiem var atŔķirties.
Pakalpojumu sniedzÄjs savÄ infrastruktÅ«rÄ izveidoja un automatizÄja Function as a Service (FaaS) sistÄmu:
Funkcijas kods nonÄk krÄtuvÄ pakalpojumu sniedzÄja pusÄ.
Kad notiek notikums, konteineri ar sagatavotu vidi tiek automÄtiski izvietoti serverÄ«. Katrai funkcijas instancei ir savs izolÄts konteiners.
No krÄtuves funkcija tiek nosÅ«tÄ«ta uz konteineru, tiek aprÄÄ·inÄta un atgriež rezultÄtu.
Pieaug paralÄlo pasÄkumu skaits ā pieaug konteineru skaits. SistÄma automÄtiski mÄrogojas. Ja lietotÄji nepiekļūst funkcijai, tÄ bÅ«s neaktÄ«va.
Pakalpojumu sniedzÄjs iestata konteineriem dÄ«kstÄves laiku - ja Å”ajÄ laikÄ funkcijas konteinerÄ neparÄdÄs, tas tiek iznÄ«cinÄts.
TÄdÄ veidÄ mÄs izÅemam bez servera no kastes. MÄs maksÄsim par pakalpojumu, izmantojot pay-as-you-go modeli un tikai par tÄm funkcijÄm, kuras tiek izmantotas, un tikai par laiku, kad tÄs tika izmantotas.
Lai iepazÄ«stinÄtu izstrÄdÄtÄjus ar pakalpojumu, pakalpojumu sniedzÄji piedÄvÄ lÄ«dz 12 mÄneÅ”iem bezmaksas testÄÅ”anu, taÄu ierobežo kopÄjo aprÄÄ·ina laiku, pieprasÄ«jumu skaitu mÄnesÄ«, lÄ«dzekļus vai enerÄ£ijas patÄriÅu.
GalvenÄ priekÅ”rocÄ«ba darbÄ ar pakalpojumu sniedzÄju ir iespÄja neuztraukties par infrastruktÅ«ru (serveriem, virtuÄlajÄm maŔīnÄm, konteineriem). No savas puses pakalpojumu sniedzÄjs var ieviest FaaS gan izmantojot savus izstrÄdnes, gan izmantojot atvÄrtÄ pirmkoda rÄ«kus. ParunÄsim par tiem tÄlÄk.
No atvÄrtÄ koda puses
AtvÄrtÄ koda kopiena pÄdÄjos pÄris gadus ir aktÄ«vi strÄdÄjusi pie bezserveru rÄ«kiem. LielÄkie tirgus dalÄ«bnieki sniedz ieguldÄ«jumu arÄ« bezserveru platformu attÄ«stÄ«bÄ:
google piedÄvÄ izstrÄdÄtÄjiem savu atvÄrtÄ pirmkoda rÄ«ku - IzveicÄ«gs. TÄs izstrÄdÄ piedalÄ«jÄs IBM, RedHat, Pivotal un SAP;
IBM strÄdÄja uz bez servera platformas OpenWhisk, kas pÄc tam kļuva par Apache fonda projektu;
Notiek arÄ« attÄ«stÄ«ba bezserveru ietvaru virzienÄ. Kubeless Šø SadalÄ«Å”anÄs izvietots iepriekÅ” sagatavotos Kubernetes klasteros, OpenFaaS strÄdÄ gan ar Kubernetes, gan ar Docker Swarm. Ietvars darbojas kÄ sava veida kontrolieris - pÄc pieprasÄ«juma tas sagatavo izpildlaika vidi klastera iekÅ”ienÄ, pÄc tam palaiž tur funkciju.
Ietvari ļauj konfigurÄt rÄ«ku atbilstoÅ”i jÅ«su vajadzÄ«bÄm. TÄtad programmÄ Kubeless izstrÄdÄtÄjs var konfigurÄt funkcijas izpildes taimautu (noklusÄjuma vÄrtÄ«ba ir 180 sekundes). MÄÄ£inot atrisinÄt aukstÄs palaiÅ”anas problÄmu, ŔķelÅ”anÄs iesaka dažus konteinerus pastÄvÄ«gi darbinÄt (lai gan tas rada resursu dÄ«kstÄves izmaksas). Un OpenFaaS piedÄvÄ trigeru komplektu katrai gaumei un krÄsai: HTTP, Kafka, Redis, MQTT, Cron, AWS SQS, NAT un citus.
NorÄdÄ«jumi par darba sÄkÅ”anu ir atrodami ietvaru oficiÄlajÄ dokumentÄcijÄ. Lai strÄdÄtu ar viÅiem, ir nepiecieÅ”ams nedaudz vairÄk prasmju nekÄ strÄdÄjot ar pakalpojumu sniedzÄju ā tÄ ir vismaz iespÄja palaist Kubernetes klasteru, izmantojot CLI. MaksimÄli iekļaujiet citus atvÄrtÄ pirmkoda rÄ«kus (piemÄram, Kafka rindu pÄrvaldnieku).
NeatkarÄ«gi no tÄ, kÄ mÄs strÄdÄjam ar Serverless ā caur pakalpojumu sniedzÄju vai izmantojot atvÄrtÄ pirmkoda palÄ«dzÄ«bu, mÄs saÅemsim vairÄkas bezserveru pieejas priekÅ”rocÄ«bas un trÅ«kumus.
No priekŔrocību un mīnusu viedokļa
Serverless izstrÄdÄ idejas par konteineru infrastruktÅ«ru un mikropakalpojumu pieeju, kurÄ komandas var strÄdÄt daudzvalodu režīmÄ, nepiesaistÄ«tas vienai platformai. SistÄmas izveide ir vienkÄrÅ”ota, un kļūdas ir vieglÄk labot. Mikropakalpojumu arhitektÅ«ra ļauj sistÄmai pievienot jaunu funkcionalitÄti daudz ÄtrÄk nekÄ monolÄ«tas lietojumprogrammas gadÄ«jumÄ.
Bez servera vÄl vairÄk samazina izstrÄdes laiku, ļaujot izstrÄdÄtÄjam koncentrÄties tikai uz lietojumprogrammas biznesa loÄ£iku un kodÄÅ”anu. RezultÄtÄ tiek samazinÄts laiks, kas nepiecieÅ”ams izstrÄdei tirgÅ«.
KÄ bonusu mÄs saÅemam automÄtisku slodzes mÄrogoÅ”anu, un mÄs maksÄjam tikai par izmantotajiem resursiem un tikai tajÄ laikÄ, kad tie tiek izmantoti.
TÄpat kÄ jebkurai tehnoloÄ£ijai, bez servera ir trÅ«kumi.
PiemÄram, Å”Äds trÅ«kums var bÅ«t aukstÄ palaiÅ”anas laiks (vidÄji lÄ«dz 1 sekundei tÄdÄm valodÄm kÄ JavaScript, Python, Go, Java, Ruby).
No vienas puses, patiesÄ«bÄ aukstÄ palaiÅ”anas laiks ir atkarÄ«gs no daudziem mainÄ«gajiem lielumiem: valodas, kurÄ tiek rakstÄ«ta funkcija, bibliotÄku skaita, koda daudzuma, komunikÄcijas ar papildu resursiem (tÄdÄm paÅ”Äm datu bÄzÄm vai autentifikÄcijas serveriem). TÄ kÄ izstrÄdÄtÄjs kontrolÄ Å”os mainÄ«gos, viÅÅ” var samazinÄt startÄÅ”anas laiku. Bet, no otras puses, izstrÄdÄtÄjs nevar kontrolÄt konteinera palaiÅ”anas laiku - tas viss ir atkarÄ«gs no pakalpojumu sniedzÄja.
AukstÄ palaiÅ”ana var pÄrvÄrsties par siltu palaiÅ”anu, ja funkcija atkÄrtoti izmanto konteineru, kas palaists iepriekÅ”ÄjÄ notikuma rezultÄtÄ. Å Äda situÄcija radÄ«sies trÄ«s gadÄ«jumos:
ja klienti bieži izmanto pakalpojumu un palielinÄs zvanu skaits uz funkciju;
ja pakalpojumu sniedzÄjs, platforma vai ietvars ļauj jums pastÄvÄ«gi darbinÄt dažus konteinerus;
ja izstrÄdÄtÄjs palaiž funkcijas ar taimeri (teiksim, ik pÄc 3 minÅ«tÄm).
DaudzÄm lietojumprogrammÄm aukstÄ palaiÅ”ana nav problÄma. Å eit jums jÄbalstÄs uz pakalpojuma veidu un uzdevumiem. Sekundes palaiÅ”anas aizkave ne vienmÄr ir kritiska biznesa lietojumprogrammai, taÄu tÄ var kļūt kritiska medicÄ«nas pakalpojumiem. Å ÄdÄ gadÄ«jumÄ pieeja bez servera, visticamÄk, vairs nebÅ«s piemÄrota.
NÄkamais serverless trÅ«kums ir funkcijas Ä«sais kalpoÅ”anas laiks (taimauts, kura laikÄ funkcija ir jÄizpilda).
Bet, ja jums ir jÄstrÄdÄ ar ilgstoÅ”iem uzdevumiem, varat izmantot hibrÄ«da arhitektÅ«ru - apvienojiet bez servera ar citu tehnoloÄ£iju.
Ne visas sistÄmas varÄs strÄdÄt, izmantojot bezserveru shÄmu.
Dažas lietojumprogrammas izpildes laikÄ joprojÄm saglabÄs datus un stÄvokli. Dažas arhitektÅ«ras paliks monolÄ«tas, un dažas funkcijas bÅ«s ilgstoÅ”as. TomÄr (tÄpat kÄ mÄkoÅtehnoloÄ£ijas un pÄc tam konteineri) bez servera ir tehnoloÄ£ija ar lielu nÄkotni.
Å ajÄ sakarÄ es vÄlos vienmÄrÄ«gi pÄriet uz jautÄjumu par bezserveru pieejas izmantoÅ”anu.
No pieteikuma puses
2018. gadÄ bezserveru lietojuma procentuÄlÄ daļa pieauga pusotru reizi. Starp uzÅÄmumiem, kas jau ir ieviesuÅ”i tehnoloÄ£iju savos pakalpojumos, ir tÄdi tirgus giganti kÄ Twitter, PayPal, Netflix, T-Mobile, Coca-Cola. TajÄ paÅ”Ä laikÄ jums jÄsaprot, ka Serverless nav panaceja, bet gan rÄ«ks noteiktu problÄmu loka risinÄÅ”anai:
Samaziniet resursu dÄ«kstÄves laiku. Nav nepiecieÅ”ams pastÄvÄ«gi uzturÄt virtuÄlo maŔīnu pakalpojumiem, kuriem ir maz zvanu.
ApstrÄdÄjiet datus lidojumÄ. Saspiest attÄlus, izgriezt fonus, mainÄ«t video kodÄjumu, strÄdÄt ar IoT sensoriem, veikt matemÄtiskas darbÄ«bas.
āSalÄ«mÄā citus pakalpojumus. Git repozitorijs ar iekÅ”ÄjÄm programmÄm, tÄrzÄÅ”anas robots Slack ar Jira un kalendÄrs.
SabalansÄjiet slodzi. ApskatÄ«sim Å”eit tuvÄk.
PieÅemsim, ka ir pakalpojums, kas piesaista 50 cilvÄkus. Zem tÄ atrodas virtuÄlÄ maŔīna ar vÄju aparatÅ«ru. Ik pa laikam pakalpojuma slodze ievÄrojami palielinÄs. Tad vÄja aparatÅ«ra nevar tikt galÄ.
SistÄmÄ varat iekļaut balansÄtÄju, kas sadalÄ«s slodzi, piemÄram, trÄ«s virtuÄlajÄs maŔīnÄs. Å ajÄ posmÄ mÄs nevaram precÄ«zi paredzÄt slodzi, tÄpÄc mÄs paturam noteiktu resursu daudzumu ārezervÄā. Un mÄs pÄrmaksÄjam par dÄ«kstÄvi.
Å ÄdÄ situÄcijÄ mÄs varam optimizÄt sistÄmu, izmantojot hibrÄ«da pieeju: atstÄjam vienu virtuÄlo maŔīnu aiz slodzes balansÄtÄja un ievietojam saiti uz bez servera galapunktu ar funkcijÄm. Ja slodze pÄrsniedz slieksni, balansÄtÄjs palaiž funkciju gadÄ«jumus, kas pÄrÅem daļu no pieprasÄ«juma apstrÄdes.
TÄdÄjÄdi Serverless var izmantot tur, kur nepiecieÅ”ams apstrÄdÄt lielu pieprasÄ«jumu skaitu ne pÄrÄk bieži, bet intensÄ«vi. Å ajÄ gadÄ«jumÄ vairÄku funkciju palaiÅ”ana 15 minÅ«tes ir izdevÄ«gÄk nekÄ visu laiku uzturÄt virtuÄlo maŔīnu vai serveri.
Izmantojot visas bezserveru skaitļoÅ”anas priekÅ”rocÄ«bas, pirms ievieÅ”anas vispirms ir jÄizvÄrtÄ lietojumprogrammas loÄ£ika un jÄsaprot, kÄdas problÄmas bez servera var atrisinÄt konkrÄtÄ gadÄ«jumÄ.
Bez servera un Selectel
Selectel mÄs jau esam vienkÄrÅ”ots darbs ar Kubernetes izmantojot mÅ«su vadÄ«bas paneli. Tagad mÄs veidojam paÅ”i savu FaaS platformu. MÄs vÄlamies, lai izstrÄdÄtÄji varÄtu atrisinÄt savas problÄmas, izmantojot bez servera, izmantojot Ärtu, elastÄ«gu saskarni.
Ja jums ir idejas par to, kÄdai vajadzÄtu bÅ«t ideÄlajai FaaS platformai un kÄ vÄlaties izmantot bez servera savos projektos, dalieties ar tÄm komentÄros. IzstrÄdÄjot platformu, mÄs Åemsim vÄrÄ jÅ«su vÄlmes.