[Phetolelo] Moetso oa khoele ea moemeli

Phetolelo ea sengoloa: Moetso oa likhoele tsa moemeli - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

Ke fumane sengoloa sena se thahasellisa haholo, 'me kaha Envoy e sebelisoa hangata e le karolo ea "istio" kapa feela e le "ingress controller" ea kubernetes, batho ba bangata ha ba na tšebelisano e tobileng le eona joalo ka mohlala, ka mokhoa o tloaelehileng. Lisebelisoa tsa Nginx kapa Haproxy. Leha ho le joalo, haeba ntho e robeha, ho ka ba molemo ho utloisisa hore na e sebetsa joang ho tsoa ka hare. Ke ile ka leka ho fetolela taba e ngotsoeng ka Serussia ka hohle kamoo ho ka khonehang, ho kopanyelletsa le mantsoe a khethehileng; bakeng sa ba fumanang ho le bohloko ho sheba sena, ke ile ka siea tsa pele ka masakaneng. Rea u amohela ho katse.

Litokomane tsa boemo bo tlase tsa tekheniki bakeng sa Codebase ea Envoy hajoale li fokola haholo. Ho lokisa sena, ke rera ho etsa letoto la li-post tsa blog mabapi le li-subsystem tse fapaneng tsa Envoy. Kaha ena ke sehlooho sa pele, ka kōpo ntsebise seo u se nahanang le seo u ka ’nang ua se thahasella lihloohong tse tlang.

E 'ngoe ea lipotso tse atileng haholo tsa tekheniki tseo ke li fumanang ka Envoy ke ho kopa tlhaloso e tlase ea mofuta oa khoele eo o e sebelisang. Ka poso ena, ke tla hlalosa kamoo Moemeli a hokahanyang likhoele le likhoele, hammoho le Sistimi ea polokelo ea lehae ea Thread eo e e sebelisang ka hare ho etsa khoutu e bapaneng le ho sebetsa hantle haholo.

Kakaretso ea khoele

[Phetolelo] Moetso oa khoele ea moemeli

Moemeli o sebelisa mefuta e meraro e fapaneng ea melapo:

  • E ka sehloohong: Khoele ena e laola ts'ebetso ea ho qala le ho felisoa, ts'ebetso eohle ea XDS (xDiscovery Service) API, ho kenyeletsoa DNS, tlhahlobo ea bophelo bo botle, sehlopha se akaretsang le taolo ea nako ea ho sebetsa, reset ea lipalo-palo, tsamaiso le taolo ea ts'ebetso e akaretsang - matšoao a Linux. ho qala bocha, joalo-joalo. se etsahalang khoeleng ena ke asynchronous le "non-blocking". Ka kakaretso, khoele e kholo e hokahanya lits'ebetso tsohle tsa bohlokoa tse sa hlokeng palo e kholo ea CPU ho sebetsa. Sena se lumella boholo ba khoutu ea taolo hore e ngoloe joalo ka ha eka ke khoele e le 'ngoe.
  • Mosebetsi: Ka ho sa feleng, Envoy o etsa khoele ea basebetsi bakeng sa khoele e 'ngoe le e 'ngoe ea hardware tsamaisong, sena se ka laoloa ho sebelisa khetho --concurrency. Khoele e 'ngoe le e' ngoe ea basebetsi e tsamaisa "loop e sa thibeleng" ea ketsahalo, e ikarabellang ho mamela momameli e mong le e mong; ka nako ea ho ngola (Phupu 29, 2017) ha ho na sharding ea momameli, ho amohela likhokahano tse ncha, ho kenya sethala sa filthara bakeng sa khokahanyo, le ho sebetsana le lits'ebetso tsohle tsa ho kenya / ho tsoa (IO) nakong ea bophelo bohle ba khokahano. Hape, sena se lumella boholo ba khoutu ea ho sebetsana le khokahanyo hore e ngoloe joalokaha eka ke khoele e le 'ngoe.
  • Flusher ea faele: Faele e 'ngoe le e' ngoe eo Envoy a e ngolang, haholo-holo ho fihlella li-log, hajoale e na le khoele e thibelang e ikemetseng. Sena se bakoa ke taba ea hore ho ngolla lifaele tse bolokiloeng ke sistimi ea faele leha o sebelisa O_NONBLOCK ka linako tse ling e ka thijoa (ho feheloa). Ha likhoele tsa basebetsi li hloka ho ngolla faele, data e fetisetsoa ho buffer mohopolong moo e qetellang e phunyeletsoa ka khoele. hlakola faele. Ena ke sebaka se le seng sa khoutu moo ka botekgeniki likhoele tsohle tsa basebetsi li ka thibelang senotlolo se le seng ha u ntse u leka ho tlatsa buffer ea memori.

