Kontenituri, mikroservizzi u malji tas-servizz

Fuq l-internet pile artikoli о malji tas-servizz (malji tas-servizz), u hawn ieħor. Ħura! Imma għala? Imbagħad, irrid nesprimi l-opinjoni tiegħi li kien ikun aħjar kieku l-malji tas-servizz dehru 10 snin ilu, qabel il-miġja ta 'pjattaformi tal-kontejners bħal Docker u Kubernetes. Mhux qed ngħid li l-opinjoni tiegħi hija aħjar jew agħar minn oħrajn, iżda peress li l-malji tas-servizz huma annimali pjuttost kumplessi, punti multipli se jgħinu biex jifhmuhom aħjar.

Ser nitkellem dwar il-pjattaforma dotCloud, li nbniet fuq aktar minn mitt mikroservizz u appoġġat eluf ta' applikazzjonijiet fil-kontejners. Ser nispjega l-isfidi li ffaċċjajna fl-iżvilupp u t-tnedija tiegħu, u kif il-malji tas-servizz jistgħu (jew ma setgħux) jgħinu.

Storja ta 'dotCloud

Stajt ktibt dwar l-istorja ta 'dotCloud u l-għażliet ta' arkitettura għal din il-pjattaforma, iżda ma tkellimtx ħafna dwar is-saff tan-netwerk. Jekk ma tridx tgħaddas fil-qari l-aħħar artiklu dwar dotCloud, hawn il-qosor fil-qosor: hija pjattaforma PaaS bħala servizz li tippermetti lill-klijenti jmexxu firxa wiesgħa ta 'applikazzjonijiet (Java, PHP, Python...), b'appoġġ għal firxa wiesgħa ta' dejta servizzi (MongoDB, MySQL, Redis...) u fluss tax-xogħol bħal Heroku: Int ittella’ l-kodiċi tiegħek fuq il-pjattaforma, tibni immaġini tal-kontejners u tiskjerahom.

Jien ngħidlek kif it-traffiku kien dirett lejn il-pjattaforma dotCloud. Mhux għax kienet partikolarment friska (għalkemm is-sistema ħadmet tajjeb għal żmienha!), Imma primarjament għax b'għodod moderni disinn bħal dan jista' faċilment jiġi implimentat fi żmien qasir minn tim modest jekk ikollhom bżonn mod kif it-traffiku jmur bejn mazz. ta’ mikroservizzi jew mazz ta’ applikazzjonijiet. B'dan il-mod, tista 'tqabbel l-għażliet: x'jiġri jekk tiżviluppa kollox lilek innifsek jew tuża xibka ta' servizz eżistenti. L-għażla standard hija li tagħmilha lilek innifsek jew tixtriha.

Rotot tat-traffiku għal applikazzjonijiet ospitati

Applikazzjonijiet fuq dotCloud jistgħu jesponu endpoints HTTP u TCP.

Punti finali HTTP miżjuda dinamikament mal-konfigurazzjoni tal-cluster tal-bilanċjar tat-tagħbija Hipache. Dan huwa simili għal dak li jagħmlu r-riżorsi llum Ingress f'Kubernetes u load balancer simili Traefik.

Il-klijenti jikkonnettjaw ma' endpoints HTTP permezz ta' oqsma xierqa, sakemm l-isem tad-dominju jindika dotCloud load balancers. Xejn speċjali.

TCP endpoints assoċjat ma 'numru tal-port, li mbagħad jiġi mgħoddi lill-kontenituri kollha f'dak il-munzell permezz ta' varjabbli ambjentali.

Il-klijenti jistgħu jgħaqqdu ma 'endpoints TCP billi jużaw l-isem tal-host xieraq (xi ħaġa bħal gateway-X.dotcloud.com) u n-numru tal-port.

Dan l-isem tal-host jirrisolvi għall-cluster tas-server "nats" (mhux relatat ma' NATS), li se jindirizza l-konnessjonijiet TCP deħlin għall-kontejner it-tajjeb (jew, fil-każ ta’ servizzi bbilanċjati bit-tagħbija, għall-kontenituri korretti).

Jekk int familjari ma' Kubernetes, dan probabbilment se jfakkarkom fis-Servizzi Node Port.

Ma kien hemm l-ebda servizzi ekwivalenti fuq il-pjattaforma dotCloud ClusterIP: Għas-sempliċità, is-servizzi ġew aċċessati bl-istess mod kemm minn ġewwa kif ukoll minn barra l-pjattaforma.

Kollox kien organizzat b'mod pjuttost sempliċi: l-implimentazzjonijiet inizjali ta 'netwerks ta' routing HTTP u TCP kienu probabbilment biss ftit mijiet ta 'linji ta' Python kull wieħed. Algoritmi sempliċi (ngħid naive) li ġew irfinuti hekk kif il-pjattaforma kibret u dehru rekwiżiti addizzjonali.

Refactoring estensiv tal-kodiċi eżistenti ma kienx meħtieġ. Partikolarment, 12-il fattur apps jistgħu jużaw direttament l-indirizz miksub permezz ta 'varjabbli ambjentali.

Dan kif huwa differenti minn malji ta 'servizz moderni?

Limitat viżibilità. Ma kellna l-ebda metrika għall-malji tar-routing TCP xejn. Fir-rigward tar-rotot HTTP, verżjonijiet aktar tard introduċew metriċi HTTP dettaljati b'kodiċijiet ta 'żball u ħinijiet ta' rispons, iżda malji ta 'servizz moderni jmorru saħansitra aktar, u jipprovdu integrazzjoni ma' sistemi ta 'ġbir ta' metriċi bħal Prometheus, pereżempju.

Il-viżibilità hija importanti mhux biss minn perspettiva operattiva (biex tgħin issolvi l-problemi), iżda wkoll meta toħroġ karatteristiċi ġodda. Huwa dwar sigur skjerament blu-aħdar и skjerament tal-kanarji.

Effiċjenza tar-rotot hija wkoll limitata. Fil-malji tar-routing dotCloud, it-traffiku kollu kellu jgħaddi minn grupp ta 'nodi ta' routing dedikati. Dan kien ifisser potenzjalment qsim ta' fruntieri multipli AZ (Żona ta' Disponibbiltà) u żieda sinifikanti fil-latenza. Niftakar issolvi l-problemi li kien qed jagħmel aktar minn mitt mistoqsija SQL għal kull paġna u fetaħ konnessjoni ġdida mas-server SQL għal kull mistoqsija. Meta taħdem lokalment, il-paġna titgħabba istantanjament, iżda f'dotCloud tieħu ftit sekondi biex titgħabba għax kull konnessjoni TCP (u mistoqsija SQL sussegwenti) tieħu għexieren ta 'millisekondi. F'dan il-każ partikolari, konnessjonijiet persistenti solvuti l-problema.

Il-malji tas-servizz moderni huma aħjar biex jittrattaw problemi bħal dawn. L-ewwelnett, jiċċekkjaw li l-konnessjonijiet huma mgħoddija fis-sors. Il-fluss loġiku huwa l-istess: клиент → меш → сервис, iżda issa l-malja taħdem lokalment u mhux fuq nodi remoti, għalhekk il-konnessjoni клиент → меш huwa lokali u mgħaġġel ħafna (mikrosekondi minflok millisekondi).

Il-malji moderni tas-servizz jimplimentaw ukoll algoritmi aktar intelliġenti tal-ibbilanċjar tat-tagħbija. Billi jimmonitorjaw is-saħħa tal-backends, jistgħu jibagħtu aktar traffiku lil backends aktar mgħaġġla, li jirriżulta f'prestazzjoni ġenerali mtejba.

