MĂ€rk. tĂ”lge.: Teenusete vĂ”rk on nĂ€htus, millel puudub siiani kindel tĂ”lge eesti keelde (ĂŒle kahe aasta tagasi pakkusime me variandi âteenuste vĂ”rkâ, kuid hiljem hakkasid mĂ”ned kolleegid aktiivselt edendama kombinatsiooni âteenuseline sĂ”elâ). JĂ€tkuvad arutelud selle tehnoloogia ĂŒle on viinud olukorrani, kus turundus ja tehnilised aspektid on liiga tihedalt pĂ”imunud. See suurepĂ€rane artikkel ĂŒhe originaaltermini autori poolt toob selgust inseneridele ja mitte ainult.

Koomiks autorilt
Sissejuhatus
Kui oled tarkvarainsener, kes töötab kuskil tagasisĂŒsteemide alal, on termin âservice meshâ tĂ”enĂ€oliselt juba viimase paari aasta jooksul kindlalt sinu teadvusesse juurdunud. TĂ€nu kummalisele kokkusattumusele on see vĂ€ljend tööstust ĂŒha enam haaranud ning sellega seotud reklaampakkumised kasvavad nagu lumepall, mis veereb mĂ€est alla, andes signaale, et see ei aeglustu.
Teenusmesh sĂŒndis hĂ€gustes ja kallutatud vetes cloud native ökosĂŒsteemis. Kahjuks tĂ€hendab see, et suur osa sellega seotud vaidlustest varieerub alates 'madala kalorsusega lobast' kuni - kui kasutada tehnilist terminit - avatud jaburuseni. Kuid kui eemaldada kogu mĂŒra, vĂ”ib avastada, et teenusmesh'il on tĂ€iesti reaalne, mÀÀratletud ja oluline funktsioon.
Selles publikatsioonis pĂŒĂŒan ma seda teha: esitada ausat, sĂŒgavat ja insenerikeskset juhendit teenusmesh'i kohta. Kavatseme vastata mitte ainult kĂŒsimusele: âMis see on?â, â vaid ka âMiks?â, samuti âMiks just praegu?â. LĂ”puks pĂŒĂŒan joonistada, miks (minu arvates) just see tehnoloogia on tekitanud nii pöörast huvi, mis on iseenesest huvitav lugu.
Kes ma olen?
Tere kĂ”igile! Minu nimi on . Olen ĂŒks Loomemesh'i loojatest â esimesest teenusmesh'i projektist ja projektist, mis vastutab termini nĂ”udmise eest (kĆik vabandused, poisid!). teenuse vĂ”rk sellisel kujul (vabandage, poisid!). (Prim tĂ”lk.: Muide, selle termini algusaegadel, rohkem kui 2,5 aastat tagasi, tĂ”lkisime juba sama autori varasema materjali nimega â».) Samuti juhin ma â idufirma, mis loob huvitavaid service mesh-lahendusi nagu Linkerd ja .
Te ilmselt arvate, et mul on selle teema kohta ĂŒsna subjektiivne ja isiklik arvamus. Siiski pĂŒĂŒan ma hoida kallutatuse minimaalsena (vĂ€lja arvatud ĂŒhes jaos: âMiks on service meshist nii palju juttu?â, â kus jagan siiski oma eelarvamusi). Samuti panen ma kĂ”ik sisse, et see juhend oleks vĂ”imalikult objektiivne. Konkreetsetes nĂ€idetes tuginen peamiselt Linkerdile, mĂ€rkides samal ajal teadaolevaid erinevusi (kui neid on) teiste tĂŒĂŒpi service meshide implementeerimisel.
Okei, aeg liikuda pÔnevate asjade juurde.
Mis on service mesh?
Oma hype'ist hoolimata on service mesh struktuurselt ĂŒsna lihtne. See on lihtsalt hulk userspace-proksisid, mis asuvad âkĂ”rvalâ teenustest (hiljem rÀÀgime natuke, mis see âkĂ”rvalâ tĂ€hendab), pluss komplekt juhtimisprotsesse. Proksid koos moodustavad data plane, samas kui juhtimisprotsessid nimetatakse control plane. Andmete tasand intercepts calls between services and does various things with them; the control plane, respectively, coordinates proxy behavior and provides access for you, i.e., the operator, to the API, allowing manipulation of the network and measurement of it as a whole.