Ho sebetsana le khokahano

Joalokaha ho boletsoe ka bokhuts'oane ka holimo, likhoele tsohle tsa basebetsi li mamela bamameli bohle ntle le ho shard. Ka hona, kernel e sebelisoa ho romella ka bokhabane li-sockets ho likhoele tsa basebetsi. Litholoana tsa sejoale-joale li sebetsa hantle haholo ho sena, li sebelisa likarolo tse kang input/output (IO) ho eketsa pele ho leka ho tlatsa khoele ka mosebetsi pele li qala ho sebelisa likhoele tse ling tse mametseng soketeng e le 'ngoe, hape li sa sebelise robin e chitja. notlela (Spinlock) ho sebetsa kopo ka 'ngoe.
Hang ha khokahano e amoheloa khoeleng ea basebetsi, ha e tlohe khoele eo. Ts'ebetso eohle e tsoelang pele ea khokahano e sebetsoa ka botlalo khoeleng ea basebetsi, ho kenyeletsoa le boits'oaro bofe kapa bofe ba ho fetisa.

Sena se na le litlamorao tse 'maloa tsa bohlokoa:

  • Matamo ohle a khokahano ho Envoy a abeloa khoele ea basebetsi. Kahoo, leha matamo a khokahano a HTTP/2 a etsa khokahano e le 'ngoe ho moamoheli e mong le e mong ea holimo ka nako, haeba ho na le likhoele tse' nè tsa basebetsi, ho tla ba le likhokahano tse 'ne tsa HTTP/2 ho moamoheli ea holimo sebakeng se tsitsitseng.
  • Lebaka leo ka lona Moemeli a sebetsang ka tsela ena ke hore ka ho boloka ntho e 'ngoe le e' ngoe ka khoele e le 'ngoe ea basebetsi, hoo e batlang e le khoutu eohle e ka ngoloa ntle le ho thibela le joalokaha eka e entsoe ka khoele e le 'ngoe. Moralo ona o etsa hore ho be bonolo ho ngola khoutu e ngata le sekala hantle ho isa palo e batlang e se na moeli ea likhoele tsa basebetsi.
  • Leha ho le joalo, e 'ngoe ea lintho tse ka sehloohong tse nkiloeng ke hore ho tloha ka letamo la memori le pono e nepahetseng ea khokahano, ho bohlokoa haholo ho hlophisa --concurrency. Ho ba le likhoele tse ngata tsa basebetsi ho feta kamoo ho hlokahalang ho tla senya mohopolo, ho theha likhokahano tse sa sebetseng, le ho fokotsa sekhahla sa khokahano ea khokahano. Ha re le Lyft, lijana tsa rona tsa li-sidecar li tsamaisana le chelete e tlase haholo hoo ts'ebetso e batlang e tšoana le lits'ebeletso tseo ba lutseng haufi le tsona. Re tsamaisa Envoy joalo ka moemeli oa moeli feela ka chelete e ngata.

Ho se thibela ho bolela eng?

