[Inguqulelo] Imodeli yokuthungela umthunywa

Inguqulelo yenqaku: Imodeli yokuhlanganisa umthunywa- https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

Ndifumene eli nqaku linomdla kakhulu, kwaye njengoko uMthunywa esetyenziswa rhoqo njengenxalenye ye "istio" okanye nje "njengomlawuli we-ingress" we-kubernetes, uninzi lwabantu alunanxibelelwano oluthe ngqo kunye nalo, umzekelo, kunye nesiqhelo. Ufakelo lweNginx okanye lweHaproxy. Nangona kunjalo, ukuba kukho into ephukayo, kuya kuba kuhle ukuqonda indlela esebenza ngayo ngaphakathi. Ndizamile ukuguqulela kangangoko ndinako ukuguqulela umbhalo kwisiRashiya, kuquka namagama akhethekileyo; kwabo bakufumanisa kubuhlungu ukuyijonga le nto, ndiyishiye imvelaphi kwizibiyeli. Wamkelekile kwikati.

Amaxwebhu obugcisa akwinqanaba elisezantsi lekhowudi yoMthunywa anqabile ngoku. Ukuyilungisa le nto, ndiceba ukwenza uthotho lwezithuba zebhlog malunga nenkqubo ephantsi yoMthunywa. Ekubeni eli ilinqaku lokuqala, nceda undazise oko ukucingayo noko onokuba nomdla kuko kumanqaku exesha elizayo.

Omnye weyona mibuzo ixhaphakileyo yobugcisa endiyifumanayo malunga noMthunywa ucela inkcazo ekumgangatho ophantsi wemodeli yokuthunga eyisebenzisayo. Kule post, ndiza kuchaza indlela umthunywa wemephu uqhagamshelo kwimisonto, kunye nenkqubo yoGcino lwaseKhaya yeTread eyisebenzisayo ngaphakathi ukwenza ikhowudi ihambelane ngakumbi kunye nokusebenza okuphezulu.

Ushwankathelo lomsonto

[Inguqulelo] Imodeli yokuthungela umthunywa

Umthunywa usebenzisa iintlobo ezintathu ezahlukeneyo zemisinga:

  • Engundoqo: Lo msonto ulawula ukuqaliswa kwenkqubo kunye nokupheliswa, yonke inkqubo ye-XDS (iNkonzo ye-xDiscovery) API, kuquka i-DNS, ukujonga impilo, iqoqo ngokubanzi kunye nolawulo lwexesha lokusebenza, ukusetha kwakhona izibalo, ulawulo kunye nolawulo lwenkqubo ngokubanzi - iimpawu zeLinux. kwenzeka kulo msonto asynchronous kwaye "non-blocking". Ngokubanzi, intambo ephambili ilungelelanisa zonke iinkqubo ezibaluleke kakhulu zokusebenza ezingadingi isixa esikhulu se-CPU ukusebenza. Oku kuvumela uninzi lwekhowudi yolawulo ukuba ibhalwe ngokungathi ingumsonto omnye.
  • Umsebenzi: Ngokungagqibekanga, uMthunywa udala intambo yomsebenzi kumsonto ngamnye wehardware kwinkqubo, oku kunokulawulwa kusetyenziswa ukhetho --concurrency. Umsonto ngamnye wabasebenzi uqhuba i-loop yesiganeko "engathinteliyo", enoxanduva lokumamela umphulaphuli ngamnye; ngexesha lokubhala (ngoJulayi 29, 2017) akukho sharding yomphulaphuli, ukwamkela uxhulumaniso olutsha, ukuqinisa isitaki sokucoca uqhagamshelo, kunye nokucubungula yonke igalelo/imveliso (IO) imisebenzi ngexesha lobomi boqhakamshelwano. Kwakhona, oku kuvumela uninzi lwekhowudi yokuphatha uqhagamshelo ukuba ibhalwe ngokungathi ingumsonto omnye.
  • Ugutyulo lwefayile: Ifayile nganye ebhalwa nguMthunywa, ubukhulu becala ukufikelela kwilog, okwangoku inomsonto ozimeleyo wokuvimba. Oku kungenxa yokuba ukubhala kwiifayile ezigcinwe yinkqubo yefayile naxa usebenzisa O_NONBLOCK ngamanye amaxesha unokuvaleka (ukuncwina). Xa imisonto yabasebenzi ifuna ukubhala kwifayile, idatha ifuduswa isiwe kwindawo yokugcina izinto kwinkumbulo apho ithi ekugqibeleni igungxulwe ngomsonto. ukugungxula ifayile. Le yindawo enye yekhowudi apho ngobuchwephesha yonke imisonto yabasebenzi inokuthintela isitshixo esifanayo ngelixa uzama ukuzalisa imemori yememori.

