[Ukuhumusha] Imodeli yokuthungatha yezithunywa

Ukuhunyushwa kwesihloko: Imodeli yokuhlanganisa yezithunywa - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

Ngithole lesi sihloko sithakazelisa kakhulu, futhi njengoba i-Envoy ivame ukusetshenziswa njengengxenye ye-"istio" noma nje "njenge-ingress controller" ye-kubernetes, abantu abaningi abanakho ukuxhumana okuqondile okufanayo njengokuthi, ngokwesibonelo, Ukufakwa kwe-Nginx noma i-Haproxy. Kodwa-ke, uma okuthile kuphuka, kungaba kuhle ukuqonda ukuthi kusebenza kanjani ngaphakathi. Ngizamile ukuhumushela umbhalo omningi olimini lwesiRashiya ngangokunokwenzeka, kuhlanganise namagama akhethekile; kulabo abakuthola kubuhlungu ukubheka lokhu, ngishiye eyoqobo kubakaki. Siyakwamukela kukati.

Amadokhumenti obuchwepheshe asezingeni eliphansi e-codebase Yezithunywa okwamanje ayingcosana. Ukulungisa lokhu, ngihlela ukwenza uchungechunge lokuthunyelwe kwebhulogi mayelana nezinhlelo ezingaphansi ezihlukahlukene ze-Envoy. Njengoba lesi kuyisihloko sokuqala, ngicela ungazise ukuthi yini oyicabangayo nokuthi yini ongase ube nesithakazelo kuyo ezihlokweni zesikhathi esizayo.

Omunye wemibuzo evame kakhulu yobuchwepheshe engiyitholayo mayelana nenxusa ukucela incazelo esezingeni eliphansi yemodeli yokulutha eyisebenzisayo. Kulokhu okuthunyelwe, ngizochaza ukuthi Inxusa lixhumanisa kanjani izintambo nemicu, kanye nohlelo lwe-Thread Local Storage olusebenzisa ngaphakathi ukwenza ikhodi ihambisane nokusebenza okuphezulu.

Ukubuka konke kochungechunge

[Ukuhumusha] Imodeli yokuthungatha yezithunywa

Inxusa isebenzisa izinhlobo ezintathu ezahlukene zokusakaza:

  • Okuyinhloko: Lolu chungechunge lulawula ukuqalisa nokunqanyulwa kwenqubo, konke ukucutshungulwa kwe-XDS (xDiscovery Service) API, okuhlanganisa i-DNS, ukuhlolwa kwezempilo, iqoqo elivamile nokuphathwa kwesikhathi sokusebenza, ukusetha kabusha izibalo, ukuphathwa nokuphathwa kwenqubo evamile - amasignali e-Linux. qala kabusha okushisayo, njll. Yonke into okwenzeka kulolu chungechunge asynchronous futhi "non-blocking". Ngokuvamile, intambo eyinhloko ihlanganisa zonke izinqubo zokusebenza ezibalulekile ezingadingi inani elikhulu le-CPU ukuze lisebenze. Lokhu kuvumela ikhodi yokulawula eminingi ukuthi ibhalwe njengokungathi iluchungechunge olulodwa.
  • Isisebenzi: Ngokuzenzakalelayo, Inxusa lidala intambo yesisebenzi yentambo ngayinye yehadiwe ohlelweni, lokhu kungalawulwa kusetshenziswa inketho --concurrency. Uchungechunge ngalunye lwesisebenzi lusebenzisa iluphu yomcimbi "engavimbeli", enesibopho sokulalela umlaleli ngamunye; ngesikhathi sokubhala (Julayi 29, 2017) akukho sharding yomlaleli, ukwamukela ukuxhumana okusha, ukufaka isitaki sokuhlunga uxhumano, nokucubungula yonke imisebenzi ye-input/output (IO) phakathi nesikhathi sokuphila sokuxhuma. Futhi, lokhu kuvumela amakhodi amaningi okuphatha ukuxhumana ukuthi abhalwe njengokungathi intambo eyodwa.
  • I-flusher yefayela: Ifayela ngalinye elibhalwa yi-Envoy, ngokuyinhloko finyelela amalogi, okwamanje linochungechunge oluzimele oluvimbayo. Lokhu kungenxa yokuthi ukubhala kumafayela agcinwe yisistimu yefayela ngisho nalapho usebenzisa O_NONBLOCK kwesinye isikhathi angavinjwa (ukububula). Lapho imicu yesisebenzi idinga ukubhalela efayeleni, idatha empeleni ithuthelwa ku-buffer kumemori lapho igcina ngokusulwa ngochungechunge. i-flush yefayela. Lena indawo eyodwa yekhodi lapho ngokobuchwepheshe zonke izintambo zezisebenzi zingavimba ukukhiya okufanayo ngenkathi zizama ukugcwalisa isilondolozi sememori.