Lentsoe "non-blocking" le sebelisitsoe makhetlo a 'maloa ho fihlela joale ha ho buisanoa ka hore na likhoele tse kholo le tsa basebetsi li sebetsa joang. Khoutu eohle e ngotsoe ka maikutlo a hore ha ho letho le kileng la thijoa. Leha ho le joalo, sena hase 'nete ka ho feletseng (ke eng seo e seng 'nete ka ho feletseng?).

Moemeli o sebelisa linotlolo tse 'maloa tse telele tsa ts'ebetso:

  • Joalo ka ha ho boletsoe, ha u ngola li-log tsa phihlello, likhoele tsohle tsa basebetsi li fumana senotlolo se tšoanang pele buffer ea memoring e tlatsoa. Nako ea ho ts'oara senotlolo e lokela ho ba tlase haholo, empa ho ka khoneha hore senotlolo se ka hanyetsoa ka chelete e ngata le ho feta.
  • Moemeli o sebelisa mokhoa o rarahaneng haholo ho sebetsana le lipalo-palo tse sebakeng sa khoele. Ena e tla ba sehlooho sa poso e arohaneng. Leha ho le joalo, ke tla bolela ka bokhutšoanyane hore e le karolo ea ho sebetsana le lipalo-palo sebakeng sa heno, ka linako tse ling hoa hlokahala ho fumana senotlolo ho "stats store" e bohareng. Ho notlela hona ha hoa lokela ho hlokahala.
  • Khoele e kholo nako le nako e hloka ho hokahana le likhoele tsohle tsa basebetsi. Sena se etsoa ka "phatlalatso" ho tloha khoeleng e kholo ho ea ho likhoele tsa basebetsi, 'me ka linako tse ling ho tloha ho likhoele tsa basebetsi ho khutlela khoeleng e kholo. Ho romela ho hloka senotlolo e le hore molaetsa o phatlalalitsoeng o ka hlongoa moleng bakeng sa ho tlisoa hamorao. Liloko tsena ha lia lokela ho hanyetsoa ka matla, empa li ntse li ka thibeloa ka botekgeniki.
  • Ha Envoy a ngola logi ho molapo oa phoso ea sistimi (phoso e tloaelehileng), e fumana senotlolo ts'ebetsong eohle. Ka kakaretso, ho rema lifate sebakeng sa Envoy ho nkoa e le ntho e mpe ho ea ka pono ea ts'ebetso, kahoo ha ho so ka ho fanoa ka tlhokomelo e ngata ho e ntlafatsa.
  • Ho na le linotlolo tse ling tse 'maloa tse sa reroang, empa ha ho le e' ngoe ea tsona e bohlokoa haholo 'me ha ea lokela ho phephetsoa.

Khoele polokelo ea lehae

Ka lebaka la tsela eo Moemeli a arolang boikarabelo ba khoele e ka sehloohong le boikarabelo ba khoele ea basebetsi, ho na le tlhokahalo ea hore ts'ebetso e rarahaneng e ka etsoa holim'a khoele e kholo ebe e fuoa khoele e 'ngoe le e' ngoe ea basebetsi ka mokhoa o ts'oanang haholo. Karolo ena e hlalosa Envoy Thread Local Storage (TLS) maemong a holimo. Karolong e latelang ke tla hlalosa hore na e sebelisoa joang ho laola sehlopha.
[Phetolelo] Moetso oa khoele ea moemeli

Joalokaha ho se ho hlalositsoe, khoele e ka sehloohong e sebetsana le hoo e batlang e le lits'ebetso tsohle tsa lifofane tsa tsamaiso le taolo ts'ebetsong ea Envoy. Sefofane sa taolo se batla se imetsoe mona, empa ha u se sheba ka har'a Tsamaiso ea Moemeli ka boeona 'me u se bapisa le phetisetso eo likhoele tsa basebetsi li e etsang, hoa utloahala. Molao o akaretsang ke hore ts'ebetso e kholo ea khoele e etsa mosebetsi o itseng, ebe e hloka ho nchafatsa khoele e 'ngoe le e 'ngoe ea basebetsi ho latela sephetho sa mosebetsi oo. Tabeng ena, khoele ea basebetsi ha e hloke ho fumana senotlolo ho phihlello ka 'ngoe.

Sistimi ea Envoy's TLS (Thread local storage) e sebetsa ka tsela e latelang:

  • Khoutu e sebetsang khoeleng e kholo e ka abela sekotjana sa TLS bakeng sa ts'ebetso eohle. Leha sena se qotsuoe, ha e le hantle ke index ea vector, e fanang ka phihlello ea O(1).
  • Khoele e kholo e ka kenya data e sa reroang ka har'a slot ea eona. Ha sena se etsoa, ​​​​data e phatlalatsoa ho khoele e 'ngoe le e' ngoe ea basebetsi e le ketsahalo e tloaelehileng ea loop ea ketsahalo.
  • Likhoele tsa basebetsi li ka bala ho tsoa ho sekotjana sa bona sa TLS le ho fumana data efe kapa efe ea lehae e fumanehang moo.

Leha e le paradigm e bonolo haholo ebile e matla ka mokhoa o makatsang, e ts'oana haholo le mohopolo oa ho thibela RCU(Read-Copy-Update). Ha e le hantle, likhoele tsa basebetsi ha li bone liphetoho tsa data litsing tsa TLS ha mosebetsi o ntse o sebetsa. Phetoho e etsahala feela nakong ea phomolo pakeng tsa liketsahalo tsa mosebetsi.

Moemeli o sebelisa sena ka litsela tse peli tse fapaneng:

  • Ka ho boloka data e fapaneng khoeleng e 'ngoe le e' ngoe ea basebetsi, data e ka fumaneha ntle le ho thibela.
  • Ka ho boloka sesupa se arolelanoang ho data ea lefats'e ka mokhoa oa ho bala feela khoeleng e 'ngoe le e 'ngoe ea basebetsi. Kahoo, khoele e 'ngoe le e' ngoe ea basebetsi e na le palo ea litšupiso tsa data e ke keng ea fokotsoa ha mosebetsi o ntse o sebetsa. Ke feela ha basebetsi bohle ba kokobela mme ba kenya data e ncha e arolelanoang moo data ea khale e tla senyeha. Sena se tšoana le RCU.

Cluster update threading

Karolong ena, ke tla hlalosa kamoo TLS (Thread local storage) e sebelisoang ho laola sehlopha. Tsamaiso ea lihlopha e kenyelletsa xDS API le/kapa ts'ebetso ea DNS, hammoho le tlhahlobo ea bophelo bo botle.
[Phetolelo] Moetso oa khoele ea moemeli

Tsamaiso ea phallo ea lihlopha e kenyelletsa likarolo le mehato e latelang:

  1. Cluster Manager ke karolo e ka hare ho Envoy e laolang libaka tsohle tse tsebahalang tsa lihlopha tse holimo, Cluster Discovery Service (CDS) API, Secret Discovery Service (SDS) le Endpoint Discovery Service (EDS) APIs, DNS, le licheke tsa kantle tse sebetsang. E na le boikarabello ba ho theha "pono ​​e tsitsitseng" ea sehlopha se seng le se seng se hloahloa, se kenyelletsang baamoheli ba sibollotsoeng hammoho le boemo ba bophelo bo botle.
  2. Mohlahlobi oa bophelo o etsa tlhahlobo e sebetsang ea bophelo bo botle mme o tlaleha liphetoho tsa boemo ba bophelo ho mookameli oa sehlopha.
  3. CDS (Cluster Discovery Service) / SDS (Secret Discovery Service) / EDS (Endpoint Discovery Service) / DNS e etsoa ho fumana litho tsa sehlopha. Phetoho ea boemo e khutlisetsoa ho molaoli oa sehlopha.
  4. Khoele e 'ngoe le e 'ngoe ea basebetsi e tsoela pele ho etsa loop ea ketsahalo.
  5. Ha molaoli oa sehlopha a etsa qeto ea hore boemo ba sehlopha bo fetohile, o theha setšoantšo se secha sa ho bala feela sa boemo ba sehlopha ebe o se romela ho khoele e 'ngoe le e 'ngoe ea basebetsi.
  6. Nakong e tlang e khutsitseng, khoele ea basebetsi e tla ntlafatsa senepe se sekoting sa TLS se abetsoeng.
  7. Nakong ea ketsahalo ea I/O e lokelang ho tsebahatsa moamoheli hore a jale tekanyo, sekala sa mojaro se tla kopa slot ea TLS (Thread local storage) ho fumana tlhahisoleseling mabapi le moamoheli. Sena ha se hloke liloko. Hape hlokomela hore TLS e ka boela ea tsosa liketsahalo tsa ntlafatso e le hore li-balancers tsa mojaro le likarolo tse ling li khone ho bala li-cache, meaho ea data, jj. Sena se ka nqane ho sebaka sa poso ena, empa se sebelisoa libakeng tse fapaneng khoutu.

Ka ho sebelisa mokhoa o ka holimo, Envoy e ka sebetsana le kopo e 'ngoe le e' ngoe ntle le ho thibela letho (ntle le joalokaha ho hlalositsoe pejana). Ntle le ho rarahana ha khoutu ea TLS ka boeona, boholo ba khoutu ha bo hloke ho utloisisa hore na multithreading e sebetsa joang mme e ka ngoloa ka khoele e le 'ngoe. Sena se etsa hore boholo ba khoutu e be bonolo ho e ngola ntle le ts'ebetso e phahameng.

Lisebelisoa tse ling tse sebelisang TLS

TLS (Thread local storage) le RCU (Read Copy Update) li sebelisoa haholo ho Envoy.

Mehlala ea tšebeliso:

  • Mokhoa oa ho fetola ts'ebetso nakong ea ts'ebetso: Lenane la hajoale la tšebetso e lumelletsoeng le baloa ho khoele e kholo. Khoele e 'ngoe le e 'ngoe ea basebetsi e fuoa senepe se baloang feela ho sebelisoa semantics ea RCU.
  • Ho fetola litafole tsa litsela: Bakeng sa litafole tsa litsela tse fanoeng ke RDS (Tšebeletso ea ho Fumana Tsela), litafole tsa litsela li bōptjoa khoeleng e kholo. Ka mor'a moo, senepe sa ho bala feela se tla fuoa khoele e 'ngoe le e 'ngoe ho sebelisoa semantics ea RCU (Read Copy Update). Sena se etsa hore ho fetola litafole tsa litsela ho sebetse hantle.
  • Caching hlooho ea HTTP: Ha ho ntse ho le joalo, ho bala hlooho ea HTTP bakeng sa kopo e 'ngoe le e' ngoe (ha u ntse u sebetsa ~ 25K + RPS ka mantlha) ho theko e boima haholo. Moemeli o kopanya hlooho hoo e ka bang halofo ea motsotsoana o mong le o mong ebe o e fa mosebeletsi e mong le e mong ka TLS le RCU.

Ho na le linyeoe tse ling, empa mehlala e fetileng e lokela ho fana ka kutloisiso e ntle ea hore na TLS e sebelisetsoa eng.

Likotsi tse tsebahalang tsa ts'ebetso

Le ha Envoy e sebetsa hantle ka kakaretso, ho na le libaka tse 'maloa tse hlokomelehang tse hlokang tlhokomelo ha e sebelisoa ka tumellano e phahameng haholo le tšebetso:

  • Joalo ka ha ho hlalositsoe sengoloa sena, hajoale likhoele tsohle tsa basebetsi li fumana senotlolo ha li ngolla buffer ea memori ea phihlello. Ha u sebelisa chelete e ngata 'me u sebelisa chelete e ngata, u tla hloka ho bokella li-log tsa ho kena bakeng sa khoele e 'ngoe le e 'ngoe ea basebetsi ka litšenyehelo tsa ho fana ka ntle ho taelo ha u ngolla faele ea ho qetela. Ntle le moo, o ka theha lethathamo la phihlello le arohaneng bakeng sa khoele e 'ngoe le e 'ngoe ea basebetsi.
  • Leha lipalo-palo li ntlafalitsoe haholo, ha li sebelisana le chelete e ngata haholo ho ka 'na ha e-ba le likhohlano tsa athomo ho lipalo-palo tsa motho ka mong. Tharollo ea bothata bona ke li-counters ka khoele e 'ngoe le e 'ngoe e nang le nako le nako ea li-central reset. Sena se tla tšohloa posong e latelang.
  • Mohaho oa hajoale o ke ke oa sebetsa hantle haeba Moemeli a behiloe sebakeng seo ho nang le likhokahano tse fokolang haholo tse hlokang lisebelisoa tsa bohlokoa tsa ts'ebetso. Ha ho na tiiso ea hore likhokahano li tla aroloa ka ho lekana har'a likhoele tsa basebetsi. Sena se ka rarolloa ka ho kenya ts'ebetsong ho leka-lekanya ho hokahanya ha basebetsi, ho tla lumella phapanyetsano ea likamano pakeng tsa likhoele tsa basebetsi.

Qetello

Moetso oa ho roka oa Evoy o etselitsoe ho fana ka boiketlo ba ho hlophisa le ho tsamaisana ho hoholo ka litšenyehelo tsa mohopolo o senyehileng le likhokahano haeba li sa hlophisoa hantle. Moetso ona o o lumella ho sebetsa hantle haholo ka lipalo tse phahameng haholo tsa likhoele le ho feta.
Joalokaha ke boletse ka bokhutšoanyane ho Twitter, moqapi o ka boela oa sebetsa ka holim'a marang-rang a marang-rang a marang-rang a kang DPDK (Data Plane Development Kit), e leng se ka fellang ka li-server tse tloaelehileng tse sebetsanang le likopo tse limilione ka motsotsoana ka ts'ebetso e feletseng ea L7. E tla ba ho khahlisang haholo ho bona se tla hahuoa lilemong tse 'maloa tse tlang.
Tlhaloso e le 'ngoe ea ho qetela e potlakileng: Ke 'nile ka botsoa hangata hore na ke hobane'ng ha re khethile C++ bakeng sa Envoy. Lebaka ke hore e ntse e le eona feela puo ea boemo ba indasteri e sebelisoang haholo eo moaho o hlalositsoeng posong ena o ka hahoang. C++ ha e ea lokela merero eohle kapa e mengata, empa bakeng sa maemo a itseng a ts'ebeliso e ntse e le eona feela sesebelisoa sa ho etsa mosebetsi.

Lihokelo tsa khoutu

Lihokelo tsa lifaele tse nang le li-interfaces le ts'ebetsong ea lihlooho tse tšohloang posong ena:

Source: www.habr.com

Eketsa ka tlhaloso