Ukuphatha uqhagamshelwano

Njengoko kuxoxiwe ngokufutshane ngasentla, yonke imisonto yabasebenzi imamela bonke abaphulaphuli ngaphandle kokwahlula. Ke, i-kernel isetyenziselwa ukuthumela ngobubele iisokethi ezamkelweyo kwimisonto yabasebenzi. Iinkozo zale mihla zilungile kakhulu koku, zisebenzisa iimpawu ezinje ngegalelo/imveliso (IO) ukunyusa okuphambili ukuzama ukugcwalisa intambo ngomsebenzi phambi kokuba ziqalise ukusebenzisa ezinye iintambo ezimamele kwisokethi enye, kwaye zingasebenzisi i-robin engqukuva. ukutshixa (Spinlock) ukuqhubekekisa isicelo ngasinye.
Nje ukuba unxibelelwano lwamkelwe kumsonto wabasebenzi, aluze luwushiye loo msonto. Lonke ukuqhubela phambili kokuqhubekeka koqhakamshelwano luphathwa ngokupheleleyo kumsonto wabasebenzi, kubandakanywa nayiphi na indlela yokuziphatha yokuthumela.

Oku kuneziphumo ezininzi ezibalulekileyo:

  • Onke amachibi onxibelelwano kuMthunywa abelwa kumsonto wabasebenzi. Ngoko ke, nangona amachibi okudibanisa i-HTTP/2 enza uxhulumaniso olunye kuphela kwinginginya nganye enyukayo ngexesha, ukuba kukho imisonto emine yabasebenzi, kuya kubakho uqhagamshelo lwe-HTTP/2 olune kwinginginya enyukayo kwindawo ezinzileyo.
  • Isizathu sokuba uMthunywa asebenze ngolu hlobo kukuba ngokugcina yonke into kumsonto omnye wabasebenzi, phantse yonke ikhowudi ingabhalwa ngaphandle kokuvalela kwaye ngokungathi ifakwe intambo enye. Olu yilo lwenza kube lula ukubhala ikhowudi eninzi kunye nezikali ngokumangalisayo ukuya kwinani elingenamda lemisonto yabasebenzi.
  • Nangona kunjalo, enye yezinto eziphambili ezithathwayo kukuba ukusuka kwindawo yokugcina imemori kunye nembono yoqhagamshelo olusebenzayo, kubaluleke kakhulu ukuqwalasela --concurrency. Ukuba nemisonto emininzi yabasebenzi kunokuba kuyimfuneko kuya kuchitha imemori, ukudala uqhagamshelo olungasebenziyo, kunye nokunciphisa izinga lokudityaniswa koqhagamshelwano. E-Lyft, izikhongozeli zethu zemoto ezisecaleni zisebenza ngemali ephantsi kakhulu ukuze ukusebenza kuhambelane neenkonzo abahleli ecaleni kwazo. Sisebenzisa uMthunywa njengommeli osecaleni kuphela xa sidibana kakhulu.

Kuthetha ukuthini ukungathinteli?

Igama elithi "non-blocking" lisetyenziswe amatyeli amaninzi ukuza kuthi ga ngoku xa kuxoxwa ngendlela esebenza ngayo imisonto ephambili kunye neyabasebenzi. Yonke ikhowudi ibhaliwe kwingcinga yokuba akukho nto ivaliweyo. Nangona kunjalo, oku akuyonyani ngokupheleleyo (yintoni engeyonyani ngokupheleleyo?).

