Service Mesh: mida iga tarkvarainsener peab teadma kÔige kuumemast tehnoloogiast

MĂ€rkus tĂ”lke kohta.: Teenusmesh - nĂ€htus, millel pole veel kindlat tĂ”lget eesti keelde (ĂŒle kahe aasta tagasi pakkusime vĂ€lja variandi "teenuste vĂ”rk", hiljem hakkasid mĂ”ned kolleegid aktiivselt propageerima vĂ€ljendit "teenuste sĂ”el"). Algavad pidevad arutelud selle tehnoloogia ĂŒle on viinud olukorrani, kus turunduslikud ja tehnilised aspektid on omavahel liiga tihedalt pĂ”imunud. See suurepĂ€rane materjal ĂŒhe originaaltermini autori poolt on mĂ”eldud tooma selgust inseneridele ja mitte ainult neile.

Service Mesh: mida iga tarkvarainsener peab teadma kÔige kuumemast tehnoloogiast
Koomiks Sebastian Caceres

Sissejuhatus

Kui oled tarkvarainsener, kes töötab tagasi- vĂ”i klienditeenindussĂŒsteemide alal, siis on termin "teenusmesh" ilmselt viimase paari aasta jooksul juba tugevalt Sinu teadvusesse juurdunud. Olles imelike sĂŒndmuste kokku langemisel, on see vĂ€ljend hakanud tööstust ĂŒha enam haarama, samal ajal kui huvi ja sellega seotud reklaamipakkumised kasvavad nagu lumepall, mis veerema hakkab tĂ”usul ja ei nĂ€ita mingeid pidurdusmĂ€rke.

Teenusemesh tekkis hĂ€gustes, kallutatud vetes pilvetehnoloogia ökosĂŒsteemis. Kahjuks tĂ€hendab see, et suurem osa sellega seotud vastukĂ€imist varieerub "madala kalorsusega lobaga" kuni - kui kasutada tehnilist terminit - puhtalt vĂ€lja mĂ”eldud juttudeni. Kuid kui kĂ”rvaldada kogu mĂŒra, vĂ”ib leida, et teenusmesh’il on tĂ€iesti reaalne, kindel ja oluline funktsioon.

Selles publikatsioonis pĂŒĂŒan ma tĂ€pselt seda teha: esitada aus, pĂ”hjalik ja inseneridele suunatud juhend teenusmesh'i kohta. Kavatseme vastata mitte ainult kĂŒsimusele: "Mis see on?", - vaid ka "Miks?", samuti "Miks just nĂŒĂŒd?". LĂ”puks pĂŒĂŒan ma kirjeldada, miks (minu arvates) just selle tehnoloogia tĂ”ttu on tekkinud hullumeelne tĂ”uge, mis on selline huvitav lugu.

Kes ma olen?

Tere kĂ”igile! Minu nimi on William Morgan. Olen ĂŒks loojatest Linkerd — esimese teenusmesh'i projekti ning projekti, mis on vastutav termini tekkimise eest teenuste vĂ”rk sellisena (vabandust, poisid!). (TĂ”lge.: Üks lisaks, juba ĂŒle kahe ja poole aasta tagasi, kui see termin esmakordselt ilmus, tĂ”lkisime juba selle autori varasema materjali pealkirjaga "Mis on service mesh ja miks on see mulle vajalik [pilveĂ€ppi mikroteenuste jaoks]?».) Samuti juhtin ma Buoyant — idufirma, mis tegeleb selliste lahedate teenusmesh'i asjade loomisega nagu Linkerd ja Dive.