Mis on see proxy? See on TCP-proxy, mis on âLayer 7-awareâ kategoorias (st. âarvesse vĂ”tmaâ 7. taset OSI mudelis) nagu HAProxy ja NGINX. Proxyt saab valida vastavalt oma soovile; Linkerd kasutab Rustis kirjutatud proxy'd, mis on lihtsalt nimetatud . Oleme selle spetsiaalselt service mesh'i jaoks kokku pannud. Teised mesh'id eelistavad teisi proxye (Envoy on levinud valik). Siiski on proxy valimine lihtsalt rakenduskĂŒsimus.
Mida teevad need proxy-serverid? Ilmselgelt nad proxivad kutseid teenustele ja nende kaudu (rangelt öeldes tÀidavad nad nii proxy kui ka tagurpidi proxy funktsiooni, töötledes nii sisenevaid kui ka vÀljuvaid kutseid). Ja nad rakendavad kogumit funktsioone, mis keskenduvad kutsetele teenuste vahel. See keskendumine teenuste vahele jÀÀvale liiklusele eristab service mesh-proxysid, nÀiteks API-gateway'dest vÔi ingress-proxydest (eelmainitud keskenduvad kÀtte saadud kutsetele klastrisse vÀlismaailmast). (MÀrk. tÔlge.: Existing Ingress controllers for Kubernetes comparison, many of which utilize the previously mentioned Envoy, see in .)
So, we have figured out data plane. The control plane is simpler: it consists of a set of components that ensure all the mechanics necessary for the data plane to operate in a coordinated manner, including service discovery, TLS certificate issuance, metrics aggregation, etc. The data plane informs the control plane about its behavior; in turn, the control plane provides an API that allows modification and monitoring of the data plane's behavior as a single entity.
Below is a diagram of the control plane and data plane in Linkerd. As you can see, the control plane includes several different components, including a Prometheus instance that collects metrics from the proxy servers, as well as other components such as destination (service discovery), identity (certificate authority, CA) and public-api (endpoints for web and CLI). In contrast, the data plane consists of a simple linkerd-proxy alongside the application instance. This is just a logical diagram; in practice, during deployment, you may have three replicas of each component in the control plane and hundreds or thousands of proxies in the data plane.
(SInise ristkĂŒlikud sellel skeemil tĂ€histavad Kubernetes'i pod'ide piire. NĂ€ha on, et linkerd-proxy konteinerid asuvad samas pod'is rakenduse konteineritega. Sellist skeemi tuntakse kui sidecar-konteiner.)

Service mesh arhitektuuril on mitmeid olulisi tagajĂ€rgi. Esiteks, kuna proxie ĂŒlesanne on vahendada teenuste vahelisi ĂŒhendusi, on service mesh mĂ”ttekas vaid siis, kui teie rakendus on loodud teatud teenuste kogumil. Mesh saab saab kasutada ka monoliitide puhul, kuid see on selgelt ĂŒleliigne ĂŒheainsa proksi jaoks ning selle funktsionaalsus ei pruugi olla nĂ”utud.
Teine oluline tagajĂ€rg on see, et service mesh nĂ”uab tohutul hulgal proksisid. Tegelikult lisab Linkerd linkerd-proxy iga teenuse iga eksemplari kĂŒlge (teised rakendused lisavad proksi igale sĂ”lmele/hostile/virtuaalmasinale. Igal juhul ei ole see vĂ€ike kogus). Nii aktiivne prokside kasutamine toob endaga kaasa mitmeid lisaraskusi:
- Data plane'i proksid peavad olema kiired, kuna iga kĂ”ne puhul on proksile kaks pĂ€ringut: ĂŒks kliendi pool, ĂŒks serveri pool.
- Samuti peavad proksid olema vĂ€ikeste ja kergete. IgaĂŒks neist tarbib mĂ€luresursse ja CPU-d, ning see tarbimine kasvab lineaarset koos rakendusega.
- Teil on vaja mehhanismi, et juurutada ja uuendada suurt hulka proksisid. Seda kÀsitsi teha ei saa.
Ăldiselt nĂ€eb service mesh vĂ€lja nii (vĂ€hemalt linnulennult): juurutate hulga userspace-proksisid, mis âteevad midagiâ sisemise, teenustevahelise liiklusega ja kasutate control plane'i nende jĂ€lgimiseks ja haldamiseks.
NĂŒĂŒd on aeg kĂŒsida: âMiks?â
Miks on vajalik service mesh?
Neile, kes kohtuvad service mesh'i ideega esmakordselt, on arusaadav tunda kerget Ă€revust. Service mesh'i struktuur tĂ€hendab, et see mitte ainult ei suurenda rakenduse latentsust, vaid ka tarbib ressursse ja lisab hulga uusi mehhanisme infrastruktuuri. Esiteks installite service mesh'i ja siis avastate Ă€kki, et peate hoolitsema sadade (kui mitte tuhandete) prokside eest. KĂŒsimus on, kes seda vabatahtlikult ette vĂ”tab?
KĂŒsimuse vastus koosneb kahest osast. Esiteks, operatiivkulud, mis on seotud nende prokside kasutuselevĂ”tuga, vĂ”ivad mĂ€rkimisvÀÀrselt vĂ€heneda tĂ€nu mĂ”ningatele muutustele ökosĂŒsteemis (lisainfot selle kohta hiljem).
Teiseks, selline seade on tegelikult suurepĂ€rane viis, kuidas sĂŒsteemi lisada tĂ€iendavat loogikat. Ja mitte ainult seetĂ”ttu, et service mesh vĂ”imaldab lisada palju uusi funktsioone, vaid ka seetĂ”ttu, et seda saab teha sekkumata ökosĂŒsteemi. Tegelikult pĂ”hineb kogu service mesh'i mudel just sellel postulaadil: mitmes teenusesĂŒsteemis, sĂ”ltumata sellest, mida teevad ĂŒksikud teenused, siis liiklus nende vahel on ideaalne koht funktsionaalsuse lisamiseks.
NĂ€iteks Linkerdis (nagu enamikus mesh'ides) on funktsionaalsus peamiselt keskendunud HTTP kutsetele, sealhulgas HTTP/2 ja gRPC*. Funktsionaalsus on ĂŒsna rikkalik â seda vĂ”ib jagada kolme klassi:
- Funktsioonid, mis on seotud usaldusvÀÀrsusega. Taaskutsu, ajapiirangud, kanarindade lĂ€henemine (liikluse jagamine/ĂŒmbersuunamine) jne.
- Funktsioonid, mis on seotud monitooringuga. Teenuste vÔi erisuundade tulemuslikkuse, viivituste ja pÀringute mahtude aggregatsioon; teenuste topoloogiliste kaardide koostamine jne.
- Funktsioonid, mis on seotud turvalisus. Vastastikune TLS, juurdepÀÀsu kontroll jne.
* Linkerdi vaates ei erine gRPC praktiliselt HTTP/2-st: lihtsalt kasutas koormuses protobuf. Arendaja seisukohalt on need kaks asja loomulikult erinevad.
Paljud neist mehhanismidest töötavad pĂ€ringute tasemel (seetĂ”ttu ka «L7-proksi»). NĂ€iteks, kui teenus Foo saadab HTTP-kutse teenusele Bar, vĂ”ib linkerd-proxy Foo pooles lĂ€bi viia nutikat koormuse tasakaalustamist ja suunata kĂ”ned Foo-st Bar-i eksemplaridele sĂ”ltuvalt tĂ€heldatud viivitustest; see vĂ”ib vajadusel pĂ€ringu uuesti saata (kui see on idempotentne); see vĂ”ib registreerida vastuskoodi ja ooteaja, jne. Sarnaselt vĂ”ib linkerd-proxy Bar- pooles kĂŒsitluse tagasi lĂŒkata, kui see ei ole lubatud vĂ”i on ĂŒletatud pĂ€ringute limiit; see vĂ”ib fikseerida oma viivituse jne.
Proxyd saavad "midagi teha" ka ĂŒhendusetasemel. NĂ€iteks vĂ”ib linkerd-proxy Foo kĂŒljel alustada TLS-ĂŒhendust, samas kui linkerd-proxy Bar kĂŒljel seda katkestab, ja mĂ”lemad pooled saavad ĂŒksteise TLS-sertifikaate kontrollida*. See tagab mitte ainult krĂŒpteeritud suhtluse teenuste vahel, vaid ka krĂŒptograafiliselt turvalise viisi teenuste tuvastamiseks: Foo ja Bar saavad "tĂ”estada", et nad on need, kes nad vĂ€idavad end olevat.
* "Ăksteise" all mĂ”eldakse, et kliendi sertifikaati kontrollitakse ka (suunatud TLS). "Klassikalisel" TLS-il, nĂ€iteks brauseri ja serveri vahel, kontrollitakse tavaliselt ainult ĂŒhe poole (serveri) sertifikaati.
Olenemata sellest, kas nad töötavad pĂ€ringute vĂ”i ĂŒhenduste tasemel, on oluline rĂ”hutada, et kĂ”ik teenusetehnoloogia funktsioonid on operatiivsed loomuselt. Linkerd ei suuda muuta kasuliku koormuse semantikat - nĂ€iteks lisada vĂ€lju JSON-fragmenti vĂ”i teha muudatusi protobufis. Me rÀÀgime sellest olulisest aspektist hiljem, kui arutame ESB ja middleware'i.
See on funktsioonide kogum, mida pakub service mesh. Tekib kĂŒsimus: miks mitte rakendada neid otse rakenduses? Ja miks ĂŒldse tegeleda proksi kasutamisega?
Miks on service mesh hea idee
Kuigi service mesh'i vĂ”imalused on köitvad, seisneb selle peamine vÀÀrtus tegelikult mitte funktsioonides. LĂ”ppude lĂ”puks saame rakendada neid otse rakenduses (hiljem nĂ€eme, et see oli service mesh'i pĂ€ritolu). Kui proovida vĂ€ljendada seda mĂ”tet ĂŒhes lauses, siis service mesh'i vÀÀrtus on jĂ€rgmine: rakendada neid otse rakenduses (hiljem nĂ€eme, et teenuse vĂ”rgu pĂ€ritolu oli selline). Kui proovida seda mĂ”tet vĂ€ljendada ĂŒhe lausega, seisneb teenuse vĂ”rgu vÀÀrtus jĂ€rgmistes: see pakub funktsioone, mis on kriitilise tĂ€htsusega kaasaegse serveritarkvara toimimiseks, ĂŒhtlaselt kogu tech stack'is ja rakenduse koodist sĂ”ltumatult..
AnalĂŒĂŒsime seda lauset.
«Funktsioonid, mis on kriitilise tĂ€htsusega kaasaegse serveritarkvara toimimiseks» Kui loote tehingu serverirakendust, mis on seotud avaliku internetiga, vastu vĂ”tab vĂ€lismaailmast pĂ€rinevaid pĂ€ringuid ja vastab neile lĂŒhikese aja jooksul â nĂ€iteks veebirakendus, API-server ja enamik teisi kaasaegseid rakendusi â ning kui rakendate seda teenuste kogumina, mis omavahel sĂŒmbiootiselt suhtlevad, ja kui te pidevalt tĂ€iustate seda tarkvara, lisades uusi funktsioone, ja kui teil on hĂ€dasti vaja hoida seda sĂŒsteemi töökorras muudatuste protsessi kĂ€igus â siis Ă”nnitleme teid, te tegelikult arendate tĂ€napĂ€eva serveritarkvara. KĂ”ik need imeliselt olulised omadused, mida mainiti, on teie jaoks kriitilise tĂ€htsusega. Rakendus peab olema usaldusvÀÀrne, turvaline ja teil peab olema vĂ”imalus jĂ€lgida, mida see teeb. Just need kĂŒsimused aitavad lahendada service mesh.
(Okay, minu veendumus, et see lĂ€henemine on kaasaegne viis serveri tarkvara loomisel, hiilis eelmine lause siiski sisse. Teised eelistavad arendada monoliite, «reaktiivseid mikroteenuseid» ja muid asju, mis ei vasta ĂŒlaltoodud mÀÀratlusele. Nendel inimestel on kindlasti oma arvamus, mis erineb minu omast. Omalt poolt arvan, et nad «ei ole Ă”iged» â kuigi igal juhul ei ole service mesh nende jaoks kuigi kasulik).
«Kogu stacki jaoks ĂŒhtne». Service mesh'i pakutavad funktsioonid ei ole lihtsalt kriitiliselt olulised. Need kehtivad kĂ”igi rakenduses olevate teenuste suhtes, sĂ”ltumata sellest, millises keeles need on kirjutatud, millist raamistikku nad kasutavad, kes need kirjutas ja kuidas need on juurutatud, ning kĂ”igist muudest arendamise ja rakendamise nĂŒanssidest.
«Rakenduskoodist sĂ”ltumatu». LĂ”puks ei paku service mesh mitte ainult ĂŒhtseid funktsioone kogu steigi jaoks, vaid teeb seda ka viisil, mis ei nĂ”ua rakenduse muutmist. Service mesh'i funktsionaalsuse pĂ”hi, sealhulgas seadistamise, uuendamise, haldamise, hoolduse jne ĂŒlesanded, on tĂ€iesti platvormi tasemel ja sĂ”ltumatu rakendusest. Rakendus vĂ”ib muutuda, mĂ”jutamata service mesh'i. Omakorda vĂ”ib service mesh muutuda ilma rakenduse sekkumiseta.
KokkuvĂ”ttes ei paku service mesh mitte ainult elutĂ€htsaid funktsioone, vaid teeb seda ka globaalselt, ĂŒhtselt ja rakendusest sĂ”ltumatu viisi kaudu. SeetĂ”ttu, kuigi service mesh'i funktsionaalsust saab realiseerida teenuse koodis (nĂ€iteks raamatukoguna, mis on kaasatud igasse teenusesse), ei taga see lĂ€henemine ĂŒhtsust ja sĂ”ltumatust, mis on service mesh'i puhul nii vÀÀrtuslikud.
Ja kÔik, mis selleks vajalik, on hunnik proksisid! Luban, et vÀga varsti vaatame lÀhemalt nende prokside lisamisega seotud töötamisvÔimekuse kulusid. Kuid kÔigepealt peatugem ja vaatame seda sÔltumatuse ideed erinevate vaatenurkade kaudu. inimesed.
Kellele on service mesh abiks?
Kuigi see vĂ”ib olla ebamugav, peab mingi tehnoloogia muutuma tĂ€htsaks osaks ökosĂŒsteemist, et seda peaksid aktsepteerima inimesed. Nii et kes on huvitatud service mesh'ist? Kes saab selle kasutamisest kasu?
Kui arendate kaasaegset serveritarkvara, vĂ”ite oma meeskonda kujutada kui rĂŒhma teenuste omanikke, kes koos arendavad ja rakendavad Ă€riloogikat, ning platvormi omanikke, kes tegelevad selle sisemise platvormi arendamisega, millel need teenused töötavad. VĂ€ikestes organisatsioonides vĂ”ivad need olla samad inimesed, kuid ettevĂ”tte kasvades muutuvad need rollid tavaliselt selgemaks ja isegi jagunevad alamrollideks... (Siin on palju rÀÀkida devops'i muutuvast iseloomust, mikroteenuste organisatsioonilisest mĂ”just jne. Kuid seni vĂ”tame need kirjeldused kui faktid.)
Selliste vaatenurkade kohaselt on service mesh selgelt kasu saajad platvormi omanikud. LÔppkokkuvÔttes on platvormi meeskonna eesmÀrk luua sisemine platvorm, kus teenuste omanikud saavad teostada Àriloogikat viisil, mis tagab nende maksimaalse sÔltumatuse selle haldamise hÀmaratest detaljidest. Service mesh mitte ainult ei paku vÔimalusi, mis on kriitilise tÀhtsusega selle eesmÀrgi saavutamiseks, vaid teeb seda viisil, mis omakorda ei kehtesta teenuste omanikele sÔltuvusi.
Teenuste omanikud saavad ka kasu, kuigi kaudsemal moel. Teenuse omaniku eesmĂ€rk on olla vĂ”imalikult produktiivne Ă€riprotsessi loogika rakendamisel ning mida vĂ€hem peab ta hoolt kandma haldamise kĂŒsimuste pĂ€rast, seda parem. Selle asemel, et keskenduda nĂ€iteks taotluste kordamise vĂ”i TLS poliitikate rakendamisele, saavad nad keskenduda eranditult Ă€riĂŒlesannetele ja loota, et platvorm hoolitseb kĂ”igi muude asjade eest. See on nende jaoks suur eelis.
Selliste platvormide ja teenuste omamise vahelise eristamise korral on organisatsiooniline vÀÀrtus raske ĂŒlehinnata. Usun, et see toob kaasa peamine kasu service mesh'i jaoks.
Otsustasime selle Ă”ppetunni, kui ĂŒks Linkerdi esimesi toetajaid rÀÀkis meile, miks nad valisid service mesh'i: sest see vĂ”imaldas neil "minimeerida lobisemist". Siin on mĂ”ned ĂŒksikasjad: ĂŒks suur ettevĂ”te migreeris oma platvormi Kubernetesesse. Kuna rakendus töötas konfidentsiaalse teabe alusel, soovisid nad krĂŒpteerida kĂ”ik suhtlused klastrite vahel. Kuid olukord muutus keeruliseks, kuna oli sadu teenuseid ja sadu arendustiime. Perspektiiv suhelda kĂ”ikide nende ja veenda neid TLS-toetuse lisamise plaanidesse ei olnud sugugi meeldiv. Linkerdi seadistamisega siirdusid nad vastutuse arendajatelt (kelle jaoks oli see liigne vaev) platvormide jaoks, kelle jaoks see oli ĂŒlim prioriteet. TeisisĂ”nu, Linkerd lahendas neile vĂ€hem tehnilise, vaid rohkem organisatsioonilise probleemi.
LĂŒhidalt, service mesh on pigem sotsiaaltehniline lahendus. (AitĂ€h selle terminiga tutvumise eest.)
Kas service mesh lahendab kÔik mu probleemid?
Jah. TĂ€hendab, ei!
Kui vaadata kolme eelpool mainitud funktsioonide klassi: usaldusvÀÀrsus, turvalisus ja jĂ€lgitavus â siis on selge, et service mesh ei ole tĂ€ielik lahendus kumbagi neist probleemidest. Kuigi Linkerd suudab edastada korduvaid pĂ€ringuid (kui ta teab, et need on idempotentsed), ei suuda ta otsustada, mida kasutajale tagasi anda, kui teenus on tĂ€ielikult kokku kukkunud â sellised otsused peaks tegema rakendus. Linkerd suudab jĂ€lgida edukaid pĂ€ringuid, kuid ta ei saa vaadata teenuse sisse ja pakkuda selle sisemisi mÔÔdikuid â selline tööriist peab olema rakenduses. Ja kuigi Linkerd suudab korraldada mTLS-i, vajavad tĂ”husad turvalisuse lahendused palju enamat.
Service mesh pakub nende valdkondade funktsioonide osahulka, mis kuuluvad platvormi funktsioonidesse. Selle all mÔistan ma funktsioone, mis:
- On sÔltumatud Àri loogikast. Kuidas ehitatakse Foo ja Bar vahelisi kutsealuseid histogramme, ei sÔltu absoluutselt sellest, miks Foo kutsub Bar.
- Ăigesti rakendamine on keeruline. Linkerdis parametreeritakse taaskatsetused igasuguste keerukate elementidega, nagu taaskatsetuste eelarved (retry budgets), kuna lihtne lĂ€henemine nende rakendamisele toob tĂ”enĂ€oliselt kaasa nn âtaaskatsetuste tormiâ (retry storm) ja muid jaotatud sĂŒsteemidele iseloomulikke probleeme.
- On kÔige tÔhusamad, kui neid rakendatakse jÀrjekindlalt. TLS mehhanism omab mÔtet ainult siis, kui seda rakendatakse igal pool.
Kuna need funktsioonid on rakendatud proksi tasemel (mitte rakenduse tasemel), pakub service mesh neid tasemel platvorm, mitte rakenduses. Seega pole oluline, millises keeles teenused on kirjutatud, millist raamistikku nad kasutavad, kes need kirjutas ja miks. Proksid töötavad vĂ€lja kĂ”ik need ĂŒksikasjad ning selle funktsionaalsuse aluseks olevad ĂŒlesanded, sealhulgas konfigureerimine, uuendamine, hooldamine jne, jÀÀvad tĂ€ielikult platvormi tasemele.
NÀiteks service mesh'i vÔimalused

KokkuvĂ”tteks tahan öelda, et service mesh ei ole tĂ€ielik lahendus usaldusvÀÀrsuse, jĂ€lgimise vĂ”i turvalisuse tagamiseks. Nende valdkondade ulatus nĂ”uab kohustuslikku osalemist teenuste omanike, Ops/SRE meeskondade ja teiste ettevĂ”tte osaliste poolt. Service mesh pakub ainult platformi tasandil âĂŒlevaadetâ igas neist valdkondadest.
Miks on service mesh just praegu nii populaarne?
TĂ”enĂ€oliselt mĂ”tlete hetkel: okei, kui service mesh on nii hea, siis miks me ei hakanud kĂŒmme aastat tagasi miljonit proxyt ĂŒles seadma?
On selle kĂŒsimuse lihtne vastus: kĂŒmme aastat tagasi ehitati kĂ”ik monoliite ja service mesh'i ei vajatud. See on tĂ”si, kuid minu arvates kaob sellise vastuse puhul Ă€ra pĂ”hjus. Isegi kĂŒmme aastat tagasi arutleti mikroteenuste kontseptsiooni kui perspektiivset viisi suurte sĂŒsteemide loomiseks laialdaselt ning seda rakendati sellistes ettevĂ”tetes nagu Twitter, Facebook, Google ja Netflix. Ăldine arusaam â vĂ€hemalt nendes tööstuse osades, millega ma kokku puutusin â oli see, et mikroteenused on "Ă”ige viis" suurte sĂŒsteemide loomiseks, isegi kui see oli pĂ”rgulikult keeruline.
Muidugi, kuigi kĂŒmme aastat tagasi olid ettevĂ”tteid, kes kasutasid mikroteenuseid, ei pannud nad sugugi prokse igale poole, et luua service mesh'i. Kuid kui lĂ€hemalt vaadata, siis nad tegid midagi sarnast: paljudes neist ettevĂ”tetest oli ette nĂ€htud, et tuleb kasutada erilist sisemist raamatukogu vĂ”rgu suhtlemiseks (mida mĂ”nikord nimetatakse paksu kliendi raamatukoguks, fat client library).
Netflixil oli Hysterix, Google'il Stubby ja Twitteril Finagle'i teek. Finagle, nĂ€iteks, oli kohustuslik iga uue teenuse jaoks Twitteris. See haldas nii kliendi- kui ka serveripoolseid ĂŒhendusi, vĂ”imaldas korduvaid pĂ€ringuid, toetas pĂ€ringute marsruutimist, koormuse jaotamist ning mÔÔtmisi. See tagas jĂ€rjepideva usaldusvÀÀrsuse ja jĂ€lgitavuse kihi kogu Twitteri tehnoloogiapuhvris, sĂ”ltumata teenuse konkreetsest tegevusvaldkonnast. Loomulikult töötas see ainult JVM-keelte puhul ja pĂ”hines programmeerimismudelit, mida tuli rakenduses kasutada. Siiski olid selle funktsioonid peaaegu samad, mis service mesh'il. (Tegelikult oli Linkerdi esimene versioon lihtsalt Finagle, ĂŒmbritsetud proksiga.)
Nii et kĂŒmme aastat tagasi olid olemas mitte ainult mikroteenused, vaid ka spetsiaalsed proto-service-mesh raamatukogud, mis lahendasid samu probleeme, mida service mesh lahendab tĂ€napĂ€eval. Siiski ei olnud sel ajal service mesh'i. Enne selle tekkimist pidi toimuma veel ĂŒks muutus.
Ja siin peitub sĂŒgavam vastus, mis on seotud teise muutusega, mis on toimunud viimase 10 aasta jooksul: mikroteenuste juurutamise kulud on tĂ”usnud jĂ€rsult. Ălalmainitud ettevĂ”tted, kes kasutasid mikroteenuseid kĂŒmme aastat tagasi: Twitter, Netflix, Facebook, Google, â olid tohutu suurusega ja suure ressursiga ettevĂ”tted. Neil oli mitte ainult vajadus, vaid ka vĂ”imalus luua, juurutada ja hallata suuri mikroteenusel pĂ”hinevaid rakendusi. Twitteri inseneride energia ja pingutused monoliidisĂŒsteemilt mikroteenuste lĂ€henemisele ĂŒlemiseks on lihtsalt hĂ€mmastavad. (Ausalt öeldes, nagu ka see, et see Ă”nnestus.) Sellised infrastruktuuri kĂ€igud olid sel ajal vĂ€iksematele ettevĂ”tetele vĂ”imatud.
Liigume olevikku. TÀna on olemas idufirmad, kus mikroteenuste ja arendajate suhe on 5:1 (vÔi isegi ), ning nad saavad sellega edukalt hakkama! Kui 5-liikmeline idufirma suudab vaevata hallata 50 mikroteenust, tÀhendab see, et midagi on ilmselgelt vÀhendanud nende rakendamise kulusid.
1500 mikroteenust Monzo's; iga rida â ettenĂ€htud vĂ”rgureegel, mis lubab liiklust
Mikroteenuste kĂ€itamise kulude jĂ€rsk vĂ€henemine on tulemuseks ĂŒhele protsessile: konteinerite populaarsuse kasvule ja orkestritele. Just see on pĂ”hjus, miks service mesh'i kasutamine on muutunud atraktiivseks. Ăks ja sama tehnoloogia on teinud nii service mesh'i kui ka mikroteenused atraktiivseks: Kubernetes ja Docker.
Miks? Noh, Docker lahendab ĂŒhe suure probleemi â pakendamise probleemi. Pakendades rakenduse ja selle (mitte-vĂ”rgulised) töötamise sĂ”ltuvused konteinerisse, muudab Docker rakenduse vahetatavaks ĂŒksuseks, mida saab paigaldada ja kĂ€ivitada igal pool. Samal ajal lihtsustab see oluliselt kĂ€itamiseks mitmekeelse steigi: kuna konteiner on tĂ€itmisaatom, ei ole paigaldamise ja kĂ€itamise eesmĂ€rkide jaoks oluline, mis on sees, olgu see rakendus JVM, Node, Go, Python vĂ”i Ruby. Sa lihtsalt kĂ€ivitad selle, ja kĂ”ik.
Kubernetes viib kĂ”ik uuele tasemele. NĂŒĂŒd, kui on palju "kĂ€ivitatavaid asju" ja mitmeid masinaid, millel neid kĂ€itada, on vajadus tööriista jĂ€rele, mis suudab neid ĂŒksteisega seostada. Laiemas mĂ”ttes annate Kubernetes'ele hulga konteinerite ja hulga masinaid, ning see seob need omavahel (loomulikult on see dĂŒnaamiline ja pidevalt muutuva protsess: uued konteinerid liiguvad sĂŒsteemis, masinad kĂ€ivituvad ja peatatakse jne. Kuid Kubernetes arvestab kĂ”igega sellega).
PĂ€rast Kubernetes'e seadistamist on ajakulud ĂŒhe teenuse juurutamiseks ja hooldamiseks vĂ€he erinevad kuludest, mis on vajalikud kĂŒmne teenuse juurutamiseks ja hooldamiseks (tegelikult on need praktiliselt sarnased ka 100 teenuse puhul). Lisa sellele konteinerid kui pakendi mehhanism, mis edendab mitme keele realiseerimist, ja saad hulga uusi rakendusi, mis on realiseeritud mikroteenustena, kirjutatud erinevates keeltes â just sellises keskkonnas, mille jaoks service mesh on nii hĂ€sti sobiv.
Nii, oleme jĂ”udnud vastuseni kĂŒsimusele, miks service meshi idee on just nĂŒĂŒd populaarsust kogunud: see ĂŒhtlus, mida Kubernetes teenustele tagab, on otseselt rakendatav service mesh'i haldamiseks. Te pakite pöördproksi konteineritesse, lasete Kubernetesel neid kuhugi kinnitada, ja voila! Tulemuseks on service mesh, samal ajal kui kogu selle paigaldamise mehhanismi haldab Kubernetes. (KĂ”ige vĂ€hem, kĂ”rge alt vaadates. Loomulikult on selles protsessis palju nĂŒansse.)
KokkuvĂ”ttes: pĂ”hjus, miks service mesh on just nĂŒĂŒd, mitte kĂŒmme aastat tagasi populaarsust kogunud, on see, et Kubernetes ja Docker on mitte ainult oluliselt suurendanud nĂ”udlust selle jĂ€rele, lihtsustades rakenduste elluviimist mitmekeelsena mikroteenuste kogumina, vaid ka oluliselt vĂ€hendanud kulusid selle haldamiseks, tagades sidecar-proxide paigaldamise ja toetamise mehhanismid.
Miks on nii palju juttu service mesh'ist?
Hoiatus: selles osas kasutan ma igasuguseid oletusi, arva ja spekulatsioone ning siseteavet.
Otsides fraasi âservice meshâ leiate hulgaliselt ĂŒle töötatud madala kalorsusega sisu, kummalisi projekte ja kaleidoskoopilisi moonutusi, mis vÀÀrivad kaja kaamerat. See on iseloomulik igale uuele ja moes olevale tehnoloogiale, kuid service meshi puhul on probleem eriti terav. Miks?
Noh, osaliselt on see minu sĂŒĂŒ. Olen pĂŒhendunud Linkerdi ja service mesh'i edendamisele igal vĂ”imalusel, lĂ€bi lugematute blogikirjutiste ja artiklite, nagu see. Kuid ma ei ole nii vĂ”imas. Et sellele kĂŒsimusele tĂ”eliselt vastata, tuleb rÀÀkida veidi ĂŒldisest olukorrast. Ja sellest ei saa rÀÀkida, mainimata ĂŒhte projekti: â avatud lĂ€htekoodiga service mesh, mida arendavad koos Google, IBM ja Lyft.
(Nendel kolmel ettevÔttel on tÀiesti erinevad rollid: Lyfti osalus nÀib piirduvat ainult nimega; nad on Envoy autorid, kuid ei kasuta Istiot ega osale selle arendamisel. IBM osaleb Istio arendamises ja kasutab seda. Google osaleb aktiivselt Istio arendamises, kuid, nii palju kui ma tean, ei kasuta seda tÔeliselt.)
Istio projekt paistab silma kahe peamise omadusega. Esiteks, need on tohutud turunduspingutused, mida Google, eriti, sellele suunab. Minu hinnangul on enamik inimesi, kes on teadlikud service mesh kontseptsioonist, praegu sellest esmakordselt kuulnud tĂ€nu Istio'le. Teine omadus on see, kui halvasti Istio vastu on vĂ”etud. Kuigi ma olen selles kĂŒsimuses selgelt huvitatud osaline, pĂŒĂŒdes jÀÀda vĂ”imalikult objektiivseks, ei saa ma siiski mitte... , mitte just tĂŒĂŒpiline (kuigi mitte ainulaadne: meelde tuleb systemd, âŠ) avatud lĂ€htekoodiga projekti puhul.
(Tegelikkuses nĂ€ib, et Istio-l on probleemid mitte ainult keerukuse ja kasutajakogemuse, vaid ka jĂ”udlusega. NĂ€iteks, , mille toimus kolmanda osapoole korral, avastas spetsialistid olukordi, kus Istio viivitused (tail latency) olid 100 korda suuremad kui sama nĂ€itaja Linkerdâil, samuti olukordades, kus ressursside puudus tĂ”i kaasa, et Linkerd töötas eduka jĂ€tkamiseks, samas kui Istio lĂ”petas tĂ€ielikult töö.)
JĂ€ttes kĂ”rvale minu teooriad selle kohta, miks see nii juhtus, arvan, et service mesh'i ĂŒmber kĂ€iv suur mĂŒrarikkus on tingitud just Google'i osalusest. Nimelt kolme jĂ€rgmise teguri kombinatsioonist:
- Google'i pealetĂŒkkiv reklaamimine Istio;
- vastav mitte-kiitev, kriitiline suhtumine projekti;
- viimase aja kiire tÔus Kubernetes'e populaarsuses, mille mÀlestused on endiselt vÀrsked.
Koos need tegurid ĂŒhinevad mingiks uinutavaks, hapnikuvabaks keskkonnaks, kus ratsionaalse otsustamise vĂ”ime vĂ€heneb, ja alles jÀÀb ainult imeliku variandi .
Linkerd'i vaatenurgast on see... ma kirjeldaksin seda kui kahtlast kasu. SuurepĂ€rane on see, et teenusevĂ”rk on jĂ”udnud peavoolu â seda ei olnud 2016. aastal, kui Linkerd esmakordselt ilmus ja oli tĂ”eliselt keeruline tĂ€helepanu projektile tĂ”mmata. NĂŒĂŒd ei ole sellist probleemi! Kuid halb on see, et teenusevĂ”rgu olukord on tĂ€na nii segane, et on praktiliselt vĂ”imatu mĂ”ista, millised projektid tĂ”eliselt kuuluvad teenusevĂ”rgu kategooriasse (rÀÀkimata sellest, et mĂ”ista, milline neist sobib konkreetse kasutusjuhtumi jaoks kĂ”ige paremini). See takistab kindlasti kĂ”iki (ja kindlasti on mĂ”nedel juhtudel Istio vĂ”i mĂ”ni muu projekt sobivam kui Linkerd, kuna viimane ei ole siiski universaalne lahendus).
Linkerd'i poolt oli meie strateegia ignoreerida mĂŒra, keskenduda jĂ€tkuvalt kogukonna tegelike probleemide lahendamisele ja pĂ”himĂ”tteliselt oodata, kuni pĂ”nevus vaibub. LĂ”ppkokkuvĂ”ttes hype vĂ€heneb ja me saame rahulikult edasi töötada.
Kuni selle ajani peame me kÔik natuke kannatama.
Kas teenusevÔrk on kasulik mulle, tagasihoidlikule tarkvarainsenerile?
Selle kĂŒsimuse vastus sĂ”ltub jĂ€rgnevast kĂŒsitlusest:
Kas tegelete ainult Àri loogika rakendamisega? Sellisel juhul ei ole service mesh teile vajalik. Loomulikult vÔite sellega huvi tunda, kuid ideaalis ei peaks service mesh teie keskkonda otseselt mÔjutama. JÀtkake oma töö tegemist selle nimel, mille eest teile makstakse.
Kas te toetate platvormi ettevĂ”ttes, mis kasutab Kubernetes't? Jah, sel juhul on service mesh teil vajalik (kui te ei kasuta K8s lihtsalt monoliidi kĂ€itamiseks vĂ”i mahutöötluseks â aga siis tahaksin ma kĂŒsida, miks teile K8s vajalik on). TĂ”enĂ€oliselt satute olukorda, kus on palju mikroteenuseid, mida on kirjutanud erinevad inimesed. KĂ”ik need suhtlevad omavahel ja on seotud runtime-sĂ”ltuvuste kogumisse, ja teil on vaja leida viis sellega toime tulla. Kubernetes'i rakendamine vĂ”imaldab valida service mesh'i 'oma vajaduste jĂ€rgi'. Selleks tutvuge nende vĂ”imaluste ja omadustega ning vastake kĂŒsimusele, kas mĂ”ni olemasolev projekt sobib teile (soovitan alustada uurimist Linkerd'ist).
Kas te töötate platvormi kallal ettevÔttes, mis EI kasuta Kubernetes't, vaid kasutab mikroteenuseid? Sel juhul on service mesh teile kasulik, kuid selle kasutamine ei ole triviaalne. Muidugi saate simuleerida service mesh'i toimimist, paigaldades hulga vahendusi, kuid Kubernetes'e oluline eelis on just juurutusmudel: nende vahendite kÀsitsi hooldamine nÔuab palju rohkem aega, vaeva ja kulutusi.
Kas te vastutate platvormi eest ettevÔttes, mis töötab monoliitidega? Sel juhul ei ole service mesh tÔenÀoliselt vajalik. Kui töötate monoliitidega (vÔi isegi monoliitide kogumitega), millel on selgelt mÀÀratletud ja harva muutuvaid suhtlemismustreid, ei paku service mesh teile suurt midagi. Seega vÔite lihtsalt ignoreerida ja loota, et see kaob nagu halb unenÀgu...
KokkuvÔte
Arvatavasti ei peaks service mesh'i nimetama maailma «kĂ”ige hĂŒpsamaks tehnoloogiaks» â see kahtlane au kuulub tĂ”enĂ€oliselt bitcoinile vĂ”i tehisintellektile. VĂ”ib-olla on ta esimeses viies. Kuid kui lĂ€bida mĂŒra ja segaduse kihtide kaudu, saab selgeks, et service mesh toob tĂ”elist kasu neile, kes arendavad rakendusi Kuberneteses.
Soovin, et te prooviksite Linkerdâi â selle installimine Kubernetesesse (vĂ”i isegi Minikubeâis sĂŒlearvutis) , ja te saate ise nĂ€ha, millest ma rÀÀgin.
KKK
â Kui ma ignoreerin service mesh'i, kas see kaob?
â Pean teid kurvastama: service mesh on meiega kauaks.
â Aga MA EI SOOVI kasutada service mesh'i!
â No ja ei peagi! Lihtsalt loe minu ĂŒlaltoodud kĂŒsitlust, et aru saada, kas tasub tutvuda vĂ€hemalt selle pĂ”hialustega.
â Kas see ei ole lihtsalt vana hea ESB/middleware uue kastmena?
â Service mesh tegeleb operatiivsete loogikate, mitte sisuga. ettevĂ”tte teenuse bussist (). Selle jaotuse sĂ€ilitamine aitab service mesh'il vĂ€ltida sama saatust.
â Milles service mesh erineb API-lĂŒĂŒsidest?
â Selle kohta on miljon artiklit. Lihtsalt googeldage.
â Kas Envoy on service mesh?
â Ei, Envoy ei ole service mesh, vaid see on vaheline server. Seda saab kasutada service mesh'i korraldamiseks (ja paljuks muuks â see on universaalne vaheline server). Kuid iseenesest ei ole see service mesh.
â Kas Network Service Mesh on service mesh?
â Ei. MalepĂ€rast, see ei ole service mesh (kuidas teile meeldib turunduse imed?).
â Kas service mesh aitab mu reaktiivses asĂŒnkroonilises sĂŒsteemis, mis pĂ”hineb sĂ”numi jĂ€rjekordadel?
â Ei, service mesh ei aita.
â Millist service mesh'i peaksin kasutama?
â , see on iseenesest mĂ”istetav.
â Artikkel on jama! / Autor tuleks sundida!
â Palun jagage selle linki kĂ”igi oma sĂ”pradega, et nad saaksid sellest veenduda!
TĂ€nud
Kuna vĂ”isite pealkirjast arvata, siis see artikkel sai inspiratsiooni Jay Krepsi fantastilisest teosest ââ. Ma kohtusin Jay'ga kĂŒmme aastat tagasi, kui tegin Intervjuud LinkedInis, ja sellest ajast alates on ta olnud mulle inspiratsiooniks.
Kuigi meeldib end nimetada âLinkerdi arendajaksâ, on tĂ”de see, et olen pigem README.md faili hooldaja projektis. TĂ€na töötab Linkerdi kallal , , inimesi, ja see projekt ei oleks Ă”nnestunud ilma imelise mĂ€ngijate ja kasutajate kogukonna panuseta.
Ja lĂ”petuseks eriline tĂ€nu Linkerdi loojaile, (primus inter pares), kes koos minuga hĂŒppas aastaid tagasi sĂŒgavale sellesse teenuste vĂ”rku seotud kaost.
P.S. tÔlkija mÀrkused
Lugege ka meie blogist:
- «»;
- «»;
- «»;
- «»;
- «».
Allikas: habr.com