Umthunywa usebenzisa iinkqubo ezininzi zokutshixa:

  • Njengoko kuxoxiwe, xa ubhala iilogi zofikelelo, yonke imisonto yabasebenzi ifumana isitshixo esifanayo phambi kokuba i-buffer yememori engaphakathi izaliswe. Ixesha lokubamba isitshixo kufuneka libe phantsi kakhulu, kodwa kunokwenzeka ukuba iqhaga likhuphiswe ngexabiso eliphezulu kunye nokuphuma okuphezulu.
  • Umthunywa usebenzisa inkqubo entsonkothileyo kakhulu yokuphatha amanani asekuhlaleni kumsonto. Oku kuya kuba sisihloko sesithuba esahlukileyo. Nangona kunjalo, ndiza kukhankanya ngokufutshane ukuba njengenxalenye yokucubungula izibalo zemisonto ekuhlaleni, ngamanye amaxesha kuyimfuneko ukufumana isitshixo "kwivenkile yezibalo". Oku kutshixa makungaze kufuneke.
  • Umsonto ophambili kufuneka ngamaxesha athile ulungelelaniswe nayo yonke imisonto yabasebenzi. Oku kwenziwa "ngokushicilela" ukusuka kumsonto oyintloko ukuya kwimisonto yabasebenzi, kwaye ngamanye amaxesha ukusuka kwimisonto yabasebenzi ubuyela kumsonto oyintloko. Ukuthumela kufuna isitshixo ukuze umyalezo opapashiweyo ube emgceni ukuze uthunyelwe kamva. Ezi zitshixo akufuneki zikhuphiswe ngokunzulu, kodwa zisenokuvalwa ngokobuchwephesha.
  • Xa uMthunywa ebhala ilogi kumlambo wempazamo yenkqubo (impazamo eqhelekileyo), ifumana iqhaga kuyo yonke inkqubo. Ngokubanzi, ukugawulwa kwemithi ye-Envoy yendawo kuthathwa njengento embi ngokwembono yokusebenza, ke akukhange kubekho ngqalelo ingako ekuyiphuculeni.
  • Kukho ezinye izitshixo ezimbalwa ezingakhethiyo, kodwa akukho nanye kuzo ebaluleke kakhulu ekusebenzeni kwaye akufuneki iphikiswe.

Indawo yokugcina umsonto

Ngenxa yendlela uMthunywa ahlula ngayo uxanduva lomsonto oyintloko kwiimfanelo zomsonto wabasebenzi, kukho imfuneko yokuba ukusetyenzwa okuntsonkothileyo kunokwenziwa kumsonto oyintloko kwaye emva koko kunikezelwe kumsonto ngamnye wabasebenzi ngendlela ehambelana kakhulu. Eli candelo lichaza i-Envoy Thread Local Storage (TLS) kwinqanaba eliphezulu. Kwicandelo elilandelayo ndiza kuchaza indlela esetyenziswa ngayo ukulawula iqela.
[Inguqulelo] Imodeli yokuthungela umthunywa

Njengoko sele kuchaziwe, umsonto ophambili uphatha phantse lonke ulawulo kunye nokusebenza kwendiza yolawulo kwinkqubo yoMthunywa. Inqwelomoya yolawulo igcwele kakhulu apha, kodwa xa uyijonga ngaphakathi kwenkqubo yoMthunywa ngokwawo kwaye uyithelekise nokuhanjiswa okwenziwa ngumcu wabasebenzi, kuyavakala. Umgaqo jikelele kukuba inkqubo intambo ephambili yenza umsebenzi othile, kwaye ke kufuneka ihlaziye umsonto ngamnye wabasebenzi ngokwesiphumo saloo msebenzi. kule meko, umsonto wabasebenzi awufuni ukufumana isitshixo kufikelelo ngalunye.

Inkqubo ye-TLS yoMthunywa (Ugcino lwasekuhlaleni) isebenza ngolu hlobo lulandelayo:

  • Ikhowudi esebenza kumsonto oyintloko inokwaba i-TLS slot kuyo yonke inkqubo. Nangona oku kuthathiwe, ekusebenzeni sisalathiso kwivektha, ebonelela nge-O(1) ufikelelo.
  • Umsonto oyintloko unokufaka idatha engafanelekanga kwi-slot yayo. Xa oku kusenziwa, idatha ipapashwa kumsonto ngamnye wabasebenzi njengomcimbi oqhelekileyo welophu.
  • Imisonto yabasebenzi inokufunda kwindawo yabo ye-TLS kwaye ibuyise nayiphi na idatha yendawo ekhoyo ekhoyo.

Nangona iyiparadigm ilula kakhulu kwaye inamandla ngendlela emangalisayo, iyafana kakhulu nengqikelelo ye-RCU (Funda-Khuphela-Uhlaziyo). Ngokusisiseko, imisonto yabasebenzi ayinakuze ibone naluphi na utshintsho lwedatha kwiindawo zokubeka iTLS ngelixa umsebenzi uqhuba. Utshintsho lwenzeka kuphela ngexesha lokuphumla phakathi kweziganeko zomsebenzi.

Umthunywa usebenzisa oku ngeendlela ezimbini ezahlukeneyo:

  • Ngokugcina idatha eyahlukeneyo kumsonto ngamnye wabasebenzi, idatha inokufumaneka ngaphandle kokuthintela.
  • Ngokugcina isalathisi ekwabelwana ngaso kwidatha yehlabathi kwimodi yokufunda kuphela kumsonto ngamnye wabasebenzi. Ke, umsonto ngamnye wabasebenzi unobalo lwereferensi yedatha engenako ukuncitshiswa ngelixa umsebenzi usebenza. Kuphela xa bonke abasebenzi bezolile kwaye balayishe idatha entsha ekwabelwana ngayo iya kutshatyalaliswa idatha endala. Oku kuyafana ne-RCU.