Ukuphatha ukuxhumana

Njengoba kuxoxiwe kafushane ngenhla, zonke izintambo zabasebenzi zilalela bonke abalaleli ngaphandle kokwahlukanisa. Ngakho-ke, i-kernel isetshenziselwa ukuthumela ngomusa amasokhethi amukelwayo emiculweni yabasebenzi. Izikhwebu zesimanje ngokuvamile zinhle kakhulu kulokhu, zisebenzisa izici ezifana nokukhulisa i-input/output (IO) ukuze zizame ukugcwalisa intambo ngomsebenzi ngaphambi kokuba ziqale ukusebenzisa ezinye izintambo ezilalela kusokhethi efanayo, futhi zingasebenzisi i-robin eyindilinga. ukukhiya (Spinlock) ukucubungula isicelo ngasinye.
Uma uxhumano selwamukelwe ochungechungeni lwesisebenzi, alulokothi lushiye lowo ntambo. Konke ukucutshungulwa okuqhubekayo koxhumano kuphathwa ngokuphelele kuchungechunge lwesisebenzi, kufaka phakathi noma yikuphi ukuziphatha kokudlulisela.

Lokhu kunemiphumela embalwa ebalulekile:

  • Wonke amachibi okuxhumana ku-Envoy abelwe uchungechunge lwabasebenzi. Ngakho-ke, nakuba amachibi okuxhumana e-HTTP/2 enza ukuxhumana okukodwa kuphela kumsingathi ngamunye okhuphuka nomfula ngesikhathi, uma kunezintambo ezine zezisebenzi, kuzoba nokuxhumana okune kwe-HTTP/2 kumsingathi ngamunye okhuphuka nomfula esimweni esizinzile.
  • Isizathu sokuthi uMthunywa asebenze ngale ndlela ukuthi ngokugcina yonke into entanjeni eyodwa yesisebenzi, cishe yonke ikhodi ingabhalwa ngaphandle kokuvinjwa futhi njengokungathi ifakwe intambo eyodwa. Lo mklamo wenza kube lula ukubhala amakhodi amaningi nezikali ngendlela emangalisayo cishe enanini elingenamkhawulo lezintambo zabasebenzi.
  • Kodwa-ke, enye yezinto ezithathwayo eziyinhloko ukuthi kusukela ku-memory pool kanye nombono wokuxhuma kahle, empeleni kubaluleke kakhulu ukulungisa --concurrency. Ukuba nochungechunge lwezisebenzi oluningi kunalokho okudingekile kuzomosha inkumbulo, kudale uxhumo olungasebenzi, futhi kunciphise izinga lokuhlanganisa ukuxhuma. E-Lyft, iziqukathi ze-sidecar yezithunywa zethu zisebenza ngemali ephansi kakhulu ukuze ukusebenza kucishe kufane nezinsiza ezihlala eduze kwazo. Sisebenzisa u-Evoy njengommeleli onqenqemeni kuphela lapho sivumelana khona kakhulu.

Kusho ukuthini ukungavimbeli?

Igama elithi "ukungavimbeli" selisetshenziswe izikhathi eziningana kuze kube manje lapho kuxoxwa ngokuthi uchungechunge oluyinhloko nolwezisebenzi lusebenza kanjani. Yonke ikhodi ibhalwe ngokucabangela ukuthi akukho lutho oluke luvinjwe. Nokho, lokhu akulona iqiniso ngokuphelele (yini okungelona iqiniso ngokuphelele?).

Umthunywa usebenzisa amalokhi amade amade:

  • Njengoba kuxoxiwe, lapho kubhalwa amalogi okufinyelela, zonke izintambo zezisebenzi zithola ukukhiya okufanayo ngaphambi kokuba kugcwaliswe ibhafa yelogi yenkumbulo. Isikhathi sokubamba isikhiya kufanele sibe phansi kakhulu, kodwa kungenzeka ukuthi isikhiya sibangwe ngokuhambisana nenani eliphezulu kanye nokuphuma okuphezulu.
  • Umthunywa usebenzisa isistimu eyinkimbinkimbi kakhulu ukuphatha izibalo ezisendaweni kuchungechunge. Lesi kuzoba isihloko sokuthunyelwe okuhlukile. Kodwa-ke, ngizosho kafushane ukuthi njengengxenye yokucubungula izibalo zentambo endaweni, ngezinye izikhathi kuyadingeka ukuthola ukukhiya "esitolo sezibalo" esimaphakathi. Lokhu kukhiya akumele kudingeke.
  • Uchungechunge oluyinhloko ngezikhathi ezithile ludinga ukuhlanganiswa nazo zonke izintambo zabasebenzi. Lokhu kwenziwa "ngokushicilela" kusuka ochungechungeni oluyinhloko kuya kuchungechunge lwabasebenzi, futhi ngezinye izikhathi kusuka emicu yabasebenzi ibuyele emculweni omkhulu. Ukuthumela kudinga ukukhiywa ukuze umlayezo oshicilelwe ufakwe kulayini ukuze ulethwe kamuva. Laba bakhiye akufanele baphikiswe kakhulu, kodwa basengavinjwa ngokobuchwepheshe.
  • Lapho u-Enjoy ebhala ilogi ekusakazweni kwephutha lesistimu (iphutha elijwayelekile), ithola ukukhiya kuyo yonke inqubo. Ngokuvamile, ukugawulwa kwemithi kwe-Envoy kuthathwa njengokubi ngokombono wokusebenza, ngakho-ke akukaze kube nokunakwa okuningi okunikiwe ekuthuthukiseni.
  • Kukhona amanye amalokhi ambalwa angahleliwe, kodwa awekho kuwo abaluleke kakhulu ekusebenzeni futhi akufanele aphikiswe.

Uchungechunge lwesitoreji sendawo

Ngenxa yendlela uMthunywa ehlukanisa ngayo izibopho zentambo eyinhloko emisebenzini yentambo yesisebenzi, kunesidingo sokuthi ukucubungula okuyinkimbinkimbi kungenziwa emculweni oyinhloko bese kunikezwe intambo yesisebenzi ngasinye ngendlela ehambisana kakhulu. Lesi sigaba sichaza i-Envoy Thread Local Storage (TLS) ezingeni eliphezulu. Esigabeni esilandelayo ngizochaza ukuthi isetshenziswa kanjani ukuphatha iqoqo.
[Ukuhumusha] Imodeli yokuthungatha yezithunywa

Njengoba sekuchaziwe, intambo eyinhloko iphatha cishe konke ukusebenza kwendiza yokuphatha nokulawula ohlelweni Lwezithunywa. Indiza elawulayo igcwele kakhulu lapha, kodwa uma uyibuka ngaphakathi kwenqubo ye-Essay ngokwayo bese uyiqhathanisa nokudlulisela okwenziwa izintambo zesisebenzi, kunengqondo. Umthetho ojwayelekile ukuthi inqubo yentambo eyinhloko yenza umsebenzi othile, bese idinga ukuvuselela intambo yesisebenzi ngayinye ngokomphumela walowo msebenzi. kulokhu, intambo yesisebenzi ayidingi ukuthola ukukhiya ekufinyeleleni ngakunye.

Uhlelo lwe-TLS (Uchungechunge lwesitoreji sendawo) lwe-Evoy lusebenza kanje:

  • Ikhodi esebenza kuchungechunge oluyinhloko inganikeza i-TLS slot kuyo yonke inqubo. Nakuba lokhu kukhishiwe, empeleni kuyinkomba yevekhtha, enikeza ukufinyelela ku-O(1).
  • Intambo eyinhloko ingafaka idatha engafanele endaweni yayo. Uma lokhu sekwenziwe, idatha ishicilelwa kuchungechunge lomsebenzi ngamunye njengomcimbi ojwayelekile welophu yomcimbi.
  • Imicu yabasebenzi ingafunda ku-TLS yayo futhi ithole noma iyiphi idatha yendawo etholakala lapho.

Yize kuyipharadaymu elula kakhulu futhi enamandla ngendlela emangalisayo, ifana kakhulu nomqondo wokuvinjwa kwe-RCU(Read-Copy-update). Empeleni, uchungechunge lwabasebenzi aluboni noma yiziphi izinguquko zedatha ezindaweni ze-TLS ngenkathi umsebenzi usebenza. Ushintsho lwenzeka kuphela ngesikhathi sokuphumula phakathi kwemicimbi yomsebenzi.

Ummeli usebenzisa lokhu ngezindlela ezimbili ezahlukene:

  • Ngokugcina idatha ehlukene kuchungechunge lwesisebenzi ngasinye, idatha ingafinyelelwa ngaphandle kokuvinjwa.
  • Ngokugcina i-pointer eyabelwe kudatha yomhlaba wonke kumodi yokufunda kuphela kuchungechunge lwesisebenzi ngasinye. Ngakho-ke, uchungechunge ngalunye lwesisebenzi lunenani lereferensi yedatha elingakwazi ukuncishiswa ngenkathi umsebenzi usebenza. Kuphela uma bonke abasebenzi behlisa umoya futhi balayisha idatha entsha eyabiwe lapho idatha endala izobhujiswa khona. Lokhu kufana ne-RCU.

