Äau Habr! PiedÄvÄju jÅ«su uzmanÄ«bai raksta tulkojumu
Å oreiz āgribÄju un pÄrtulkojuā gan servisa tÄ«kla komponentu, gan datu plaknes, gan vadÄ«bas plaknes aprakstu. Å is apraksts man Ŕķita saprotamÄkais un interesantÄkais, un pats galvenais, kas noveda pie izpratnes āVai tas vispÄr ir vajadzÄ«gs?ā
TÄ kÄ ideja par "Servisa tÄ«klu" pÄdÄjo divu gadu laikÄ ir kļuvusi arvien populÄrÄka (sÄkotnÄjais raksts 10) un dalÄ«bnieku skaits telpÄ ir palielinÄjies, esmu novÄrojis proporcionÄlu apjukuma pieaugumu starp visiem tehnoloÄ£iju kopiena par to, kÄ salÄ«dzinÄt un pretstatÄ«t dažÄdus risinÄjumus.
SituÄciju vislabÄk var apkopot Å”ÄdÄs tvÄ«tu sÄrijÄs, kuras rakstÄ«ju jÅ«lijÄ:
Pakalpojuma tÄ«kla apjukums Nr. 1: Linkerd ~ = Nginx ~ = Haproxy ~ = sÅ«tnis. Neviens no viÅiem nav vienÄds ar Istio. Istio ir kaut kas pavisam cits. 1/
PirmÄs ir vienkÄrÅ”i datu plaknes. PaÅ”i paÅ”i viÅi neko nedara. ViÅiem jÄbÅ«t noskaÅotiem kaut kam vairÄk. 2/
Istio ir vadÄ«bas plaknes piemÄrs, kas savieno daļas. Å is ir vÄl viens slÄnis. /beigas
IepriekÅ”Äjie tvÄ«ti piemin vairÄkus dažÄdus projektus (Linkerd, NGINX, HAProxy, Envoy un Istio), bet vÄl svarÄ«gÄk ir iepazÄ«stinÄt ar vispÄrÄ«gajiem datu plaknes, pakalpojumu tÄ«kla un vadÄ«bas plaknes jÄdzieniem. Å ajÄ ierakstÄ es sperÅ”u soli atpakaļ un ļoti augstÄ lÄ«menÄ« runÄÅ”u par to, ko es domÄju ar jÄdzieniem "datu plakne" un "vadÄ«bas plakne", un pÄc tam runÄÅ”u par to, kÄ termini attiecas uz tvÄ«tÄ minÄtajiem projektiem.
Kas īsti ir servisa tīkls?
1. attÄls. Servisa tÄ«kla pÄrskats
Skaitlis 1 ilustrÄ pakalpojumu tÄ«kla jÄdzienu tÄs visvienkÄrÅ”ÄkajÄ lÄ«menÄ«. Ir Äetri pakalpojumu klasteri (AD). Katrs pakalpojuma gadÄ«jums ir saistÄ«ts ar vietÄjo starpniekserveri. Visa tÄ«kla trafika (HTTP, REST, gRPC, Redis u.c.) no vienas lietojumprogrammas instances caur vietÄjo starpniekserveri tiek nodota atbilstoÅ”ajÄm ÄrÄjo pakalpojumu klasteriem. TÄdÄ veidÄ lietojumprogrammas instance nezina tÄ«klu kopumÄ un zina tikai savu vietÄjo starpniekserveri. Faktiski izplatÄ«tÄs sistÄmas tÄ«kls tika noÅemts no pakalpojuma.
Datu plakne
Pakalpojuma tÄ«klÄ starpniekserveris, kas atrodas lokÄli lietojumprogrammai, veic Å”Ädus uzdevumus:
- Pakalpojuma atklÄÅ”ana. KÄdi pakalpojumi/lietojumprogrammas ir pieejamas jÅ«su lietojumprogrammai?
- VeselÄ«bas pÄrbaude. Vai pakalpojuma atklÄÅ”anÄ atgrieztÄs pakalpojuma instances ir veselas un ir gatavas pieÅemt tÄ«kla trafiku? Tas var ietvert gan aktÄ«vÄs (piemÄram, atbildes/veselÄ«bas pÄrbaudes), gan pasÄ«vÄs (piemÄram, izmantojot 3 secÄ«gas 5xx kļūdas, kas norÄda uz neveselÄ«ga pakalpojuma stÄvokli) veselÄ«bas pÄrbaudes.
- MarÅ”rutÄÅ”ana. Kuram pakalpojumu klasterim pieprasÄ«jums jÄnosÅ«ta, saÅemot pieprasÄ«jumu uz "/foo" no REST pakalpojuma?
- Slodzes balansÄÅ”ana. Kad marÅ”rutÄÅ”anas laikÄ ir atlasÄ«ts pakalpojumu klasteris, uz kuru pakalpojuma gadÄ«jumu jÄnosÅ«ta pieprasÄ«jums? Ar kÄdu taimautu? Ar kÄdiem Ä·Ädes pÄrtraukuma iestatÄ«jumiem? Ja pieprasÄ«jums neizdodas, vai tas ir jÄmÄÄ£ina vÄlreiz?
- AutentifikÄcija un autorizÄcija. Vai ienÄkoÅ”ajiem pieprasÄ«jumiem zvanÄ«Å”anas pakalpojumu var kriptogrÄfiski identificÄt/autorizÄt, izmantojot mTLS vai kÄdu citu mehÄnismu? Ja tas ir atpazÄ«ts/autorizÄts, vai pakalpojumÄ ir atļauts izsaukt pieprasÄ«to darbÄ«bu (galapunktu), vai arÄ« ir jÄatgriež neautentificÄta atbilde?
- NovÄrojamÄ«ba. Katram pieprasÄ«jumam ir jÄÄ£enerÄ detalizÄta statistika, žurnÄli/žurnÄli un izplatÄ«tie izsekoÅ”anas dati, lai operatori varÄtu izprast sadalÄ«tÄs trafika plÅ«smas un atkļūdoÅ”anas problÄmas, kad tÄs rodas.
Datu plakne ir atbildÄ«ga par visiem iepriekÅ”Äjiem apkalpoÅ”anas tÄ«kla punktiem. Faktiski pakalpojuma vietÄjais starpniekserveris (blakusvÄÄ£is) ir datu plakne. Citiem vÄrdiem sakot, datu plakne ir atbildÄ«ga par katras tÄ«kla paketes, kas tiek nosÅ«tÄ«ta uz pakalpojumu vai no pakalpojuma, nosacÄ«tu apraidi, pÄrsÅ«tÄ«Å”anu un uzraudzÄ«bu.
Vadības plakne
TÄ«kla abstrakcija, ko lokÄlais starpniekserveris nodroÅ”ina datu plaknÄ, ir maÄ£iska (?). TomÄr kÄ starpniekserveris faktiski zina par "/foo" marÅ”rutu uz pakalpojumu B? KÄ var izmantot pakalpojumu atklÄÅ”anas datus, ko aizpilda starpniekservera pieprasÄ«jumi? KÄ ir konfigurÄti parametri slodzes lÄ«dzsvaroÅ”anai, taimautai, Ä·Ädes pÄrtraukumiem utt.? KÄ izvietot lietojumprogrammu, izmantojot zilo/zaļo metodi vai graciozo satiksmes pÄrejas metodi? Kas konfigurÄ visas sistÄmas autentifikÄcijas un autorizÄcijas iestatÄ«jumus?
Visi iepriekÅ” minÄtie vienumi atrodas apkopes tÄ«kla vadÄ«bas plaknes kontrolÄ. VadÄ«bas plakne Åem izolÄtu bezpastÄvju starpniekserveru kopu un pÄrvÄrÅ” tos sadalÄ«tÄ sistÄmÄ.
Es domÄju, ka iemesls, kÄpÄc daudzi tehnologi uzskata, ka atseviŔķie datu plaknes un vadÄ«bas plaknes jÄdzieni ir mulsinoÅ”i, ir tas, ka lielÄkajai daļai cilvÄku datu plakne ir pazÄ«stama, bet vadÄ«bas plakne ir sveÅ”a/nesaprasta. MÄs jau ilgu laiku strÄdÄjam ar fiziskajiem tÄ«kla marÅ”rutÄtÄjiem un slÄdžiem. MÄs saprotam, ka paketÄm/pieprasÄ«jumiem ir jÄnonÄk no punkta A uz punktu B un ka mÄs varam izmantot aparatÅ«ru un programmatÅ«ru, lai to paveiktu. JaunÄs paaudzes programmatÅ«ras starpniekserveri ir vienkÄrÅ”i izdomÄtas to rÄ«ku versijas, ko esam izmantojuÅ”i jau ilgu laiku.
2. attÄls. CilvÄka vadÄ«bas plakne
TomÄr mÄs jau ilgu laiku esam izmantojuÅ”i vadÄ«bas plaknes, lai gan lielÄkÄ daļa tÄ«kla operatoru Å”o sistÄmas daļu var nesaistÄ«t ar kÄdu tehnoloÄ£iju komponentu. Iemesls ir vienkÄrÅ”s:
LielÄkÄ daļa mÅ«sdienÄs izmantoto vadÄ«bas plakÅu ir... mÄs.
uz 2. attÄls parÄda to, ko es saucu par āCilvÄka kontroles plakniā. Å Äda veida izvietoÅ”anÄ, kas joprojÄm ir ļoti izplatÄ«ta, iespÄjams, kaŔķīgs cilvÄks-operators izveido statiskas konfigurÄcijas ā iespÄjams, izmantojot skriptus ā un izvieto tÄs, izmantojot kÄdu Ä«paÅ”u procesu, visos starpniekserveros. PÄc tam starpniekserveri sÄk izmantot Å”o konfigurÄciju un sÄk apstrÄdÄt datu plakni, izmantojot atjauninÄtos iestatÄ«jumus.
3. attÄls. UzlabotÄ apkalpoÅ”anas tÄ«kla vadÄ«bas plakne
uz 3. attÄls parÄda apkalpoÅ”anas tÄ«kla āpaplaÅ”inÄtoā vadÄ«bas plakni. Tas sastÄv no Å”ÄdÄm daļÄm:
- CilvÄks: JoprojÄm ir cilvÄks (cerams, ka mazÄk dusmÄ«gs), kurÅ” pieÅem augsta lÄ«meÅa lÄmumus attiecÄ«bÄ uz visu sistÄmu kopumÄ.
- VadÄ«bas plaknes UI: persona mijiedarbojas ar noteikta veida lietotÄja interfeisu, lai kontrolÄtu sistÄmu. Tas varÄtu bÅ«t tÄ«mekļa portÄls, komandrindas lietojumprogramma (CLI) vai kÄda cita saskarne. Izmantojot lietotÄja interfeisu, operatoram ir piekļuve globÄlajiem sistÄmas konfigurÄcijas parametriem, piemÄram:
- IzvÄrÅ”anas kontrole, zila/zaļa un/vai pakÄpeniska satiksmes pÄreja
- AutentifikÄcijas un autorizÄcijas iespÄjas
- MarÅ”rutÄÅ”anas tabulas specifikÄcijas, piemÄram, kad lietojumprogramma A pieprasa informÄciju par "/foo", kas notiek
- Slodzes lÄ«dzsvarotÄja iestatÄ«jumi, piemÄram, taimautu, atkÄrtotu mÄÄ£inÄjumu, Ä·Ädes pÄrtraukumu iestatÄ«jumi utt.
- Darba slodzes plÄnotÄjs: pakalpojumi tiek darbinÄti infrastruktÅ«rÄ, izmantojot noteikta veida plÄnoÅ”anas/orÄ·estrÄcijas sistÄmu, piemÄram, Kubernetes vai Nomad. PlÄnotÄjs ir atbildÄ«gs par pakalpojuma ielÄdi kopÄ ar vietÄjo starpniekserveri.
- Pakalpojuma atklÄÅ”ana. Kad plÄnotÄjs sÄk un aptur pakalpojumu gadÄ«jumus, tas ziÅo par veselÄ«bas stÄvokli pakalpojuma atklÄÅ”anas sistÄmai.
- BlakusvÄÄ£a starpniekservera konfigurÄcijas API : lokÄlie starpniekserveri dinamiski iegÅ«st stÄvokli no dažÄdiem sistÄmas komponentiem, izmantojot galu galÄ konsekventu modeli bez operatora iejaukÅ”anÄs. Visa sistÄma, kas sastÄv no visiem paÅ”laik strÄdÄjoÅ”ajiem pakalpojumu gadÄ«jumiem un vietÄjiem starpniekserveriem, galu galÄ saplÅ«st vienÄ ekosistÄmÄ. Envoy universÄlÄ datu plaknes API ir viens no piemÄriem, kÄ tas darbojas praksÄ.
BÅ«tÄ«bÄ vadÄ«bas plaknes mÄrÄ·is ir iestatÄ«t politiku, kas galu galÄ tiks pieÅemta datu plaknÄ. Uzlabotas vadÄ«bas plaknes no operatora noÅems vairÄk dažu sistÄmu daļu un prasÄ«s mazÄk manuÄlas darbÄ«bas, ja tÄs darbojas pareizi!...
Datu plakne un vadības plakne. Datu plaknes un vadības plaknes kopsavilkums
- Servisa tÄ«kla datu plakne: ietekmÄ katru paketi/pieprasÄ«jumu sistÄmÄ. AtbildÄ«gs par lietojumprogrammu/pakalpojumu atklÄÅ”anu, veselÄ«bas pÄrbaudi, marÅ”rutÄÅ”anu, slodzes lÄ«dzsvaroÅ”anu, autentifikÄciju/autorizÄciju un novÄrojamÄ«bu.
- Servisa tÄ«kla vadÄ«bas plakne: nodroÅ”ina politiku un konfigurÄciju visÄm pakalpojumu tÄ«klÄ esoÅ”ajÄm datu plaknÄm. Nepieskaras nevienai paketei/pieprasÄ«jumam sistÄmÄ. VadÄ«bas plakne pÄrvÄrÅ” visas datu plaknes sadalÄ«tÄ sistÄmÄ.
PaÅ”reizÄjÄ projekta ainava
SapratuÅ”i iepriekÅ” minÄto skaidrojumu, apskatÄ«sim pakalpojumu tÄ«kla projekta paÅ”reizÄjo stÄvokli.
- Datu plaknes: Linkerd, NGINX, HAProxy, Envoy, Traefik
- Vadības plaknes: Istio, Nelsons, SmartStack
TÄ vietÄ, lai padziļinÄti analizÄtu katru no iepriekÅ”minÄtajiem risinÄjumiem, es Ä«sumÄ aplÅ«koÅ”u dažus punktus, kas, manuprÄt, Å”obrÄ«d rada lielu apjukumu ekosistÄmÄ.
Linkerd bija viens no pirmajiem datu plaknes starpniekserveriem pakalpojumu tÄ«klam 2016. gada sÄkumÄ, un tas ir paveicis fantastisku darbu, lai palielinÄtu izpratni un uzmanÄ«bu pakalpojuma tÄ«kla dizaina modelim. ApmÄram 6 mÄneÅ”us pÄc tam sÅ«tnis pievienojÄs Linkerd (lai gan viÅÅ” bija kopÄ ar Lyft kopÅ” 2015. gada beigÄm). Linkerd un Envoy ir divi projekti, kas visbiežÄk tiek minÄti, apspriežot pakalpojumu tÄ«klus.
Istio tika paziÅots 2017. gada maijÄ. Istio projekta mÄrÄ·i ir ļoti lÄ«dzÄ«gi attÄlÄ parÄdÄ«tajai paplaÅ”inÄtajai vadÄ«bas plaknei 3. attÄls. Istio sÅ«tnis ir noklusÄjuma starpniekserveris. TÄdÄjÄdi Istio ir vadÄ«bas plakne, un Envoy ir datu plakne. ÄŖsÄ laikÄ Istio radÄ«ja lielu aizrautÄ«bu, un citas datu plaknes sÄka integrÄt kÄ Envoy aizstÄjÄju (gan Linkerd, gan NGINX demonstrÄja integrÄciju ar Istio). Fakts, ka vienÄ vadÄ«bas plaknÄ var izmantot dažÄdas datu plaknes, nozÄ«mÄ, ka vadÄ«bas plakne un datu plakne ne vienmÄr ir cieÅ”i saistÄ«tas. API, piemÄram, Envoy vispÄrÄ«gÄ datu plaknes API, var veidot tiltu starp divÄm sistÄmas daļÄm.
Nelson un SmartStack palÄ«dz tÄlÄk ilustrÄt vadÄ«bas plaknes un datu plaknes atdalÄ«Å”anu. Nelsons izmanto Envoy kÄ savu starpniekserveri un izveido uzticamu vadÄ«bas plakni pakalpojumu tÄ«klam, pamatojoties uz HashiCorp steku, t.i. Nomads utt. SmartStack, iespÄjams, bija pirmais no jauna pakalpojumu tÄ«klu viļÅa. SmartStack izveido vadÄ«bas plakni ap HAProxy vai NGINX, demonstrÄjot spÄju atsaistÄ«t vadÄ«bas plakni no servisa tÄ«kla no datu plaknes.
Mikropakalpojumu arhitektÅ«ra ar servisa tÄ«klu iegÅ«st arvien lielÄku uzmanÄ«bu (pareizi!), un arvien vairÄk projektu un pÄrdevÄju sÄk strÄdÄt Å”ajÄ virzienÄ. Dažu nÄkamo gadu laikÄ mÄs redzÄsim daudz jauninÄjumu gan datu plaknÄ, gan vadÄ«bas plaknÄ, kÄ arÄ« turpmÄku dažÄdu komponentu sajaukÅ”anu. Galu galÄ mikropakalpojumu arhitektÅ«rai jÄkļūst caurspÄ«dÄ«gÄkai un maÄ£iskÄkai (?) operatoram.
Cerams, ka arvien mazÄk aizkaitinÄts.
AtslÄgas lÄ«dzÅemÅ”anai
- Servisa tÄ«kls sastÄv no divÄm dažÄdÄm daļÄm: datu plaknes un vadÄ«bas plaknes. Ir nepiecieÅ”ami abi komponenti, un bez tiem sistÄma nedarbosies.
- Ikviens ir pazÄ«stams ar vadÄ«bas plakni, un Å”ajÄ brÄ«dÄ« vadÄ«bas plakne varÄtu bÅ«t jÅ«s!
- Visas datu plaknes konkurÄ savÄ starpÄ par funkcijÄm, veiktspÄju, konfigurÄjamÄ«bu un paplaÅ”inÄmÄ«bu.
- Visas vadÄ«bas plaknes konkurÄ savÄ starpÄ funkciju, konfigurÄjamÄ«bas, paplaÅ”inÄÅ”anas un lietoÅ”anas vienkÄrŔības ziÅÄ.
- Viena vadÄ«bas plakne var saturÄt pareizÄs abstrakcijas un API, lai varÄtu izmantot vairÄkas datu plaknes.
Avots: www.habr.com