Umsonto wohlaziyo lweqela

Kweli candelo, ndiya kuchaza indlela i-TLS (i-Tread yogcino lwendawo) isetyenziselwa ukulawula i-cluster. Ulawulo lweCluster lubandakanya i-xDS API kunye/okanye ukusetyenzwa kweDNS, kunye nokujonga impilo.
[Inguqulelo] Imodeli yokuthungela umthunywa

Ulawulo lokuqukuqela kweqela lubandakanya amacandelo kunye namanyathelo alandelayo:

  1. Umphathi we-Cluster yinxalenye ngaphakathi koMthunywa olawula zonke ii-cluster upstreams ezaziwayo, i-Cluster Discovery Service (CDS) API, i-Secret Discovery Service (SDS) kunye ne-Endpoint Discovery Service (EDS) APIs, i-DNS, kunye nokuhlolwa kwangaphandle okusebenzayo. Inoxanduva lokudala imbono "ekugqibeleni engaguquguqukiyo" yeqela ngalinye elinyukayo, elibandakanya ababuki zindwendwe kunye nobume bezempilo.
  2. Umhloli wezempilo wenza uhlolo lwempilo olusebenzayo kwaye uxela utshintsho lwemeko yempilo kumphathi weqela.
  3. I-CDS (iNkonzo yokuFumana iQela) / i-SDS (iNkonzo yokuFumana iMfihlo) / i-EDS (iNkonzo yokuFumana iNqaku lokuPhelela) / i-DNS iyenziwa ukumisela ubulungu beqela. Utshintsho lwemeko lubuyiselwa kumphathi weqela.
  4. Umsonto ngamnye wabasebenzi uqhuba ngokuqhubekayo iluphu yesiganeko.
  5. Xa umphathi weqela egqiba ukuba imeko yeqela itshintshile, yenza umfanekiso omfutshane wokufunda kuphela wemeko yeqela kwaye uyithumele kumsonto ngamnye wabasebenzi.
  6. Ngexesha elizolileyo elilandelayo, umsonto wabasebenzi uya kuhlaziya umfanekiso oqingqiweyo kwindawo eyabiweyo ye-TLS.
  7. Ngexesha lesiganeko se-I/O esimele ukumisela umninimzi ukuba alayishe ibhalansi, umlinganisi womthwalo uya kucela i-TLS (Ugcino lwendawo yoMtya) ukufumana ulwazi malunga nomninimzi. Oku akufuni zitshixo. Qaphela kwakhona ukuba i-TLS inokuphinda iqalise iziganeko zohlaziyo ukwenzela ukuba abalinganisi bomthwalo kunye namanye amacandelo akwazi ukubala kwakhona i-cache, izakhiwo zedatha, njl. Oku kungaphaya komda wale post, kodwa isetyenziswa kwiindawo ezahlukeneyo kwikhowudi.

Ngokusebenzisa le nkqubo ingasentla, uMthunywa unokuqhubekekisa isicelo ngasinye ngaphandle kokuthintela (ngaphandle kokuba kuchaziwe ngaphambili). Ngaphandle kobunzima bekhowudi ye-TLS ngokwayo, uninzi lwekhowudi ayifuni ukuqonda ukuba i-multithreading isebenza njani kwaye ingabhalwa ngomsonto omnye. Oku kwenza ukuba uninzi lwekhowudi lubhale lula ukongeza ekusebenzeni okuphezulu.

Ezinye iindlela ezisezantsi ezisebenzisa i-TLS

I-TLS (Ukugcinwa kwentambo yendawo) kunye ne-RCU (Funda i-Copy Update) isetyenziswa ngokubanzi kwi-Envoy.