Te tĂ”enĂ€oliselt arvate, et mul on selle kĂŒsimuse kohta ĂŒsna kallutatud ja subjektiivne arvamus. Siiski pĂŒĂŒan ma kallutatust minimeerida (vĂ€lja arvatud ĂŒhes osas: „Miks on nii palju rÀÀgitud service mesh'ist?”, — milles jagan oma eelnevaid mĂ”tteid). Samuti pĂŒĂŒan ma teha kĂ”ik endast oleneva, et see juhend oleks vĂ”imalikult objektiivne. Konkreetsetes nĂ€idetes toetun peamiselt Linkerdi kogemusele, samas osutades mulle teadaolevatele erinevustele (kui need on olemas) teiste tĂŒĂŒpi service mesh'ide rakendustes.

Okei, on aeg minna maitsvate asjade juurde.

Mis on service mesh?

Hoolimata kogu hĂŒpest on service mesh struktuuriliselt ĂŒsna lihtne. See on lihtsalt rida userspace-proxisi, mis asuvad „lĂ€hedal” teenustele (hiljem rÀÀgime veidi sellest, mis tĂ€hendab „lĂ€hedal”), pluss rida haldureid. Proxid koos saavad nimeks data plane, haldavad protsessid nimetatakse control plane. Data plane interceptib teenuste vahelisi kutsungeid ja teeb nendega „igaĂŒht erinevat” ning control plane koordineerib vastavalt proxide kĂ€itumist, pakkudes juurdepÀÀsu teie jaoks, st operaatorile, API-le, vĂ”imaldades manipuleerida vĂ”rku ja mÔÔta seda tervikuna.

Service Mesh: mida iga tarkvarainsener peab teadma kÔige kuumemast tehnoloogiast

Mis on need proxid? Need on TCP-proxid, mis on kategoorias „Layer 7-aware” (st „arvestavad” OSI mudeli 7. taset) , nagu HAProxy ja NGINX. Proxi valik sĂ”ltub teie eelistustest; Linkerd kasutab Rustis kirjutatud proxid, mis on lihtsalt nimetatud linkerd-proxy. Nii valmistasime selle spetsiaalselt service mesh'i jaoks. Teised mesh'id eelistavad teisi proxe (Envoy on tihti valik). Kuid proxide valik on vaid rakenduskĂŒsimus.

Mida teevad need proksiserverid? Selgelt öeldes, nad proxivad kutsungeid teenustele ja teenustelt (tehniliselt nad toimivad nii proksina kui ka tagasipööratud proxina, töötledes nii sissetulevaid kui vÀljaminevaid kutsungeid). Ja nad rakendavad funktsioonide komplekti, mis keskendub kutsungitele teenuste vahel. See fookus teenuste vahelise liikluse peal eristab service mesh-proxide teistest, nÀiteks API-silla vÔi ingress-proxide (viimased keskenduvad kutsungitele, mis tulevad klastrisse vÀlimisest maailmast). (MÀrkus tÔlke kohta.: olemasolevate Ingress-kontrollerite vÔrdlus Kuberneteses, millest paljud kasutavad juba mainitud Envoy, vt selles artiklis.)

Nii et, data plane'iga oleme valmis saanud. Control plane on lihtsam: see on komponentide kogum, mis tagab kogu mehaanika, mida data plane vajab koordineeritud töötamiseks, sealhulgas teenuste avastamine, TLS-sertifikaatide vĂ€ljastamine, mÔÔdikute agregatsioon jne. Data plane annab control plane'ile teada oma kĂ€itumisest; omakorda annab control plane API, mis vĂ”imaldab muuta ja jĂ€lgida data plane'i kĂ€itumist kui ĂŒhtset tervikut.

Allpool on kujutatud control plane'i ja data plane'i struktuuri Linkerdis. Nagu nÀha, sisaldab control plane mitmeid erinevaid komponente, sealhulgas Prometheuse instantsi, mis kogub mÔÔdikuid proksiserveritest, samuti teisi komponente, nagu sihtkoht (teenuste avastamine), identity (sertifitseerimiskeskus, CA) ja public-api (veebi ja CLI lÔpp-punktid). Erinevalt sellest, esindab data plane lihtsat linkerd-proxy'd rakenduse eksemplari kÔrval. See on vaid loogiline skeem; reaalsetes tingimustes jagamisel vÔib teil olla kolm koopiat igast control plane'i komponendist ja sadu vÔi tuhandeid proksi data plane'is.

(Sellel skeemil tĂ€histavad sinised ristkĂŒlikud Kubernetes'i podide piire. On nĂ€ha, et linkerd-proxy konteinerid asuvad samas pod'is rakenduse konteineritega. Sellist skeemi tuntakse kui sidecar-konteiner.)

Service Mesh: mida iga tarkvarainsener peab teadma kÔige kuumemast tehnoloogiast

Teenuste vĂ”rgu arhitektuuril on mitmeid olulisi tagajĂ€rgi. Esiteks, kuna proksi ĂŒlesanne on summutada teenuste vahelisi kutseid, on teenuste vĂ”rk mĂ”istlik ainult juhul, kui teie rakendus on loodud teatud teenuste kogumi pĂ”hjal. VĂ”rk saab on mĂ”eldud monoliitide jaoks, kuid see on ilmselgelt liialdatud ĂŒheainsa proksi jaoks, ja selle funktsionaalsus ei tule tĂ”enĂ€oliselt kasuks.

Teine oluline tagajĂ€rg on see, et teenuste vĂ”rk nĂ”uab suurt hulka prokse. Tegelikult sĂ€ilitab Linkerd linkerd-proxy igas iga teenuse eksemplaris (teised teostused lisavad proksi igale sĂ”lmele/mahub/virtuaalmasinale. Igal juhul, see on ĂŒsna palju). NiivĂ”rd aktiivne prokside kasutamine toob endaga kaasa mitmeid lisaraskusi:

  1. Proksid data plane'is peavad olema kiired, kuna iga kutse kohta on paar proksi kĂ”nesid: ĂŒks kliendi poolel, ĂŒks serveri poolel.
  2. Samuti peavad proksid olema vĂ€ikesed ja kergekaalulised.IgaĂŒks tarbib mĂ€lu ja CPU ressursse ning see tarbimine suureneb lineaarselt koos rakendusega.
  3. Teilite vÔtmeprotsess, et juurutada ja vÀrskendada suurt hulka proksi. Manualne lÀhenemine ei ole variant.

KokkuvÔttes nÀeb teenuste vÔrgu mudel vÀlja nii (vÀhemalt linnulennult): kÀitate hulga kasutajaruumi proksi, mis "teevad midagi" sisemise, teenustevahelise liiklusega ja kasutate juhtimisplaani nende jÀlgimiseks ja haldamiseks.

JĂ”udsime kĂŒsimuseni "Miks?"

Milleks on teenuste vÔrk vajalik?

Need, kes puutuvad esmakordselt kokku teenuste vĂ”rgu ideega, vĂ”ivad tunda veidi Ă€revust. Teenuste vĂ”rgu struktuur tĂ€hendab, et see mitte ainult ei suurenda rakenduse viivitusi, vaid ka tarbib ressursse ja lisab rohkem uusi mehhanisme infrastruktuuri. Esiteks installite teenuste vĂ”rgu ja seejĂ€rel avastate Ă€kitselt, et peate hooldama sadu (kui mitte tuhandeid) proksi. KĂŒsimus on, kes lĂ€heb selle peale ise?

Sellele kĂŒsimusele on kaks vastust. Esiteks vĂ”ivad nende prokside kasutuselevĂ”ttu seotud operatiivkulud mĂ”ningate ekosĂŒsteemi muutuste tĂ”ttu mĂ€rkimisvÀÀrselt vĂ€heneda (rohkem sellest hiljem).

Teiseks on selline seadistus tegelikult suurepĂ€rane viis lisada sĂŒsteemi tĂ€iendavat loogikat. Ja mitte ainult sellepĂ€rast, et teenuste vĂ”rgu abil saab lisada hulgaliselt uusi funktsioone, vaid ka seetĂ”ttu, et seda saab teha sekkumata ekosĂŒsteemi. Tegelikult pĂ”hineb kogu teenuste vĂ”rgu mudel just sellel postulatsioonil: mitme teenuse sĂŒsteemis, sĂ”ltumata sellest, mida teevad eraldi teenused, on liiklus nende vahel ideaalne koht funktsionaalsuse lisamiseks.

NĂ€iteks Linkerdis (nagu enamikus vĂ”rku) on funktsionaalsus peamiselt keskendunud HTTP-kĂ”nedele, sealhulgas HTTP/2 ja gRPC*. Funktsionaalsus on ĂŒsna rikkalik — seda saab jagada kolme kategooriasse:

  1. Funktsioonid, mis on seotud usaldusvÀÀrsusega. Uuesti tehtud pĂ€ringud, ajapiirangud, kanarĂŒssi lĂ€henemine (liikluse jagamine/saatekohandumine) jne.
  2. Funktsioonid, mis on seotud jĂ€lgimisega. EdukvĂ”ti, viivitused ja pĂ€ringute mahtude kogumine iga teenuse vĂ”i ĂŒksikute suundade jaoks; teenuste topoloogiliste kaartide koostamine jne.
  3. Funktsioonid, mis on seotud turvalisusega. Vastastikune TLS, juurdepÀÀsu kontroll ja jne.

* Linkerd'i vaatepunktist erineb gRPC praktiliselt HTTP/2-st ainult sellega, et koormuses kasutatakse protobuf'i. Arendaja jaoks eristuvad need kaks asja kindlasti.

Paljud neist mehhanismidest töötavad pĂ€ringute tasandil (seetĂ”ttu ka „L7-proksi”). NĂ€iteks kui teenus Foo saadab HTTP-kutse teenusele Bar, siis linkerd-proxy Foo poolel vĂ”ib teha intelligentset koormuse jaotust ning suunata kutsed Foo-st Bar’i eksemplaride poole, sĂ”ltuvalt jĂ€lgitavast latentsusest; see vĂ”ib vajadusel kutse korduda (ja kui see on idempotentne); see vĂ”ib salvestada vastuse koodi ja ooteaja jne. Samamoodi vĂ”ib linkerd-proxy Bar’i poolel kutse tagasi lĂŒkata, kui see ei ole lubatud vĂ”i ĂŒletanud pĂ€ringute limiti; see vĂ”ib salvestada latentsuse oma poolelt jne.

Proksid saavad teha „midagi” ka ĂŒhenduse tasandil. NĂ€iteks vĂ”ib linkerd-proxy Foo poolel algatada TLS-ĂŒhenduse, samas kui linkerd-proxy Bar’i poolel vĂ”ib selle katkestada, ja mĂ”lemad pooled saavad omavahel kontrollida TLS-sertifikaate. See tagab mitte ainult krĂŒpteerimise teenuste vahel, vaid ka krĂŒptograafiliselt turvalise viisi teenuste tuvastamiseks: Foo ja Bar saavad „tĂ”endada”, et nad on need, kes nad vĂ€idavad end olevat.

* „Teineteist” tĂ€hendab, et kliendi sertifikaat kontrollitakse samuti (mĂ”lemapoolne TLS). „Klassikalises” TLS-is, nĂ€iteks brauseri ja serveri vahel, kontrollitakse tavaliselt ainult ĂŒhe poole (serveri) sertifikaati.

SĂ”ltumata sellest, kas nad töötavad pĂ€ringute vĂ”i ĂŒhenduste tasandil, on oluline rĂ”hutada, et kĂ”ik teenuste vĂ”rgu funktsioonid on operatiivsed iseloomuga. Linkerd ei saa muuta koormuse semantikat – nĂ€iteks lisada vĂ€lju JSON fragmenti vĂ”i teha muudatusi protobuf’is. Sellest olulisel aspektist rÀÀgime hiljem, kui arutame ESB ja middleware’i teemasid.

See on funktsioonide kogum, mida teenuste vĂ”rku pakub. KĂŒsitakse, miks mitte rakendada neid otse rakenduses? Ja miks ĂŒldse tegeleda proksiga?

Miks on teenuste vÔrk hea idee

Kuigi teenuste vĂ”rgu vĂ”imalused köidavad kujutlusvĂ”imet, peitub selle peamine vÀÀrtus tegelikult mitte funktsioonides. LĂ”ppude lĂ”puks oleme me saame rakendada neid otse rakenduses (hiljem nĂ€eme, et see oli service mesh'i pĂ€ritolu). Kui ĂŒritada seda mĂ”tet vĂ€ljendada ĂŒhes lauses, on service mesh'i vÀÀrtus jĂ€rgmine: see pakub kaasaegse serveritarkvara toimimiseks kriitiliselt olulisi funktsioone, mis on ĂŒhtsed kogu tehnoloogiakuhja jaoks ja sĂ”ltumatud rakendusekoodist.

AnalĂŒĂŒsime seda lauset.

«Funktsioonid, mis on kriitiliselt olulised tĂ€napĂ€eva serveritarkvara toimimiseksKui loote tehingupĂ”hise serverirakenduse, mis on seotud avaliku internetiga, mis vĂ”tab vastu pĂ€ringuid vĂ€lismaailmast ja vastab neile lĂŒhikese aja jooksul — nĂ€iteks veebirakendus, API-server, ja enamus teisi kaasaegseid rakendusi — ja kui rakendate seda teenuste komplektina, mis suhtlevad omavahel sĂŒnkroonselt, ning kui uuendate pidevalt seda tarkvara, lisades uusi funktsioone, ja kui peate selle sĂŒsteemi töökindlust sĂ€ilitama muudatuste kĂ€igus — siis Ă”nnitlen teid, te loote tĂ€napĂ€evast serveritarkvara. Ja kĂ”ik need toredad funktsioonid, mis on ĂŒlal loetletud, osutuvad teie jaoks tĂ”eliselt kriitiliselt oluliseks. Rakendus peab olema usaldusvÀÀrne, turvaline ja te peate olema vĂ”imelised jĂ€lgima, mida see teeb. Just need kĂŒsimused aitab lahendada service mesh.

(Noh, eelmisse lĂ”iku on siiski imbunud minu veendumus, et see lĂ€henemine on kaasaegne viis serveritarkvara loomiseks. Teised eelistavad arendada monoliite, "reaktiivseid mikroteenuseid" ja muid asju, mis ei vasta ĂŒlaltoodud mÀÀratlemisele. Nendel inimestel on kindlasti oma arvamus, mis erineb minu omast. Omalt poolt usun, et nad "ei ole Ă”iged" — kuigi igal juhul pole service mesh neile eriti kasulik).

Â«Ăœhtne kogu tehnoloogiakuhja jaoksService mesh'i pakutavad funktsioonid ei ole mitte lihtsalt kriitiliselt olulised. Need on rakendatavad kĂ”igile rakenduse teenustele olenemata sellest, millises keeles need on kirjutatud, millist raamistikku kasutatakse, kes need on kirjutanud, kuidas need on juurutatud ja kĂ”igist muudest nende arendamise ja kasutamise nĂŒanssidest.

«SĂ”ltumatu rakendusekoodistLĂ”puks ei paku service mesh mitte ainult ĂŒhte tĂ”husat funktsionaalsust kogu tehnoloogiatööstuses, vaid teeb seda ka rakenduse muutmist mitte nĂ”udval viisil. Service mesh'i funktsionaalsuse pĂ”hialused, sealhulgas seadistamise, uuendamise, haldamise ja muu ĂŒlesanded, asuvad eranditult platvormi tasemel ning on rakendusest sĂ”ltumatud. Rakendus vĂ”ib muutuda, mĂ”jutamata service mesh'i. Omakorda vĂ”ib service mesh muutuda ilma rakenduse sekkumiseta.

LĂŒhidalt öeldes ei paku service mesh mitte ainult elutĂ€htsaid funktsioone, vaid teeb seda ka globaalsetel, ĂŒhtsetel ja rakendusest sĂ”ltumatutel viisidel. SeetĂ”ttu, kuigi service mesh'i funktsioone saab rakenduse koodis (nĂ€iteks teegina, mis on lisatud igale teenusele) realiseerida, ei tagaks see lĂ€henemine ĂŒhtsust ja sĂ”ltumatust, mis on service mesh'is nii vÀÀrtuslikud.

Ja kÔik, mis selleks vajalik, on lisada hulk proksisid! Luban, et varsti uurime neid operatiivkulusid, mis on seotud nende prokside lisamisega. Kuid enne, kui liigume edasi, peatume ja vaatame seda sÔltumatuse ideed erinevatest vaatepunktidest. inimesi.

Kellele on service mesh kasulik?

Kuigi see vĂ”ib olla ebamugav, peab tehnoloogia saama olulise osa ökosĂŒsteemist olema inimeste poolt vastu vĂ”etud. Nii et kes on huvitatud service mesh'ist? Kes kasu saab selle kasutamisest?

Kui arendate kaasaegset serveritarkvara, siis vĂ”ite oma meeskonda ette 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 jagunevad isegi alarollideks
 (Seda vĂ”iks palju rÀÀkida devops'i muutuvast olemusest, mikroteenuste organisatsioonilisest mĂ”just ja jne. Kuid seni vĂ”tame need kirjeldused antud seisukohtadena.)

Selle vaatevinkli kaudu on teenuse vÔrgu selged kasusaajad platvormi omanikud. LÔppude lÔpuks on platvormimeeskonna eesmÀrk luua sisemine platvorm, millel teenuse omanikud saavad teostada Àriloogikat viisil, mis tagab nende maksimaalse sÔltumatuse selle haldamise keerukatest detailidest. Teenuse vÔrgu mitte ainult ei paku kriitilise tÀhtsusega vÔimalusi selle eesmÀrgi saavutamiseks: see teeb seda viisil, mis omakorda ei pane teenuse omanikele sÔltuvusi.

Teenuse omanikud saavad samuti kasu, kuigi rohkem kaudselt. Teenuse omaniku eesmĂ€rk on olla vĂ”imalikult produktiivne Ă€ritegevuse juhtimise teostamisel, ja mida vĂ€hem peab ta halduskĂŒsimuste pĂ€rast muretsema, seda parem. Selle asemel, et tegeleda nĂ€iteks taotlemise poliitikate vĂ”i TLS-i rakendamisega, saavad nad keskenduda ainult Ă€riĂŒlesannetele ja loota, et platvorm hoolitseb kĂ”igest muust. See on neile suur eelis.

Sellise jaotuse organisatsiooniline vÀÀrtus platvormi ja teenuse omanike vahel on raske ĂŒlehindamine. Ma arvan, et see toob pĂ”hiosa lisandvÀÀrtust teenuse vĂ”rgule.

Me Ă”ppisime selle Ă”ppetunni, kui ĂŒks esimesi Linkerdi toetajaid ĂŒtles meile, miks nad valisid teenuse vĂ”rgu: sellepĂ€rast, et see vĂ”imaldas neil "vestlemist vĂ€hendada". Siin on mĂ”ned ĂŒksikasjad: suure ettevĂ”tte töötajad migreerisid oma platvormi Kubernetesesse. Kuna rakendus töötas konfidentsiaalse teabega, soovisid nad krĂŒpteerida kĂ”ik suhtlused klastrites. Siiski keeruliseks lĂ€ks asi tuhandete teenuste ja arendajate meeskondade tĂ”ttu. KĂ”igi nende kontaktimine ja veenmine, et nad toetaksid TLS-i oma plaanides, ei olnud neile sugugi meeldiv. Linkerdi paigaldamisega ĂŒle kanti vastutus arendajatelt (kelle jaoks oli see liigsed mured) platvormimeestele, kelle jaoks oli see kĂ”rge prioriteet. TeisisĂ”nu, Linkerd lahendas neile mitte niivĂ”rd tehnilise, vaid organisatsioonilise probleemi.

LĂŒhidalt öeldes on teenuse vĂ”rk pigem mitte tehnilise, vaid sotsiaal-tehnilise probleemi lahendus. (AitĂ€h Cindy Sridharan selle termini tutvustamise eest.)

Kas teenuse vÔrk lahendab kÔik mu probleemid?

Jah. TĂ€hendab, ei!

Kui vaadata kolme eelnevalt mainitud funktsiooniklassi: usaldusvÀÀrsus, turvalisus ja jĂ€lgitavus, siis on selge, et teenusevĂ”rk ei ole ĂŒhtegi neist probleemidest tĂ”eliselt lahendav. Kuigi Linkerd suudab uuesti pĂ€ringuid saata (kui ta teab, et need on idempotentsed), ei ole tal vĂ”imalik otsustada, mida kasutajale tagastada, kui teenus on kokku kukkunud – sellised otsused peab tegema rakendus. Linkerd vĂ”ib pidada statistikat eduka pĂ€ringu kohta, kuid ei suuda vaatama sisse teenusesse ja esitada selle sisemisi mÔÔdikke – selline tööriist peab olema rakendusel. Ja kuigi Linkerd suudab korraldada mTLS-i, nĂ”uavad tĂ”elised turvalisuse lahendused palju rohkem.

MÔned teenusevÔrgu pakutavad funktsioonide omadused kuuluvad plaatformaalsusele. Sellega mÔistan ma funktsioone, mis:

  1. On sÔltumatud Àriloogikast. Valik, kuidas koostada arvutuste histogrammi Foo ja Bar vahel, ei sÔltu absoluutselt sellest, miks kuidas Foo kutsub Bar'i.
  2. On keeruline Ă”igesti rakendada. Linkerdis on uuesti katsetamine parametriseeritud erinevate keerukate elementidega, nagu uuesti katsetamise eelarved (retry budgets), kuna otse-löögi lĂ€henemine selliste asjade rakendamisele tĂ”enĂ€oliselt toob esile nn "pĂ€ringute laviini" (retry storm) ja muid jaotatud sĂŒsteemidele iseloomulikke probleeme.
  3. On kĂ”ige efektiivsemad, kui neid rakendatakse ĂŒhtlaselt. TLS-mehhanismil on tĂ€hendus ainult siis, kui seda rakendatakse igal pool.

Kuna need funktsioonid on rakendatud proksi tasemel (mitte rakendustasandil), pakub teenusevÔrk neid tasemel platvormi, mitte rakendustasandil. Seega ei oma tÀhtsust, millisel keeles teenused on kirjutatud, millist raamistikku nad kasutavad, kes need kirjutas ja miks. Proksid töötavad kÔigi nende detailide piirete taha, ja selle funktsiooni pÔhialused, sealhulgas seadistamine, uuendamine, haldamine, hooldus jne, jÀÀvad tÀielikult platvormi tasemele.

TeenusevÔrgu vÔimaluste nÀited

Service Mesh: mida iga tarkvarainsener peab teadma kÔige kuumemast tehnoloogiast

KokkuvĂ”tteks vĂ”ib öelda, et service mesh ei ole tĂ€ielik lahendus usaldusvÀÀrsuse, jĂ€lgitavuse vĂ”i turvalisuse tagamiseks. Nende valdkondade ulatus eeldab kohustuslikku osalust teenuste omanike, Ops/SRE meeskondade ja teiste ettevĂ”tte osaliste poolt. Service mesh pakub igaĂŒhe jaoks ainult platvormitasandi "lĂ”iget" nendes valdkondades.

Miks on service mesh just nĂŒĂŒd populaarsust kogunud?

TĂ”enĂ€oliselt kĂŒsite sel hetkel: okei, kui service mesh on nii hea, miks me ei hakanud kĂŒmme aastat tagasi miljoneid proksisid oma tehnoloogiapagasisse seadma?

Sellele kĂŒsimusele on triviaalne vastus: kĂŒmme aastat tagasi ehitati kĂ”ik monoliite ja service mesh ei olnud kellelegi vajalik. See on tĂ”si, kuid minu arvates kaob sellise vastuse puhul sisuline mĂ”te. Isegi kĂŒmme aastat tagasi arutleti ja rakendati mikroteenuste kontseptsiooni kui perspektiivset viisi suurte sĂŒsteemide loomiseks laialdaselt sellistes ettevĂ”tetes nagu Twitter, Facebook, Google ja Netflix. Ühine arusaam - vĂ€hemalt nendes tööstuse osades, millega ma kokku puutusin - oli, et mikroteenused on "Ă”ige viis" suurte sĂŒsteemide loomiseks, isegi kui see oli tĂ”eliselt keeruline.

Muidugi, kuigi kĂŒmme aastat tagasi eksisteerisid ettevĂ”tted, kes kasutasid mikroteenuseid, ei olnud nad sugugi proksisid iga nurga peale paigaldanud, et moodustada service mesh. Siiski, kui lĂ€hemalt vaadata, tegid nad midagi sarnast: paljudes neist ettevĂ”tetest oli ette nĂ€htud kasutada erilist sisemist raamatukogu vĂ”rguĂŒhenduse loomiseks (mĂ”nikord nimetatakse seda paksu kliendi raamatukoguks, fat client library).

Netflixil oli Hysterix, Google'il Stubby, Twitteril Finagle'i raamatukogu. NĂ€iteks oli Finagle kohustuslik iga uue teenuse jaoks Twitteris. See hallas nii kliendi kui ka serveri ĂŒhendusi, vĂ”imaldas uuesti pĂ€ringute saatmist, toetas pĂ€ringute suunamist, koormuse tasakaalustamist ja mÔÔtmist. See pakkus jĂ€rjepidevat usaldusvÀÀrsuse ja jĂ€lgitavuse taset kogu Twitteri tehnoloogiapagasile, sĂ”ltumata teenuse sisust. Muidugi töötas see ainult JVM keelte jaoks ja pĂ”hines programmeerimislogi, mida tuli kasutada kogu rakenduse jaoks. Siiski olid selle funktsionaalsused peaaegu samad, mis service mesh'il. (Tegemist oli tĂ”epoolest esimese Linkerdi versiooniga, mis oli finagle'i kujul proxyna.)

Seega, kĂŒmme aastat tagasi eksisteerisid mitte ainult mikroteenused, vaid ka spetsiaalsed proto-service-mesh raamatukogud, mis lahendasid samu probleeme, mida service mesh lahendab tĂ€na. Kuid tol ajal ei olnud olemas service meshi. Enne selle tekkimist pidi toimuma veel ĂŒks muutus.

Ja just siin peitub sĂŒgavam vastus, mis on varjatud veel ĂŒhte muutusse, mis juhtus viimase 10 aasta jooksul: mikroteenuste juurutamise kulud on jĂ€rsult langenud. Üleval mainitud ettevĂ”tted, kes kasutasid mikroteenuseid kĂŒmme aastat tagasi: Twitter, Netflix, Facebook, Google, olid tohutu mastaabi ja suurte ressurssidega ettevĂ”tted. Neil oli mitte ainult vajadus, vaid ka vĂ”imalus luua, juurutada ja hallata suuri mikroteenustel pĂ”hinevaid rakendusi. Twitteri inseneride energia ja pingutused mikroteenusele ĂŒleminekul monoliitsest lĂ€henemisest on tĂ”eliselt hĂ€mmastav. (Ausalt öeldes, nagu ka see, et see Ă”nnestus.) Sarnased infrastruktuuri katsetused olid tol ajal vĂ€iksemate ettevĂ”tete jaoks vĂ”imatu.

Liigume nĂŒĂŒd tĂ€nasesse pĂ€eva. TĂ€na on olemas idufirmasid, kus mikroteenuste ja arendajate suhe on 5:1 (vĂ”i isegi 10:1), ja lisaks sellele suudavad nad nendega edukalt toime tulla! Kui 5 inimese idufirma suudab pingutuseta hallata 50 mikroteenust, siis on ilmselgelt midagi, mis on oluliselt vĂ€hendanud nende juurutamise kulusid.

Service Mesh: mida iga tarkvarainsener peab teadma kÔige kuumemast tehnoloogiast
1500 mikroteenust Monzo's; iga rida - ette nÀhtud vÔrgu reegel, mis lubab liiklust

Mikroteenuste kasutamise kulude jĂ€rsk langus on tulemuseks ĂŒhele protsessile: konteinerite populaarsuse kasv ja orkestraatorite. Just selles seisneb pĂ”hjus, miks service mesh on ellu kutsutud. Üks ja sama tehnoloogia on teinud nii service mesh'i kui ka mikroteenuste atraktiivseks: Kubernetes ja Docker.

Miks? Noh, Docker lahendab ĂŒhe suure probleemi - pakkimise probleemi. Pakendades rakenduse ja selle (mittevĂ”rgulised) jooksu sĂ”ltuvused konteinerisse, muudab Docker rakenduse vahetatavaks elemendiks, mida saab paigutada ja kĂ€itada ĂŒkskĂ”ik kus. Samal ajal lihtsustab see oluliselt haldamist mitmekeelsed stakk: kuna konteiner on aatomaarne tĂ€itmiseĂŒksus, ei ole juurutamise ja haldamise jaoks oluline, mis seal sees on, olgu selleks rakendus JVM-is, Node'is, Go's, Pythonis vĂ”i Ruby's. Sa lihtsalt kĂ€ivitad selle ja kĂ”ik.

Kubernetes viib kĂ”ik uuele tasemele. NĂŒĂŒd, kui on hulk "tĂ€idetavaid asju" ja palju masinaid, millel neid kĂ€ivitada, tekib vajadus tööriista jĂ€rele, mis suudab neid omavahel siduda. Laiemalt öeldes annate te Kubernetes'ele hulga konteinerid ja hulga masinaid ning tema seob need omavahel kokku (loomulikult on see dĂŒnaamiline ja pidevalt muutuv protsess: uued konteinerid liiguvad sĂŒsteemis, masinad kĂ€ivituvad ja lĂ”petavad töötamise jne. Kuid Kubernetes arvestab kĂ”igega sellega).

PĂ€rast Kubernetes'e seadistamist on ajakulu ĂŒhe teenuse juurutamiseks ja haldamiseks vĂ€hesel mÀÀral erinev kĂŒmne teenuse juurutamise ja haldamise kuludest (tĂ”epoolest, need on praktiliselt sarnased ka 100 teenusele). Lisage sellele konteinerid pakendamismehhanismina, mis soodustab mitmekeelseid rakendusi, ja saate hulgaliselt uusi rakendusi, mis on ellu viidud mikroteenustena, kirjutatud erinevates keeltes — just selline keskkond, mille jaoks service mesh sobib vĂ€ga hĂ€sti.

Nii oleme vastuse leidnud kĂŒsimusele, miks service mesh'i idee on just nĂŒĂŒd populaarne: see ĂŒhtsus, mida Kubernetes teenustele tagab, on otseselt rakendatav service mesh'iga seotud haldusĂŒlesannetele. Te pakendate proksi konteineritesse, annate Kubernetes'ele ĂŒlesande need kuhugi kleepida, ja voilĂ ! Te saate service mesh'i, mille juurutamise kogu mehhanika on Kubernetes'i hallatav. (V vĂ€hemalt linnulennult. Loomulikult on selles protsessis palju nĂŒansse.)

KokkuvĂ”tteks: pĂ”hjus, miks service mesh on just nĂŒĂŒd, mitte kĂŒmme aastat tagasi populaarseks saanud, seisneb selles, et Kubernetes ja Docker on mitte ainult oluliselt suurendanud vajadust selle jĂ€rele, lihtsustades rakenduste juurutamist mitmekeelselte mikroteenuste komplektidena, vaid on ka oluliselt vĂ€hendanud kulusid selle haldamiseks, pakkudes mehhanisme sidecar-proksi juurutamiseks ja hooldamiseks.

Miks on nii palju rÀÀgitud service mesh'ist?

Hoiatus: selles peatĂŒkis rakendan ma igasuguseid eeldusi, oletusi, spekulatsioone ja siseteavet.

Otsides fraasi „service mesh“, satute hulga ĂŒmber töötatud madala kalorsusega sisu, kummalisi projekte ja kaleidoskoopilisi moonutusi, mis vÀÀrivad eho-kambrit. Iga uue moetehnoloogia puhul on see iseloomulik, kuid service mesh'i puhul on probleem eriti terav. Miks?

Noh, osaliselt on see minu sĂŒĂŒ. Olen teinud kĂ”ik, et edendada Linkerdit ja service mesh'i igal vĂ”imalusel, kirjutades lugematult blogipostitusi ja artikleid, nagu see. Kuid ma ei ole nii vĂ€gev. Et tĂ”eliselt sellele kĂŒsimusele vastata, tuleb rÀÀkida pisut ĂŒldisest olukorrast. Ja seda ei saa teha, kui ei maini ĂŒhte projekti: Istio — avatud lĂ€htekoodiga service mesh, mille arendavad koos Google, IBM ja Lyft.

(Neil kolmel ettevÔttel on tÀiesti erinevad rollid: Lyfti osalus tundub olevat vaid nimekiri; nad on Envoy autoriÔiguste omanikud, kuid ei kasuta Istio't ega osale selle arendamisel. IBM osaleb Istio arendamisel ja kasutab seda. Google osaleb aktiivselt Istio arendamisel, kuid, kui ma ei eksi, ei kasuta nad seda tÔeliselt.)

Projekt Istio on tĂ€helepanuvÀÀrne kahe omaduse poolest. Esiteks, see on tohutu turundustegevus, mida Google, eriti, rakendab selle edendamiseks. Minu hinnangul teavad enamik inimesi, kes on teadlikud service mesh kontseptsioonist, sellest esmakordselt Istio kaudu. Teine omadus on see, kui halb on Istio vastuvĂ”tugrad. esile tĂ”sta Olen ilmselgelt osaline, kuid pĂŒĂŒdes olla vĂ”imalikult objektiivne, ei saa ma siiski vĂ€ga negatiivne, mitte just iseloomulik (kuigi mitte ainulaadne: tuleb meelde systemd, vĂ”rdlus oleme korraldanud juba korduvalt
) avatud lĂ€htekoodiga projekti jaoks.

(Praktikas paistab, et Istio'l on probleemid mitte ainult keerukuse ja UX-iga, vaid ka jÔudlusega. NÀiteks, Linkerdi jÔudluse hindamise, mille viis lÀbi kolmas osapool, leidis spetsialistid olukordi, kus Istio hilinemise sabad (tail latency) olid 100 korda kÔrgemad kui Linkerdil, samuti olukordi, kus ressursse nappis, kus Linkerd jÀtkas edukalt toimimist, samal ajal kui Istio lÔpetas tÀielikult töö.)

JĂ€tan kĂ”rvale oma teooriad selle kohta, miks see juhtus, arvan, et service mesh'i ĂŒlemÀÀrane furoor tuleneb just Google'i osalusest. Nimelt kolmest jĂ€rgnevast tegurist:

  1. Google'i pealetĂŒkkiv reklaamimine Istio osas;
  2. asjakohane ebasoovitav, kriitiline suhtumine projekti;
  3. viimasel ajal kiirelt kasvanud Kubernetes'e populaarsus, mille mÀlestused on endiselt vÀrsked.

Need tegurid liituvad koos mÔnesse uimastavasse, hapnikuvaegusesse keskkonda, kus ratsionaalne mÔtlemisvÔime nÔrgeneb, ja alles jÀÀb ainult imeline variant tulpamania.

Linkerd'i vaatenurgast on see
 ma kirjeldaksin seda kui kahevahelise Ă”nnestumise. MĂ”tlen, et on suurepĂ€rane, et service mesh on peavoolu jĂ”udnud — midagi, mida ei olnud 2016. aastal, kui Linkerd alles ilmuma hakkas ja oli tĂ”eliselt keeruline tĂ”mmata inimeste tĂ€helepanu projekti. NĂŒĂŒd ei ole selle probleemiga! Aga halb on see, et service mesh'i olukord on tĂ€na nii segane, et on praktiliselt vĂ”imatu mĂ”ista, millised projektid kuuluvad tĂ”eliselt service mesh'i kategooriasse (rÀÀkimata sellest, et mĂ”ista, milline neist sobib kĂ”ige paremini konkreetse kasutusjuhtumi jaoks). See takistab kindlasti kĂ”iki (ja kindlasti on mĂ”nel juhul Istio vĂ”i mĂ”ni muu projekt paremini sobiv kui Linkerd, kuna viimane ei ole siiski universaalne lahendus).

Linkerd'i poolelt koosnes meie strateegia mĂŒra ignoreerimisest, tĂ”siselt murede lahendamiseks, mis koondusid kogukonnas ja, sisuliselt, ootamise ajal, kuni furoor vaibub. LĂ”puks hĂŒpe vĂ€heneb ja me saame rahulikult edasi töötada.

Praegu peame me kÔik natukene kannatama.

Kas service mesh aitab mind, tagasihoidlikku tarkvarainseneri?

Sellele kĂŒsimusele aitab vastata jĂ€rgmine kĂŒsitlus:

Kas tegelete ainuĂŒksi Ă€ri loogika rakendamisega? Sellisel juhul ei ole service mesh teid vajalik. Loomulikult vĂ”ite selle vastu huvi tunda, kuid ideaalis ei tohiks service mesh otse mĂ”jutada midagi teie keskkonnas. JĂ€tkake töötamist selle nimel, mille eest teised teile maksavad.

Kas te toetate platvormi ettevĂ”ttes, mis kasutab Kubernetes'e? Jah, sel juhul on teil kindlasti vajalik service mesh (muidugi, kui te ei kasuta K8s lihtsalt monoliidi vĂ”i partii töötlemiseks — aga siis tahaksin teada, miks teile K8s ĂŒldse vajalik on). TĂ”enĂ€oliselt leiate end olukorrast, kus on arvukalt mikroteenuseid, mille on kirjutanud erinevad inimesed. KĂ”ik need suhtlevad ĂŒksteisega ja on seotud jooksva sĂ”ltuvuste suhtluse massiga ning teil tuleb leida viis, kuidas sellega toime tulla. Kubernetes'i kasutamine vĂ”imaldab valida service mesh, mis sobib teile. Selleks tutvuge nende vĂ”imaluste ja omadustega ning vastake kĂŒsimusele, kas mĂ”ni olemasolevatest projektidest sobib teile (soovitan alustada uurimist Linkerdiga).

Te töötate ettevĂ”tte platvormi kallal, mis EI kasuta Kubernetes'i, kuid kasutab mikrosĂŒsteeme? Sel juhul on service mesh teile kasulik, kuid selle kasutamine ei ole lihtne. Muidugi, te saate simuleerida service mesh'i tööd, paigutades hulk proksisid, kuid Kubernetes'e oluline eelis on just juurutusmudel: nende prokside kĂ€sitsi hooldamine nĂ”uab palju rohkem aega, vaeva ja kulutusi.

Kas olete vastutav platvormi eest ettevĂ”ttes, mis töötab monoliitidega? Sel juhul ei ole service mesh teile tĂ”enĂ€oliselt vajalik. Kui te töötate monoliitidega (vĂ”i isegi monoliitide kogumitega), millel on selgelt mÀÀratletud ja harva muutuvad suhtlemismustrid, siis ei saa service mesh teile suurt midagi pakkuda. Nii et vĂ”ite selle lihtsalt tĂ€helepanuta jĂ€tta ja loota, et see kaob nagu halb unenĂ€gu


KokkuvÔte

TĂ”enĂ€oliselt ei ole service mesh seda vÀÀrt nimetada "maailma kĂ”ige ĂŒlehinnatumate tehnoloogiate" hulka — see kahtlane au vĂ”ib tĂ”enĂ€oliselt kuuluda Bitcoinile vĂ”i tehisintellektile. VĂ”ib-olla on see esimeses viies. Kuid kui murda lĂ€bi mĂŒra ja segaduse kihid, on selge, et service mesh toob reaalset kasu neile, kes loovad rakendusi Kubernetes'is.

Tahaksin, et prooviksite Linkerd’i — selle installimine Kubernetes'i klastrisse (vĂ”i isegi Minikube'i oma sĂŒlearvutisse) vĂ”tab aega umbes 60 sekundit, ja saate ise nĂ€ha, mida ma mĂ”tlen.

KKK

— Kui ma ignoreerin service mesh'i, kas see kaob Ă€ra?
— Pean teid kurvastama: service mesh on meiega pikaajaline.

— Aga ma EI TAHA kasutada service mesh'i!
— Ja ei peagi! Lihtsalt lugege minu ĂŒlaltoodud kĂŒsitlust, et aru saada, kas peaksite tutvuma vĂ€hemalt tema pĂ”hiasjadega.

— Kas see ei ole lihtsalt vana hea ESB/middleware uue sisu all?
— Teeninduse mesh tegeleb operatiivse loogikaga, mitte tĂ€hendusega. See oli peamine puudus ettevĂ”tte teenuste bussist (ESB). Selle jaotuse sĂ€ilitamine aitab teeninduse mesh-'il vĂ€ltida sama saatust.

— Kuidas teeninduse mesh erineb API lĂŒĂŒsidest?
— Selle kohta on miljon artiklit. Otsige lihtsalt Google'ist.

— Kas Envoy on teeninduse mesh?
— Ei, Envoy ei ole teeninduse mesh, see on proksi-server. Seda saab kasutada teeninduse mesh'i korraldamiseks (ja paljus muuks — see on universaalne proksi). Aga iseenesest ei ole ta teeninduse mesh.

— Network Service Mesh on teeninduse mesh?
— Ei. Hoolimata nimest ei ole see teeninduse mesh (kuidas need turunduse imed toimivad?).

— Kas teeninduse mesh aitab minu reaktiivsete asĂŒnkroonsete sĂŒsteemide puhul, mis pĂ”hinevad sĂ”numite jĂ€rjekordadel?
— Ei, teeninduse mesh ei aita teid.

— Millist teeninduse mesh-i ma peaksin kasutama?
— Linkerd, seda on selge.

— Artikkel on kehv! / Autor prĂŒgikasti!
— Palun jagage seda linki kĂ”igi oma sĂ”pradega, et nad saaksid sellest veenduda!

TĂ€nud

Kuidas te vĂ”isite arvata pealkirjast, see artikkel oli inspireeritud fantastilisest kirjutisest Jay Krepsilt "The Log: Mis iga tarkvaraarendaja peaks teadma reaalajas andmete ĂŒhendava abstraktsiooni kohta“. Ma kohtusin Jay'ga kĂŒmme aastat tagasi, kui tegin intervjuud LinkedInis, ja sellest ajast alates on ta olnud mulle inspiratsiooniks.

Kuigi mulle meeldib nimetada end "Linkerd arendajaks", on reaalsus see, et ma olen pigem README.md faili hooldaja projektis. Linkerdis töötab tÀna meeldib vÀga., meeldib vÀga., meeldib vÀga. palju inimesi ja see projekt ei oleks toimunud ilma suurepÀrase kogukonna panuseta ja kasutajateta.

Ja lÔpetuseks, eriline tÀnu Linkerd'i loojale, Oliver Gould (primus inter pares), kes koos minuga sukeldus kÔikidesse nende teeninduse mesh'i segadustesse juba aastaid tagasi.

P.S. tÔlkijalt

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster