Lijana, li-microservices le meshes ea litšebeletso

Marang-rang sehlopha lihlooho о tšebeletso mesh (mesh ea litšebeletso), 'me ke ena e 'ngoe. Hooray! Empa hobaneng? Joale, ke batla ho hlahisa maikutlo a ka hore ho ka be ho bile molemo haeba meshes ea litšebeletso e ne e hlaha lilemong tse 10 tse fetileng, pele ho hlaha liforomo tsa lijana tse kang Docker le Kubernetes. Ha ke re maikutlo a ka a molemo kapa a mpe ho feta a mang, empa kaha li-meshes tsa tšebeletso ke liphoofolo tse rarahaneng haholo, lintlha tse ngata li tla thusa ho li utloisisa hamolemo.

Ke tla bua ka sethala sa dotCloud, se neng se hahiloe holim'a li-microservices tse fetang lekholo mme se ts'ehetsa likete tsa lits'ebetso tse kentsoeng. Ke tla hlalosa liqholotso tseo re tobaneng le tsona ha re e nts'etsapele le ho e qala, le hore na meshes ea litšebeletso e ka thusa (kapa ea sitoa) ho thusa joang.

Nalane ea dotCloud

Ke ngotse ka nalane ea dotCloud le likhetho tsa meralo ea sethala sena, empa ha ke so bue haholo ka lera la marang-rang. Haeba u sa batle ho ikakhela ka setotsoana ho bala sengoloa sa ho qetela mabapi le dotCloud, mona ke ntlha ea mantlha ka bokhutšoanyane: ke sethala sa PaaS-as-a-service se lumellang bareki ho tsamaisa lits'ebetso tse fapaneng (Java, PHP, Python ...), ka ts'ehetso ea data e fapaneng. litšebeletso (MongoDB, MySQL, Redis ...) le mosebetsi oa ho sebetsa joaloka Heroku: U kenya khoutu ea hau sethaleng, e haha ​​litšoantšo tsa setshelo le ho li sebelisa.

Ke tla u bolella hore na sephethephethe se ne se lebisitsoe joang sethaleng sa dotCloud. Eseng hobane e ne e pholile haholo (le hoja tsamaiso e sebetsa hantle bakeng sa nako ea eona!), Empa haholo-holo hobane ka lisebelisoa tsa morao-rao moralo o joalo o ka sebelisoa habonolo ka nako e khutšoanyane ke sehlopha se itekanetseng haeba se hloka tsela ea ho tsamaisa sephethephethe pakeng tsa sehlopha. ea microservices kapa sehlopha sa lits'ebetso. Ka tsela ena, o ka bapisa likhetho: ho etsahala'ng haeba u iketsetsa ntho e 'ngoe le e' ngoe ka bouena kapa u sebelisa mesh e teng ea litšebeletso. Khetho e tloaelehileng ke ho iketsetsa eona kapa ho e reka.

Tsela ea sephethephethe bakeng sa lits'ebetso tse amohetsoeng

Lisebelisoa tse ho dotCloud li ka pepesa lintlha tsa HTTP le TCP.

Lintlha tsa HTTP e kenyellelitsoe ka matla ho tlhophiso ea sehlopha sa balancer ea mojaro Hipache. Sena se tšoana le seo lisebelisoa li se etsang kajeno Ingress ho Kubernetes le ho leka-lekanya mojaro joalo ka Traefik.

Bareki ba hokahana le li-endpoints tsa HTTP ka libaka tse nepahetseng, ha feela lebitso la domain le supa li-balancers tsa dotCloud. Ha ho letho le ikhethang.

Lintlha tsa ho qetela tsa TCP e amanang le nomoro ea boema-kepe, e fetisetsoang litsing tsohle tse ka har'a stack eo ka mefuta e fapaneng ea tikoloho.

Bareki ba ka hokela litsing tsa TCP ba sebelisa lebitso la moamoheli le loketseng (ntho e kang gateway-X.dotcloud.com) le nomoro ea boema-kepe.

Lebitso lena la moamoheli le rarolla sehlopha sa "nats" seva (ha se amane le LITLHATSI NATS), e tla tsamaisa likhokahano tse kenang tsa TCP ho setshelo se nepahetseng (kapa, molemong oa lits'ebeletso tse leka-lekaneng, ho lijana tse nepahetseng).

Haeba u tloaelane le Kubernetes, mohlomong sena se tla u hopotsa ka Litšebeletso NodePort.

Ho ne ho se na litšebeletso tse lekanang sethaleng sa dotCloud ClusterIP: Bakeng sa ho nolofatsa, litšebeletso li ne li fihleloa ka tsela e tšoanang ho tloha ka hare le ka ntle ho sethala.

Ntho e 'ngoe le e' ngoe e ne e hlophisitsoe ka mokhoa o bonolo: ts'ebetsong ea pele ea marang-rang a HTTP le TCP mohlomong e ne e le mela e 'maloa feela ea Python e' ngoe le e 'ngoe. Li-algorithms tse bonolo (ke re naive) tse ileng tsa ntlafatsoa ha sethala se ntse se hola 'me ho hlaha litlhoko tse ling.

Ho ne ho sa hlokehe hore ho fetoloe bocha khoutu e teng. Ka ho khetheha, Lisebelisoa tse 12 tsa lintlha e ka sebelisa aterese e fumanoeng ka kotloloho ka mefuta e fapaneng ea tikoloho.

See se fapane joang le mesh ea sejoale-joale ea litšebeletso?

Moedi ponahalo. Ho hang re ne re se na metrics bakeng sa mesh ea routing ea TCP. Ha ho tluoa tabeng ea ho tsamaisa HTTP, liphetolelo tsa morao-rao li hlahisitse metrics e qaqileng ea HTTP e nang le likhoutu tsa liphoso le linako tsa karabelo, empa meshes ea sejoale-joale ea ts'ebeletso e ea hole le ho feta, e fana ka kopanyo le lits'ebetso tsa pokello ea metrics joalo ka Prometheus, mohlala.

Ponahalo ke ea bohlokoa eseng feela ponong ea ts'ebetso (ho thusa ho rarolla mathata), empa hape le ha o lokolla likarolo tse ncha. E mabapi le polokeho ho tsamaisoa ha botala bo botala и ho tsamaisoa ha canary.

Bokhoni ba ho tsamaisa litsela e boetse e lekanyelitsoe. Ka letlooeng la dotCloud, sephethephethe sohle se ne se tlameha ho feta har'a sehlopha sa libaka tse inehetseng tsa ho tsamaisa. Sena se ne se bolela ho tšela meeli e mengata ea AZ (Availability Zone) le ho eketseha ha latency. Ke hopola khoutu ea ho rarolla mathata e neng e etsa lipotso tse fetang lekholo tsa SQL leqepheng ka leng le ho bula khokahanyo e ncha ho seva sa SQL bakeng sa potso ka 'ngoe. Ha o sebetsa sebakeng sa heno, leqephe le jara hang-hang, empa ho dotCloud ho nka metsotsoana e seng mekae ho kenya hobane khokahano ka 'ngoe ea TCP (le potso e latelang ea SQL) e nka mashome a li-milliseconds. Tabeng ena, likhokahano tse phehellang li rarolle bothata.

Li-meshes tsa sejoale-joale tsa litšebeletso li molemo ho sebetsana le mathata a joalo. Pele ho tsohle, ba hlahloba hore na likhokahano li tsamaile mohloding. Phallo e utloahalang ea tšoana: клиент → меш → сервис, empa hona joale mesh e sebetsa sebakeng sa heno eseng ho li-node tse hole, kahoo khokahano клиент → меш ke ea lehae ebile e potlakile haholo (microseconds sebakeng sa milliseconds).

Li-meshes tsa sejoale-joale tsa lits'ebeletso li boetse li sebelisa li-algorithms tse bohlale tsa ho leka-lekanya mojaro. Ka ho lekola bophelo bo botle ba li-backends, ba ka romella sephethe-phethe se eketsehileng ho li-backends tse potlakileng, e leng se bakang ts'ebetso e ntlafetseng ka kakaretso.

Tshireletso betere hape. DotCloud routing mesh e ile ea sebetsa ka ho feletseng ho EC2 Classic 'me ha ea ka ea patala sephethephethe (ho itšetlehile ka maikutlo a hore haeba motho e mong a khonne ho kenya sniffer ho sephethephethe sa marang-rang sa EC2, u ne u se u ntse u le mathateng a maholo). Li-meshes tsa lits'ebeletso tsa sejoale-joale li sireletsa sephethephethe sa rona ka mokhoa o hlakileng, mohlala, ka netefatso ea TLS le encryption e latelang.

Ho tsamaisa sephethephethe bakeng sa lits'ebeletso tsa sethala

Ho lokile, re buisane ka sephethephethe lipakeng tsa lits'ebetso, empa ho thoe'ng ka sethala sa dotCloud ka bosona?

Sethala ka boeona se ne se e-na le li-microservices tse ka bang lekholo tse ikarabellang bakeng sa mesebetsi e sa tšoaneng. Ba bang ba ile ba amohela likōpo tse tsoang ho ba bang, ’me ba bang e ne e le basebetsi ba ka morao ba neng ba hokahane le litšebeletso tse ling empa bona ka bobona ba sa amohele likhokahano. Leha ho le joalo, tšebeletso ka 'ngoe e tlameha ho tseba li-endpoints tsa liaterese tseo e hlokang ho hokela ho tsona.

Litšebeletso tse ngata tsa boemo bo holimo li ka sebelisa marang-rang a hlalositsoeng ka holimo. Ebile, boholo ba li-microservices tse fetang lekholo tsa dotCloud li kentsoe joalo ka lits'ebetso tse tloaelehileng sethaleng sa dotCloud ka bosona. Empa palo e fokolang ea litšebeletso tsa boemo bo tlaase (haholo-holo tse kenyang ts'ebetso ena ea marang-rang) e ne e hloka ntho e bonolo haholoanyane, e nang le mekhoa e fokolang (kaha ba ne ba sitoa ho itšetleha ka bona ho sebetsa - bothata bo botle ba likhoho le lehe).

Litšebeletso tsena tsa boemo bo tlase, tse bohlokoa haholo li ile tsa sebelisoa ka ho tsamaisa lijana ka kotloloho litsing tse 'maloa tsa bohlokoa. Tabeng ena, litšebeletso tse tloaelehileng tsa sethala ha lia ka tsa sebelisoa: sehokelo, sehlophisi le semathi. Haeba u batla ho ipapisa le liforomo tsa sejoale-joale tsa setshelo, ho tšoana le ho tsamaisa sefofane sa taolo ka docker run ka kotloloho ho li-node, ho fapana le ho abela Kubernetes mosebetsi. E tšoana hantle ka mohopolo static modules (pods), eo e e sebelisang kubeadm kapa bootkube ha o qala sehlopha se ikemetseng.

Litšebeletso tsena li ile tsa pepesoa ka mokhoa o bonolo le o mobe: faele ea YAML e thathamisitse mabitso le liaterese tsa bona; 'me moreki e mong le e mong o ne a tlameha ho nka kopi ea faele ena ea YAML bakeng sa ho e romela.

Ka lehlakoreng le leng, e ka tšeptjoa haholo hobane ha e hloke tšehetso ea senotlolo sa kantle / lebenkele la boleng joalo ka Zookeeper (hopola, joalo-joalo kapa Consul e ne e le sieo ka nako eo). Ka lehlakoreng le leng, ho ne ho etsa hore ho be thata ho tsamaisa litšebeletso. Nako le nako ha ts'ebetso e etsoa, ​​bareki bohle ba ne ba tla fumana faele ea YAML e ntlafalitsoeng ('me e kanna ea qala bocha). Ha e phutholohe haholo!

Kamora moo, re ile ra qala ho kenya ts'ebetsong leano le lecha, moo moreki e mong le e mong a hokahantseng le seva ea proxy ea lehae. Sebakeng sa aterese le boema-kepe, e hloka feela ho tseba nomoro ea boema-kepe ea ts'ebeletso, ebe o hokela ka eona localhost. Moemeli oa lehae o sebetsana le khokahano ena ebe o e fetisetsa ho seva sa nnete. Hona joale, ha u tsamaisa mokokotlo ho mochine o mong kapa ho phahamisa, ho e-na le ho ntlafatsa bareki bohle, u hloka feela ho ntlafatsa li-proxies tsena tsohle tsa lehae; 'me ho qala bocha ha ho sa hlokahala.

(Ho ne ho boetse ho reriloe ho kenyelletsa sephethephethe ho likhokahano tsa TLS le ho beha seva e 'ngoe ea proxy ka lehlakoreng le amohelang, hammoho le ho netefatsa litifikeiti tsa TLS ntle le ho kenya letsoho mosebetsing oa ho amohela, o lokiselitsoeng ho amohela likhokahano feela localhost. Tse ling ka sena hamorao).

Sena se tšoana haholo le SmartStack ho tsoa ho Airbnb, empa phapang e kholo ke hore SmartStack e kengoa ts'ebetsong le ho fetisetsoa tlhahiso, ha tsamaiso ea ka hare ea dotCloud e ne e bolokiloe ha dotCloud e fetoha Docker.

Ke nka SmartStack e le e mong oa ba pele ho litsamaiso tse kang Istio, Linkerd le Consul Connect hobane kaofela li latela mokhoa o tšoanang:

  • Matha proxy sebakeng se seng le se seng.
  • Bareki ba hokela ho moemeli.
  • Sefofane sa taolo se ntlafatsa tlhophiso ea proxy ha li-backends li fetoha.
  • ... Phaello!

Ts'ebetso ea sejoale-joale ea mesh ea litšebeletso

Haeba ho ne ho hlokahala hore re sebelise grid e tšoanang kajeno, re ne re ka sebelisa melao-motheo e tšoanang. Mohlala, lokisa sebaka sa kahare sa DNS ka ho etsa 'mapa oa mabitso a lits'ebeletso ho liaterese tse sebakeng 127.0.0.0/8. Ebe u tsamaisa HAProxy sebakeng se seng le se seng sehlopheng, u amohela likhokahano atereseng e 'ngoe le e' ngoe ea litšebeletso (ka har'a subnet eo. 127.0.0.0/8) le ho tsamaisa / ho leka-lekanya mojaro ho li-backend tse loketseng. Sebopeho sa HAProxy se ka laoloa confd, e u lumellang ho boloka tlhahisoleseding ea backend ho etcd kapa Consul le ho sutumelletsa ka ho toba tlhophiso e ntlafalitsoeng ho HAProxy ha ho hlokahala.

Ena ke tsela eo Istio e sebetsang ka eona! Empa ka liphapang tse ling:

  • Lisebelisoa Moemeli oa moemeli sebakeng sa HAProxy.
  • Mabenkele tlhophiso ea backend ka Kubernetes API ho fapana le etcd kapa Consul.
  • Litšebeletso li abeloa liaterese ho subnet e ka hare (liaterese tsa Kubernetes ClusterIP) sebakeng sa 127.0.0.0/8.
  • E na le karolo e 'ngoe (Citadel) ho kenyelletsa netefatso ea TLS lipakeng tsa moreki le li-server.
  • E ts'ehetsa likarolo tse ncha tse kang ho robeha ha potoloho, ho ts'oara ho tsamaisoa, ho tsamaisoa ha canary, joalo-joalo.

A re hlahlobeng ka potlako tse ling tsa liphapang.

Moemeli oa moemeli

Moemeli oa moemeli o ngotsoe ke Lyft [mohlolisani oa Uber 'marakeng oa litekesi - hoo e ka bang. tsela]. E tšoana ka litsela tse ngata ho li-proxies tse ling (mohlala, HAProxy, Nginx, Traefik ...), empa Lyft e ngotse ea bona hobane ba ne ba hloka likarolo tseo li-proxies tse ling li neng li se na tsona, 'me ho ne ho bonahala ho le bohlale ho etsa e ncha ho e-na le ho atolosa e teng.

Moemeli a ka sebelisoa a le mong. Haeba ke na le ts'ebeletso e itseng e lokelang ho hokela lits'ebeletso tse ling, nka e hlophisa hore e hokahane le Envoy, ebe ke hlophisa ka matla le ho hlophisa Moemeli ka sebaka sa lits'ebeletso tse ling, ha ke ntse ke fumana ts'ebetso e mengata e kholo e eketsehileng, joalo ka ponahalo. Sebakeng sa laeborari ea bareki ba tloaelo kapa ho kenya mehala ea mohala ka har'a khoutu, re romella sephethephethe ho Envoy, 'me e re bokellela metrics.

Empa Envoy o boetse o khona ho sebetsa joalo ka sefofane sa data (sefofane sa data) bakeng sa mesh ea litšebeletso. Sena se bolela hore Envoy e se e lokiselitsoe mesh ena ea litšebeletso sefofane se laolang (sefofane sa taolo).

Laola sefofane

Bakeng sa sefofane sa taolo, Istio e itšetlehile ka Kubernetes API. Sena ha se fapane haholo le ho sebelisa confd, e itšetlehileng ka etcd kapa Consul ho sheba sete ea linotlolo lebenkeleng la data. Istio e sebelisa Kubernetes API ho sheba sehlopha sa lisebelisoa tsa Kubernetes.

Pakeng tsa sena le ka nako eo: Ke fumane sena se le molemo Kubernetes API tlhalosoe balehang tjena:

Kubernetes API Server ke "server e sa tsebeng letho" e fanang ka polokelo, phetolelo, netefatso, ntlafatso, le semantics bakeng sa lisebelisoa tsa API.

Istio e etselitsoe ho sebetsa le Kubernetes; 'me haeba u batla ho e sebelisa ka ntle ho Kubernetes, joale u lokela ho etsa mohlala oa seva sa Kubernetes API (le tšebeletso ea mothusi oa etcd).

Liaterese tsa litšebeletso

Istio e itšetlehile ka liaterese tsa ClusterIP tseo Kubernetes a li abelang, kahoo litšebeletso tsa Istio li fumana aterese ea ka hare (eseng sebakeng se fapaneng). 127.0.0.0/8).

Sephethephethe se eang atereseng ea ClusterIP bakeng sa ts'ebeletso e ikhethileng ho sehlopha sa Kubernetes ntle le Istio se haptjoa ke kube-moemeli ebe se romelloa ka morao ho moemeli eo. Haeba u thahasella lintlha tsa tekheniki, kube-proxy e theha melao ea iptables (kapa IPVS load balancers, ho latela hore na e hlophisitsoe joang) ho ngola bocha liaterese tsa IP tsa likhokahano tse eang atereseng ea ClusterIP.

Hang ha Istio e kentsoe sehlopheng sa Kubernetes, ha ho letho le fetohang ho fihlela le lumelloa ka ho hlaka bakeng sa moreki ea fanoeng, kapa esita le sebaka sohle sa mabitso, ka ho hlahisa setshelo. sidecar ho li-pods tse ikhethileng. Sets'oants'o sena se tla hlahisa mohlala oa Envoy le ho theha melao ea iptables ho thibela sephethephethe se eang litšebeletsong tse ling le ho fetisetsa sephethephethe seo ho Envoy.

Ha e kopantsoe le Kubernetes DNS, sena se bolela hore khoutu ea rona e ka hokela ka lebitso la ts'ebeletso mme ntho e ngoe le e ngoe "e sebetsa feela." Ka mantsoe a mang, khoutu ea rona e fana ka lipotso tse kang http://api/v1/users/4242ebe api rarolla kopo bakeng sa 10.97.105.48, melao ea iptables e tla thibela likhokahano ho tloha 10.97.105.48 ebe e li fetisetsa ho moemeli oa Moemeli oa sebakeng seo, 'me moemeli eo oa sebaka o tla fetisetsa kopo ho API ea sebele ea morao-rao. Phew!

Li-frills tse eketsehileng

Istio e boetse e fana ka encryption ea ho qetela le netefatso ka mTLS (mutual TLS). Karolo e bitsoang Citadel.

Ho boetse ho na le karolo mixer, eo Moemeli a ka e kopang ea e 'ngoe le e' ngoe kopa ho etsa qeto e khethehileng mabapi le kopo eo ho itšetlehile ka lintlha tse fapaneng tse kang lihlooho, backend load, joalo-joalo ... (u se ke ua tšoenyeha: ho na le litsela tse ngata tsa ho boloka Mixer e sebetsa, esita le haeba e ka senyeha, Envoy e tla tsoela pele ho sebetsa. hantle joalo ka moemeli) .

Mme, ehlile, re boletse ponahalo: Envoy e bokella palo e kholo ea metrics ha e ntse e fana ka tatellano e phatlalalitsoeng. Moahong oa li-microservices, haeba kopo e le 'ngoe ea API e tlameha ho feta ho li-microservices A, B, C, le D, ebe ha u kena, ts'ebetso e abuoang e tla eketsa sesupo se ikhethileng kopong le ho boloka sesupo sena ka likopo tse tlase ho li-microservices tsena kaofela, ho lumella. mehala eohle e amanang le eona e tla tšoaroa. litiehiso, jj.

Hlahisa kapa reka

Istio e na le botumo ba ho rarahana. Ka lehlakoreng le leng, ho aha marang-rang ao ke a hlalositseng qalong ea poso ena ho bonolo ho sebelisa lisebelisoa tse teng. Joale, na hoa utloahala ho iketsetsa mesh ea lits'ebeletso ho fapana le hoo?

Haeba re na le litlhoko tse itekanetseng (ha re hloke ponahalo, sekhechana sa potoloho le lintho tse ling tse poteletseng), joale menahano e tla ho iketsetsa sesebelisoa sa rona. Empa haeba re sebelisa Kubernetes, e kanna ea se ke ea hlokahala hobane Kubernetes e se e ntse e fana ka lisebelisoa tsa mantlha bakeng sa ho sibolla litšebeletso le ho leka-lekanya mojaro.

Empa haeba re na le litlhoko tse tsoetseng pele, joale "ho reka" mesh ea tšebeletso ho bonahala e le khetho e ntle haholo. (Sena ha se kamehla "reka" hobane Istio ke mohloli o bulehileng, empa re ntse re hloka ho tsetela nako ea boenjiniere ho e utloisisa, ho e sebelisa le ho e laola.)

Na ke lokela ho khetha Istio, Linkerd kapa Consul Connect?

Ho fihlela joale re buile feela ka Istio, empa ena ha se eona feela mesh ea litšebeletso. Mefuta e meng e tsebahalang - Linkerd, mme ho na le ho feta Consul Connect.

Ke eng eo u lokelang ho e khetha?

Ka 'nete, ha ke tsebe. Hajoale ha ke inke ke na le bokhoni bo lekaneng ba ho araba potso ena. Ho na le tse seng kae thahasellisang lihlooho ka papiso ea lisebelisoa tsena le esita le litekanyetso.

Mokhoa o mong o ts'episang ke ho sebelisa sesebelisoa joalo ka SuperGloo. E kenya tšebetsong lekhalo le khutsufatsang ho nolofatsa le ho kopanya li-API tse pepesitsoeng ke meshes ea lits'ebeletso. Sebakeng sa ho ithuta li-API tse ikhethileng (mme, ka maikutlo a ka, tse rarahaneng) tsa li-meshes tse fapaneng tsa lits'ebeletso, re ka sebelisa lisebelisoa tse bonolo tsa SuperGloo - mme ra fetoha habonolo ho tloha ho e 'ngoe ho ea ho e' ngoe, joalo ka ha eka re na le sebopeho sa tlhophiso se mahareng se hlalosang li-interface tsa HTTP le li-backend tse nang le bokhoni. ea ho hlahisa tlhophiso ea 'nete ea Nginx, HAProxy, Traefik, Apache...

Ke ikopantse hanyenyane le Istio le SuperGloo, 'me sehloohong se latelang ke batla ho bontša mokhoa oa ho eketsa Istio kapa Linkerd ho sehlopha se teng se sebelisang SuperGloo, le hore na ea morao-rao o etsa mosebetsi joang, ke hore, o u lumella ho tloha letlooeng le leng la litšebeletso ho ea ho le leng ntle le ho hlakola litlhophiso.

Source: www.habr.com

Eketsa ka tlhaloso