Imizekelo yokusetyenziswa:

  • Inkqubo yokutshintsha ukusebenza ngexesha lokwenziwa: Uluhlu lwangoku lomsebenzi owenziweyo lubalwa kumsonto oyintloko. Umsonto ngamnye wabasebenzi unikwa umfanekiso okhawulezayo wokufunda kuphela usebenzisa i-semantics ye-RCU.
  • Ukutshintshwa kweetafile zendlela: Kwiitheyibhile zendlela ezibonelelwe yi-RDS (iNkonzo yokuFumana iNdlela), iitafile zendlela zenziwe kumtya oyintloko. I-snapshot efundwayo kuphela iya kuthi emva koko ibonelelwe kumsonto ngamnye wabasebenzi kusetyenziswa i-RCU (Funda i-Copy Update) semantics. Oku kwenza ukutshintsha iitafile zendlela zisebenze kakuhle.
  • Ugcino olubhalwe ngasentla kwe-HTTP: Njengoko kuvela, ukubala i-header ye-HTTP kwisicelo ngasinye (ngelixa uqhuba ~ 25K + RPS ngondoqo) kubiza kakhulu. Umthunywa ubala intloko malunga nesiqingatha sesibini ngasinye kwaye ayinike umsebenzi ngamnye nge-TLS kunye ne-RCU.

Kukho ezinye iimeko, kodwa imizekelo yangaphambili kufuneka inike ukuqonda kakuhle ukuba i-TLS isetyenziselwa ntoni.

Imigibe yokusebenza eyaziwayo

Ngelixa uMthunywa eqhuba kakuhle ngokupheleleyo, kukho iindawo ezimbalwa eziphawulekayo ezifuna ukuhoywa xa esetyenziswa ngemali ephezulu kakhulu kunye nesiphumo:

  • Njengoko kuchaziwe kweli nqaku, ngoku yonke imisonto yabasebenzi ifumana isitshixo xa ubhalela kwi-log yememori ye-buffer. Ngexabiso eliphezulu kunye nomthamo ophezulu, kuya kufuneka udibanise iilogi zokufikelela kumsonto ngamnye wabasebenzi ngeendleko zokuhanjiswa ngaphandle kwe-odolo xa ubhalela ifayile yokugqibela. Kungenjalo, ungenza ilog yofikelelo eyahlukileyo kumsonto ngamnye wabasebenzi.
  • Nangona iinkcukacha-manani ziphuculwe kakhulu, ngokuhambelana okuphezulu kakhulu kunye nokuphuma kwayo kuya kubakho ukruthakruthwano lweathom kwizibalo zomntu ngamnye. Isisombululo sale ngxaki zizibali ngokwemisonto yabasebenzi ngokusetwa kwakhona kweendawo zokubala ezisembindini ngamaxesha athile. Oku kuya kuxoxwa kwisithuba esilandelayo.
  • Uyilo lwangoku aluyi kusebenza kakuhle ukuba uMthunywa ufakwe kwimeko apho kukho uxhulumaniso olumbalwa olufuna izixhobo ezibalulekileyo zokucwangcisa. Akukho siqinisekiso sokuba unxibelelwano luya kuhanjiswa ngokulinganayo phakathi kwemisonto yabasebenzi. Oku kunokusonjululwa ngokuphumeza ulungelelwaniso loqhagamshelwano lwabasebenzi, oluya kuvumela ukutshintshiselana konxibelelwano phakathi kwemisonto yabasebenzi.

Ukuqukumbela

Imodeli yokuthunga yoMthunywa yenzelwe ukubonelela ngokulula kwenkqubo kunye nokuhambelana okukhulu ngeendleko zememori enokuba yinkcitho kunye noqhakamshelwano ukuba alulungiswanga kakuhle. Le modeli ikuvumela ukuba isebenze kakuhle kakhulu kumanani aphezulu kakhulu kunye nokuphuma.
Njengoko ndikhankanyile ngokufutshane kwi-Twitter, idizayini inokuphinda iqhube phezulu kwi-stack ye-networking networking stack epheleleyo efana ne-DPDK (iData Plane Development Kit), enokubangela ukuba abancedisi abaqhelekileyo baphathe izigidi zezicelo ngesekhondi kunye ne-L7 epheleleyo. Kuya kuba mnandi kakhulu ukubona oko kwakhiwa kwiminyaka embalwa ezayo.
Inqaku lokugqibela elikhawulezayo: Ndikhe ndabuzwa amaxesha amaninzi ukuba kutheni sikhethe i-C++ yoMthunywa. Isizathu sihleli kukuba isekuphela kolwimi lwebakala lwemizi-mveliso olusetyenziswa ngokubanzi apho i-architecture echazwe kwesi sithuba inokwakhiwa. I-C++ ngokuqinisekileyo ayifanelekanga kuzo zonke okanye iiprojekthi ezininzi, kodwa kwiimeko ezithile zokusetyenziswa isesona sixhobo sokwenza umsebenzi wenziwe.

Ikhonkco kwikhowudi

Unxulumaniso lweefayile ezinojongano kunye nokuphunyezwa kweheader ezixoxwe kwesi sithuba:

umthombo: www.habr.com

Yongeza izimvo