I-Cluster update threading

Kulesi sigaba, ngizochaza ukuthi i-TLS (Uchungechunge lwesitoreji sendawo) isetshenziswa kanjani ukuphatha iqoqo. Ukuphathwa kwe-Cluster kufaka i-xDS API kanye/noma ukucubungula kwe-DNS, kanye nokuhlola impilo.
[Ukuhumusha] Imodeli yokuthungatha yezithunywa

Ukuphathwa kokugeleza kweqoqo kuhlanganisa izingxenye nezinyathelo ezilandelayo:

  1. I-Cluster Manager iyingxenye engaphakathi kwe-Envoy elawula wonke ama-cluster upstreams awaziwayo, i-Cluster Discovery Service (CDS) API, i-Secret Discovery Service (SDS) kanye ne-Endpoint Discovery Service (EDS) APIs, i-DNS, nokuhlolwa kwangaphandle okusebenzayo. ukuhlolwa kwezempilo. Inesibopho sokudala umbono "ozogcina ungaguquguquki" weqoqo ngalinye elikhuphuka nomfula, ohlanganisa ababungazi abatholiwe kanye nesimo sezempilo.
  2. Umhloli wezempilo wenza ukuhlola kwezempilo okusebenzayo futhi abike izinguquko zesimo sezempilo kumphathi weqoqo.
  3. I-CDS (Isevisi Yokuthola Iqoqo) / I-SDS (Isevisi Yokutholwa Okuyimfihlo) / I-EDS (Isevisi Yokutholwa Kwephoyinti Lokugcina) / i-DNS yenziwa ukuze kunqunywe ubulungu beqoqo. Ushintsho lwesimo lubuyiselwa kumphathi weqoqo.
  4. Uchungechunge ngalunye lwesisebenzi lusebenzisa iluphu yomcimbi ngokuqhubekayo.
  5. Lapho umphathi weqoqo enquma ukuthi isimo seqoqo sishintshile, udala isifinyezo esisha sokufunda kuphela sesimo seqoqo futhi asithumele kuchungechunge lwesisebenzi ngasinye.
  6. Phakathi nenkathi elandelayo yokuthula, uchungechunge lwesisebenzi luzobuyekeza isifinyezo esikhaleni se-TLS esabiwe.
  7. Phakathi nomcimbi we-I/O okufanele unqume ukuthi umsingathi uzolayisha ibhalansi, isilinganisi somthwalo sizocela i-TLS (Uchungechunge lwesitoreji sendawo) ukuze sithole ulwazi mayelana nomsingathi. Lokhu akudingi izingidi. Qaphela futhi ukuthi i-TLS ingaphinda iqalise imicimbi yokubuyekeza ukuze izilinganisi zokulayisha nezinye izingxenye zikwazi ukubala kabusha inqolobane, izakhiwo zedatha, njll. Lokhu kungaphezu kobubanzi balokhu okuthunyelwe, kodwa kusetshenziswa ezindaweni ezihlukahlukene kukhodi.

Isebenzisa inqubo engenhla, Inxusa lingacubungula zonke izicelo ngaphandle kokuvinjwa (ngaphandle njengoba kuchazwe ngaphambilini). Ngaphandle kobunzima bekhodi ye-TLS ngokwayo, iningi lekhodi ayidingi ukuqonda ukuthi ukufunda okuningi kusebenza kanjani futhi kungabhalwa ngomcu owodwa. Lokhu kwenza amakhodi amaningi abhalwe kalula ngaphezu kokusebenza okuphezulu.

Amanye amasistimu angaphansi asebenzisa i-TLS

I-TLS (Uchungechunge lwesitoreji sendawo) kanye ne-RCU (Funda Isibuyekezo Sokukopisha) zisetshenziswa kakhulu ku-Envoy.