sigurtà aħjar ukoll. Il-malji tar-routing dotCloud dam kompletament fuq EC2 Classic u ma kkodifikax it-traffiku (ibbażat fuq is-suppożizzjoni li jekk xi ħadd irnexxielu jxomm it-traffiku tan-netwerk EC2, inti diġà kont f'inkwiet kbir). Il-malji moderni tas-servizz jipproteġu b'mod trasparenti t-traffiku kollu tagħna, pereżempju, b'awtentikazzjoni TLS reċiproka u kriptaġġ sussegwenti.

It-traffiku tar-rotot għal servizzi ta' pjattaforma

Tajjeb, iddiskutejna t-traffiku bejn l-applikazzjonijiet, imma xi ngħidu dwar il-pjattaforma dotCloud innifisha?

Il-pjattaforma nnifisha kienet tikkonsisti f'madwar mitt mikroservizz responsabbli għal diversi funzjonijiet. Xi wħud aċċettaw talbiet minn oħrajn, u xi wħud kienu ħaddiema fl-isfond li kkonnettjaw ma 'servizzi oħra iżda ma aċċettawx konnessjonijiet huma stess. Fi kwalunkwe każ, kull servizz irid ikun jaf l-endpoints tal-indirizzi li jeħtieġ li jgħaqqad magħhom.

Ħafna servizzi ta' livell għoli jistgħu jużaw il-malji tar-routing deskritti hawn fuq. Fil-fatt, ħafna mill-aktar minn mitt mikroservizz ta' dotCloud ġew skjerati bħala applikazzjonijiet regolari fuq il-pjattaforma dotCloud nnifisha. Iżda numru żgħir ta 'servizzi ta' livell baxx (partikolarment dawk li jimplimentaw din it-toqob tar-routing) kellhom bżonn xi ħaġa aktar sempliċi, b'inqas dipendenzi (peress li ma setgħux jiddependu fuqhom infushom biex jaħdmu - il-problema tat-tiġieġ u l-bajd qodma tajba).

Dawn is-servizzi ta' livell baxx u kritiċi għall-missjoni ġew skjerati billi tħaddmu kontenituri direttament fuq ftit nodi ewlenin. F'dan il-każ, ma ntużawx servizzi ta' pjattaforma standard: linker, scheduler u runner. Jekk trid tqabbel ma 'pjattaformi tal-kontejners moderni, qisha tmexxi pjan ta' kontroll bih docker run direttament fuq in-nodi, minflok tiddelega l-kompitu lil Kubernetes. Huwa pjuttost simili fil-kunċett moduli statiċi (imżiewed), li juża kubeadm jew bootkube meta booting cluster standalone.

Dawn is-servizzi ġew esposti b'mod sempliċi u mhux raffinat: fajl YAML elenka l-ismijiet u l-indirizzi tagħhom; u kull klijent kellu jieħu kopja ta 'dan il-fajl YAML għall-iskjerament.

Min-naħa waħda, huwa estremament affidabbli minħabba li ma jeħtieġx l-appoġġ ta 'maħżen ewlieni/valur estern bħal Zookeeper (ftakar, etcd jew Konslu ma kinux jeżistu dak iż-żmien). Min-naħa l-oħra, għamilha diffiċli biex iċ-ċaqliq tas-servizzi. Kull darba li ssir mossa, il-klijenti kollha jirċievu fajl YAML aġġornat (u potenzjalment jerġgħu jibdew). Mhux komdu ħafna!

Sussegwentement, bdejna nimplimentaw skema ġdida, fejn kull klijent konness ma 'server proxy lokali. Minflok indirizz u port, jeħtieġ biss li tkun taf in-numru tal-port tas-servizz, u tikkonnettja permezz localhost. Il-prokura lokali tieħu ħsieb din il-konnessjoni u tibgħatha lis-server attwali. Issa, meta tmexxi l-backend għal magna oħra jew tiskala, minflok taġġorna l-klijenti kollha, għandek bżonn biss taġġorna dawn il-prokuri lokali kollha; u reboot m'għadux meħtieġ.

(Kien ippjanat ukoll li jiġi inkapsulat it-traffiku f'konnessjonijiet TLS u jitqiegħed proxy server ieħor fuq in-naħa li tirċievi, kif ukoll tivverifika ċertifikati TLS mingħajr il-parteċipazzjoni tas-servizz li jirċievi, li huwa kkonfigurat biex jaċċetta konnessjonijiet biss fuq localhost. Aktar dwar dan aktar tard).

Dan huwa simili ħafna għal SmartStack minn Airbnb, iżda d-differenza sinifikanti hija li SmartStack huwa implimentat u skjerat għall-produzzjoni, filwaqt li s-sistema ta 'routing intern ta' dotCloud twaqqfet fuq l-ixkaffa meta dotCloud sar Docker.

Jien personalment nikkunsidra SmartStack bħala wieħed mill-predeċessuri għal sistemi bħal Istio, Linkerd u Consul Connect għaliex kollha jsegwu l-istess mudell:

  • Mexxi prokura fuq kull nodu.
  • Il-klijenti jikkonnettjaw mal-prokura.
  • Il-pjan ta' kontroll jaġġorna l-konfigurazzjoni tal-prokura meta jinbidlu l-backends.
  • ... Qligħ!

Implimentazzjoni moderna ta 'malji ta' servizz

Kieku għandna bżonn nimplimentaw grid simili llum, nistgħu nużaw prinċipji simili. Pereżempju, ikkonfigura żona DNS interna billi timmarka l-ismijiet tas-servizzi ma' indirizzi fl-ispazju 127.0.0.0/8. Imbagħad ħaddem HAProxy fuq kull node fil-cluster, u taċċetta konnessjonijiet f'kull indirizz tas-servizz (f'dik is-subnet 127.0.0.0/8) u direzzjoni mill-ġdid/ibbilanċjar tat-tagħbija għall-backends xierqa. Il-konfigurazzjoni HAProxy tista 'tiġi kkontrollata konfd, li jippermettilek taħżen informazzjoni backend f'etcd jew Consul u awtomatikament timbotta konfigurazzjoni aġġornata għal HAProxy meta jkun meħtieġ.

Dan huwa pjuttost kif jaħdem Istio! Iżda b'xi differenzi:

  • Użi Mibgħut Prokura minflok HAProxy.
  • Jaħżen il-konfigurazzjoni tal-backend permezz ta' Kubernetes API minflok etcd jew Consul.
  • Is-servizzi huma allokati indirizzi fuq is-subnet intern (indirizzi Kubernetes ClusterIP) minflok 127.0.0.0/8.
  • Għandu komponent addizzjonali (Ċittadella) biex iżżid awtentikazzjoni TLS reċiproka bejn il-klijent u s-servers.
  • Jappoġġja karatteristiċi ġodda bħal circuit breaking, traċċar distribwit, skjerament tal-kanarji, eċċ.

Ejja nagħtu ħarsa malajr lejn xi wħud mid-differenzi.

Mibgħut Prokura

Envoy Proxy inkiteb minn Lyft [il-kompetitur ta' Uber fis-suq tat-taxis - madwar. korsija]. Huwa simili f'ħafna modi għal prokuri oħra (eż. HAProxy, Nginx, Traefik...), iżda Lyft kiteb tagħhom minħabba li kellhom bżonn karatteristiċi li ma kellhomx prokuri oħra, u deher aktar intelliġenti li tagħmel wieħed ġdid aktar milli jestendu dak eżistenti.

Envoy jista' jintuża waħdu. Jekk għandi servizz speċifiku li jeħtieġ li nikkonnettja ma 'servizzi oħra, nista' nikkonfigurah biex nikkonnettja ma' Envoy, u mbagħad kkonfigura u jerġa' kkonfigura b'mod dinamiku l-Envoy mal-post ta 'servizzi oħra, filwaqt li nikseb ħafna funzjonalità addizzjonali kbira, bħal viżibilità. Minflok librerija tal-klijenti tad-dwana jew tinjetta traċċi tas-sejħiet fil-kodiċi, aħna nibagħtu t-traffiku lil Envoy, u tiġbor metriċi għalina.

Iżda l-Mibgħut kapaċi jaħdem ukoll bħala pjan tad-data (pjan tad-data) għall-malji tas-servizz. Dan ifisser li l-Envoy issa huwa kkonfigurat għal dan il-malji tas-servizz pjan ta' kontroll (pjan ta' kontroll).

Ajruplan tal-kontroll

Għall-pjan ta 'kontroll, Istio jiddependi fuq l-API Kubernetes. Dan mhux differenti ħafna mill-użu ta' confd, li tiddependi fuq etcd jew Konslu biex tara s-sett ta 'ċwievet fil-maħżen tad-dejta. Istio juża l-API Kubernetes biex jara sett ta' riżorsi Kubernetes.

Bejn dan u dakinhar: Jien personalment sibt dan utli Deskrizzjoni tal-API Kubernetesli jaqra:

Il-Kubernetes API Server huwa "server mutu" li joffri ħażna, verżjonijiet, validazzjoni, aġġornament u semantika għar-riżorsi tal-API.

Istio hija mfassla biex taħdem ma 'Kubernetes; u jekk trid tużaha barra mill-Kubernetes, allura trid tmexxi istanza tas-server tal-API Kubernetes (u s-servizz helper etcd).

Indirizzi tas-servizz

Istio tiddependi fuq indirizzi ClusterIP li Kubernetes jalloka, għalhekk is-servizzi Istio jirċievu indirizz intern (mhux fil-medda 127.0.0.0/8).

It-traffiku lejn l-indirizz ClusterIP għal servizz speċifiku fi cluster Kubernetes mingħajr Istio jiġi interċettat minn kube-proxy u jintbagħat lill-backend ta' dak il-prokura. Jekk int interessat fid-dettalji tekniċi, kube-proxy jistabbilixxi regoli iptables (jew load balancers IPVS, skont kif ikun ikkonfigurat) biex jikteb mill-ġdid l-indirizzi IP tad-destinazzjoni tal-konnessjonijiet li jmorru għall-indirizz ClusterIP.

Ladarba Istio jiġi installat fuq cluster Kubernetes, xejn ma jinbidel sakemm jiġi attivat b'mod espliċitu għal konsumatur partikolari, jew saħansitra l-ispazju tal-isem kollu, billi jiġi introdott kontenitur. sidecar fi imżiewed tad-dwana. Dan il-kontejner se jkabbar istanza ta 'Envoy u jwaqqaf sett ta' regoli iptables biex jinterċetta t-traffiku li jmur għal servizzi oħra u jindirizza mill-ġdid dak it-traffiku lejn Envoy.

Meta integrata ma 'Kubernetes DNS, dan ifisser li l-kodiċi tagħna jista' jgħaqqad bl-isem tas-servizz u kollox "jaħdem biss." Fi kliem ieħor, il-kodiċi tagħna joħroġ mistoqsijiet bħal http://api/v1/users/4242mela api issolvi talba għal 10.97.105.48, ir-regoli iptables se jinterċettaw konnessjonijiet minn 10.97.105.48 u jibagħtuhom lill-proxy Envoy lokali, u dak il-prokura lokali jgħaddi t-talba lill-API backend attwali. Uf!

Frills addizzjonali

Istio jipprovdi wkoll kriptaġġ u awtentikazzjoni minn tarf sa tarf permezz tal-mTLS (TLS reċiproku). Komponent imsejjaħ Citadel.

Hemm ukoll komponent Mixer, li l-Mibgħut jista’ jitlob għalih ta 'kull wieħed talba biex tieħu deċiżjoni speċjali dwar dik it-talba skont diversi fatturi bħal headers, backend load, eċċ... (tinkwetax: hemm ħafna modi kif il-Mixer jibqa' jaħdem, u anke jekk jiġġarraf, Envoy se jkompli jaħdem multa bħala prokura).

U, ovvjament, semmejna l-viżibilità: Envoy jiġbor ammont kbir ta 'metriċi filwaqt li jipprovdi traċċar distribwit. F'arkitettura ta' mikroservizzi, jekk talba API waħda trid tgħaddi mill-mikroservizzi A, B, C, u D, allura mal-login, it-traċċar distribwit iżid identifikatur uniku mat-talba u jaħżen dan l-identifikatur permezz ta' sotto-talbiet għal dawn il-mikroservizzi kollha, li jippermetti is-sejħiet kollha relatati għandhom jinqabdu, dewmien, eċċ.

Żviluppa jew tixtri

Istio għandu reputazzjoni li huwa kumpless. B'kuntrast, il-bini tal-malji tar-rotta li ddeskrivejt fil-bidu ta 'din il-kariga huwa relattivament sempliċi bl-użu ta' għodod eżistenti. Allura, jagħmel sens li minflok toħloq ix-xibka tas-servizz tiegħek stess?

Jekk għandna bżonnijiet modesti (m'għandniex bżonn viżibilità, circuit breaker u irqaq oħra), allura l-ħsibijiet jiġu biex jiżviluppaw l-għodda tagħna stess. Imma jekk nużaw Kubernetes, jista' lanqas ikun meħtieġ minħabba li Kubernetes diġà jipprovdi għodod bażiċi għall-iskoperta tas-servizz u l-ibbilanċjar tat-tagħbija.

Imma jekk ikollna rekwiżiti avvanzati, allura "xiri" ta 'malji ta' servizz jidher li huwa għażla ferm aħjar. (Dan mhux dejjem huwa "xiri" minħabba li Istio huwa sors miftuħ, iżda xorta għandna bżonn ninvestu ħin ta 'inġinerija biex nifhmu, niskjeraw, u jimmaniġġjawha.)

Għandi nagħżel Istio, Linkerd jew Consul Connect?

S'issa tkellimna biss dwar Istio, iżda din mhix l-unika malja tas-servizz. Alternattiva popolari - Linkerd, u hemm aktar Konslu Qabbad.

X'għażel?

Onestament, ma nafx. Bħalissa ma nqisx lili nnifsi kompetenti biżżejjed biex inwieġeb din il-mistoqsija. Hemm ftit interessanti artikoli b’paragun ta’ dawn l-għodda u anke benchmarks.

Approċċ wieħed promettenti huwa li tuża għodda bħal SuperGloo. Huwa jimplimenta saff ta 'estrazzjoni biex jissimplifika u jgħaqqad l-APIs esposti minn malji tas-servizz. Minflok ma nitgħallmu l-APIs speċifiċi (u, fl-opinjoni tiegħi, relattivament kumplessi) ta 'malji ta' servizz differenti, nistgħu nużaw il-kostruzzjonijiet aktar sempliċi ta 'SuperGloo - u naqilbu faċilment minn wieħed għall-ieħor, bħallikieku kellna format ta' konfigurazzjoni intermedju li jiddeskrivi interfaces HTTP u backends kapaċi. tal-ġenerazzjoni tal-konfigurazzjoni attwali għal Nginx, HAProxy, Traefik, Apache...

Stajt xi ftit ma’ Istio u SuperGloo, u fl-artiklu li jmiss irrid nuri kif inżid Istio jew Linkerd ma’ cluster eżistenti billi tuża SuperGloo, u kif dan tal-aħħar iwettaq ix-xogħol, jiġifieri jippermettilek taqleb minn malji ta 'servizz wieħed għal ieħor mingħajr kitba fuq il-konfigurazzjonijiet.

Sors: www.habr.com

Żid kumment