Bez servera uz plauktiem

Bez servera uz plauktiem
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:

Bez servera uz plauktiem
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.

Bez servera uz plauktiem

Pakalpojumu sniedzējs savā infrastruktūrā izveidoja un automatizēja Function as a Service (FaaS) sistēmu:

  1. Funkcijas kods nonāk krātuvē pakalpojumu sniedzēja pusē.
  2. Kad notiek notikums, konteineri ar sagatavotu vidi tiek automātiski izvietoti serverī. Katrai funkcijas instancei ir savs izolēts konteiners.
  3. No krātuves funkcija tiek nosūtīta uz konteineru, tiek aprēķināta un atgriež rezultātu.
  4. 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.
  5. 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;
  • microsoft daļēji atvēra platformas kodu Azure funkcijas.

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.

Bez servera uz plauktiem
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.
 
Rakstā izmantotie materiāli:

Avots: www.habr.com

Pievieno komentāru