Izibonelo zokusebenzisa:

  • Indlela yokushintsha ukusebenza ngesikhathi sokwenza: Uhlu lwamanje lomsebenzi onikwe amandla lubalwa kuchungechunge oluyinhloko. Uchungechunge ngalunye lwesisebenzi lube selunikezwa isifinyezo sokufunda kuphela kusetshenziswa i-RCU semantics.
  • Ukushintsha amathebula omzila: Kumathebula omzila ahlinzekwa yi-RDS (Isevisi Yokutholwa Komzila), amathebula omzila akhiwa kuchungechunge oluyinhloko. Isifinyezo sokufunda kuphela sizonikezwa kamuva kuchungechunge lwesisebenzi ngasinye kusetshenziswa i-RCU (Funda Isibuyekezo Sesibuyekezo) semantics. Lokhu kwenza ukushintsha amathebula omzila kusebenze kahle nge-athomu.
  • Ukulondolozwa kwenhlokweni ye-HTTP: Njengoba kuvela, ukubala unhlokweni we-HTTP wesicelo ngasinye (ngenkathi kusetshenziswa ~25K+ RPS ngomgogodla ngamunye) kubiza kakhulu. Isithunywa sibala inhlokweni cishe njalo ngesigamu sesekhondi futhi sinikeze isisebenzi ngasinye nge-TLS ne-RCU.

Kukhona ezinye izimo, kodwa izibonelo zangaphambilini kufanele zinikeze ukuqonda okuhle kokuthi i-TLS isetshenziselwa ini.

Izingibe zokusebenza ezaziwayo

Ngenkathi i-Envoy yenza kahle kakhulu, kunezindawo ezimbalwa eziphawulekayo ezidinga ukunakwa uma isetshenziswa ngemali ephezulu kakhulu kanye nokusebenza kwayo:

  • Njengoba kuchazwe kulesi sihloko, okwamanje zonke izindikimba zezisebenzi zithola ukukhiya lapho zibhalela kubhafa yememori yelogi. Ngokuvumelana nemali ephezulu kanye nokusebenza okuphezulu, uzodinga ukuhlanganisa amalogi okufinyelela ochungechunge lwesisebenzi ngasinye ngezindleko zokulethwa ngaphandle kwe-oda lapho ubhalela ifayela lokugcina. Kungenjalo, ungakha ilogi yokufinyelela ehlukile yochungechunge lwesisebenzi ngasinye.
  • Nakuba izibalo zithuthukiswe kakhulu, lapho kuhlangana khona imali ephezulu kakhulu nasekuphumeni kwayo kungase kube nokungqubuzana kwe-athomu kuzibalo ngazinye. Isixazululo sale nkinga yizibali zochungechunge ngalunye lomsebenzi ezinokusetha kabusha izikhathi ezithile zokubala ezimaphakathi. Lokhu kuzoxoxwa ngakho kokuthunyelwe okulandelayo.
  • Isakhiwo samanje ngeke sisebenze kahle uma isithunywa sisetshenziswa esimweni lapho kunokuxhumana okumbalwa kakhulu okudinga izinsiza ezibalulekile zokucubungula. Asikho isiqinisekiso sokuthi ukuxhumana kuzosatshalaliswa ngokulinganayo phakathi kwezintambo zabasebenzi. Lokhu kungaxazululwa ngokusebenzisa ukulinganisa kokuxhumeka kwabasebenzi, okuzovumela ukushintshaniswa kokuxhumana phakathi kwezintambo zabasebenzi.

Isiphetho

Imodeli yokuthungatha ye-Essay yakhelwe ukunikeza ukuhleleka kalula nokufana okukhulu ngenani lememori engase ibe nokumosha nokuxhumana uma kungalungiselelwe kahle. Le modeli ivumela ukuthi isebenze kahle kakhulu ekubalweni kwentambo ephezulu kakhulu kanye nokuphumayo.
Njengoba ngishilo kafushane ku-Twitter, umklamo ungaphinda usebenze phezu kwesitaki senethiwekhi esigcwele somsebenzisi esifana ne-DPDK (I-Data Plane Development Kit), engabangela amaseva avamile ukuphatha izigidi zezicelo ngomzuzwana ngokucubungula okugcwele kwe-L7. Kuyojabulisa kakhulu ukubona lokho okwakhiwa eminyakeni embalwa ezayo.
Amazwana okugcina asheshayo: Ngibuzwe izikhathi eziningi ukuthi kungani sikhethe i-C++ ye-Envoy. Isizathu sihlala ukuthi kusewukuphela kolimi lwebanga lezimboni olusetshenziswa kabanzi lapho izakhiwo ezichazwe kulo mbhalo zingakhiwa. I-C++ ayilungele wonke amaphrojekthi noma amaningi, kodwa ezimweni ezithile zokusetshenziswa kusewukuphela kwethuluzi lokwenza umsebenzi wenziwe.

Izixhumanisi zamakhodi

Izixhumanisi zamafayela anezindawo zokusebenzelana kanye nokuqaliswa kwesihloko okuxoxwe ngakho kulokhu okuthunyelwe:

Source: www.habr.com

Engeza amazwana