[Aistriúchán] Múnla snáithithe Toscaire

Aistriúchán ar an alt: Múnla snáithithe toscaire - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

Fuair ​​​​mé an t-alt seo suimiúil go leor, agus ós rud é go n-úsáidtear Toscaire go minic mar chuid den “istio” nó go simplí mar “rialtóir dul isteach” kubernetes, níl an t-idirghníomhú díreach céanna ag an gcuid is mó de dhaoine leis agus, mar shampla, le tipiciúil. suiteálacha Nginx nó Haproxy. Mar sin féin, má bhriseann rud éigin, bheadh ​​​​sé go maith a thuiscint conas a oibríonn sé ón taobh istigh. Rinne mé iarracht oiread den téacs agus ab fhéidir a aistriú go Rúisis, focail speisialta san áireamh; dóibh siúd a mbíonn pianmhar orthu féachaint air seo, d’fhág mé na bunleaganacha i lúibíní. Fáilte go cat.

Tá doiciméadú teicniúil ar leibhéal íseal do bhunachar cód an Toscaire sách gann faoi láthair. Chun é seo a leigheas, tá sé beartaithe agam sraith postálacha blag a dhéanamh faoi na fochórais éagsúla de chuid Toscaire. Ós rud é gurb é seo an chéad alt, cuir in iúl dom cad a cheapann tú agus cad a bhféadfadh spéis a bheith agat in ailt amach anseo.

Ceann de na ceisteanna teicniúla is coitianta a fhaighim faoin Toscaire ná cur síos íseal-leibhéil a iarraidh ar an tsamhail snáithithe a úsáideann sé. Sa phost seo, déanfaidh mé cur síos ar conas a léarscáilíonn Toscaire naisc le snáitheanna, chomh maith leis an gcóras Stórála Áitiúil Snáithe a úsáideann sé go hinmheánach chun cód a dhéanamh níos comhthreomhar agus ardfheidhmíochta.

Snáithiú forbhreathnú

[Aistriúchán] Múnla snáithithe Toscaire

Úsáideann Toscaire trí chineál éagsúla sruthanna:

  • Priomh: Rialaíonn an snáithe seo am tosaithe agus foirceanta, gach próiseáil ar an API XDS (Seirbhís xDiscovery), lena n-áirítear DNS, seiceáil sláinte, braisle ginearálta agus bainistíocht ama rite, athshocrú staitisticí, riarachán agus bainistíocht próiseas ginearálta - comharthaí Linux, atosú te, etc. a tharlaíonn sa snáithe seo is asincrónach agus "neamh-blocála". Go ginearálta, comhordaíonn an príomh-snáithe gach próiseas feidhmiúlacht chriticiúil nach gá líon mór LAP a reáchtáil. Ligeann sé seo an chuid is mó den chód rialaithe a scríobh amhail is dá mba shnáithiú singil é.
  • Oibrí: De réir réamhshocraithe, cruthaíonn Toscaire snáithe oibrithe do gach snáithe crua-earraí sa chóras, is féidir é seo a rialú ag baint úsáide as an rogha --concurrency. Ritheann gach snáithe oibrithe lúb imeachtaí “neamh-bhlocáil”, atá freagrach as éisteacht le gach éisteoir; ag an am seo á scríobh (29 Iúil, 2017) níl aon bhearradh ar an éisteoir, ag glacadh le naisc nua, ag cur stack scagaire ar an toirt le haghaidh an nasc, agus gach oibríocht ionchuir/aschuir (IO) a phróiseáil le linn shaolré an naisc. Arís, ceadaíonn sé seo an chuid is mó de chód láimhseála naisc a scríobh amhail is dá mba snáithithe singil é.
  • Sruthán comhaid: Tá snáithe neamhspleách blocála ag gach comhad a scríobhann Toscaire, go príomha logaí rochtana. Tá sé seo mar gheall ar an bhfíric go scríobh chuig comhaid i dtaisce ag an gcóras comhad fiú nuair a úsáid O_NONBLOCK uaireanta is féidir bac a chur air (osna). Nuair is gá do shnáitheanna oibrithe scríobh chuig comhad, bogtar na sonraí go dtí maolán sa chuimhne áit a sruthaítear tríd an snáithe ar deireadh dúiseacht comhaid. Is réimse cód amháin é seo ina bhféadfaidh gach snáithe oibrí go teicniúil an glas céanna a bhlocáil agus iad ag iarraidh maolán cuimhne a líonadh.

Láimhseáil nasc

Mar a pléadh go hachomair thuas, éisteann snáitheanna oibrithe go léir le gach éisteoir gan aon sharding. Mar sin, úsáidtear an eithne chun soicéid glactha a sheoladh go galánta chuig snáitheanna oibrithe. Go ginearálta bíonn kernels nua-aimseartha an-mhaith ag seo, úsáideann siad gnéithe cosúil le treisiú tosaíochta ionchuir/aschuir (IO) chun iarracht a dhéanamh snáithe a líonadh le hobair sula dtosaíonn siad ag baint úsáide as snáitheanna eile atá ag éisteacht ar an soicéad céanna, agus freisin gan úsáid a bhaint as robin bhabhta. Glasáil (Spinlock) chun gach iarratas a phróiseáil.
Nuair a ghlactar le nasc ar shnáithe oibrithe, ní fhágann sé an snáithe sin riamh. Déantar gach próiseáil bhreise ar an nasc a láimhseáil go hiomlán sa snáithe oibrí, lena n-áirítear aon iompar ar aghaidh.

Tá roinnt iarmhairtí tábhachtacha aige seo:

  • Sanntar snáithe oibrí do gach linn ceangail san Toscaire. Mar sin, cé nach ndéanann linnte nasc HTTP/2 ach nasc amháin le gach óstach in aghaidh an tsrutha ag an am, má tá ceithre shnáithe oibrithe ann, beidh ceithre nasc HTTP/2 in aghaidh an óstaigh in aghaidh an tsrutha i riocht seasta.
  • Is é an fáth a n-oibríonn Toscaire ar an mbealach seo ná trí gach rud a choinneáil i snáithe oibrí amháin, is féidir beagnach gach cód a scríobh gan bac agus amhail is dá mba snáithithe aonair é. Fágann an dearadh seo go bhfuil sé éasca go leor cód agus scálaí a scríobh go han-mhaith ar líon beagnach neamhtheoranta snáitheanna oibrithe.
  • Mar sin féin, ceann de na bealaí beir leat is mó ná ó thaobh linn cuimhne agus éifeachtúlacht nasc, go bhfuil sé fíor-thábhachtach an leagan amach a chumrú. --concurrency. Má bhíonn níos mó snáitheanna oibrithe agat ná mar is gá, cuirfear am amú cuimhne, cruthófar níos mó nasc díomhaoin, agus laghdófar an ráta comhthiomsaithe naisc. Ag Lyft, ritheann ár gcoimeádáin taobhcharr toscaire le comhairgeadra an-íseal ionas go mbeidh an fheidhmíocht ag teacht go garbh leis na seirbhísí a shuíonn siad in aice leo. Ní reáchtálaimid Toscaire mar sheachvótálaí imeall ach amháin ag an gcomhairgeadra uasta.

Cad a chiallaíonn neamh-blocáil?

Baineadh úsáid as an téarma "neamh-bhlocáil" arís agus arís eile go dtí seo agus plé á dhéanamh ar an gcaoi a n-oibríonn na príomhshnáithe agus na snáitheanna oibrithe. Tá gach cód scríofa ar an toimhde nach bhfuil aon rud bac riamh. Mar sin féin, níl sé seo fíor go hiomlán (what is not entirely true?).

Úsáideann Toscaire roinnt glas próiseas fada:

  • Mar a pléadh, agus logaí rochtana á scríobh, faigheann na snáitheanna oibrithe go léir an glas céanna sula líontar an maolán logála cuimhne. Ba cheart go mbeadh an t-am sealbhaíochta glasála an-íseal, ach is féidir an glas a chonspóid ag comhairgeadra ard agus tréchur ard.
  • Úsáideann Toscaire córas an-chasta chun staitisticí a láimhseáil a bhaineann leis an snáithe. Beidh sé seo mar ábhar do phost ar leith. Mar sin féin, luafaidh mé go hachomair, mar chuid de phróiseáil staitisticí snáithe go háitiúil, go bhfuil sé riachtanach uaireanta glas a fháil ar "siopa stats" lárnach. Níor cheart go mbeadh an glasáil seo ag teastáil riamh.
  • Ní mór an príomh-snáithe a chomhordú go tréimhsiúil leis na snáitheanna oibrithe go léir. Déantar é seo trí "fhoilsiú" ón bpríomh-snáithe go snáitheanna oibrithe, agus uaireanta ó snáitheanna oibrithe ar ais go dtí an príomh-snáithe. Teastaíonn glas chun an teachtaireacht a sheoladh ionas gur féidir an teachtaireacht fhoilsithe a chur i scuaine le seachadadh níos déanaí. Níor cheart chonspóid thromchúiseach a dhéanamh ar na glais seo riamh, ach is féidir bac a chur orthu go teicniúil fós.
  • Nuair a scríobhann Toscaire logáil chuig an sruth earráide córais (earráid chaighdeánach), faigheann sé glas ar an bpróiseas iomlán. Go ginearálta, meastar go bhfuil logáil áitiúil an Toscaire uafásach ó thaobh feidhmíochta de, agus mar sin níor tugadh mórán airde ar a fheabhsú.
  • Tá cúpla glas randamach eile ann, ach níl aon cheann acu ríthábhachtach ó thaobh feidhmíochta de agus níor cheart dúshlán a thabhairt dóibh riamh.

Stóráil áitiúil snáithe

Mar gheall ar an mbealach a scarann ​​Toscaire freagrachtaí an phríomhshnáithe ó fhreagrachtaí an tsnáithe oibrithe, tá ceanglas ann gur féidir próiseáil casta a dhéanamh ar an bpríomhshnáithe agus ansin a sholáthar do gach snáithe oibrí ar bhealach an-chomhthráthach. Déanann an chuid seo cur síos ar Stóráil Áitiúil Snáithe Toscaire (TLS) ag ardleibhéal. Sa chéad chuid eile déanfaidh mé cur síos ar conas a úsáidtear é chun cnuasach a bhainistiú.
[Aistriúchán] Múnla snáithithe Toscaire

Mar a thuairiscítear cheana féin, láimhseálann an phríomhshnáithe beagnach gach feidhmiúlacht eitleáin bhainistíochta agus rialaithe sa phróiseas Toscaire. Tá an t-eitleán rialaithe beagán ró-ualach anseo, ach nuair a fhéachann tú air laistigh den phróiseas Toscaire féin agus é a chur i gcomparáid leis an gcur ar aghaidh a dhéanann na snáitheanna oibrithe, bíonn ciall leis. Is é an riail ghinearálta ná go ndéanann an príomh-phróiseas snáithe roinnt oibre, agus ansin caithfidh sé gach snáithe oibrí a nuashonrú de réir toradh na hoibre sin. sa chás seo, ní gá don snáithe oibrithe glas a fháil ar gach rochtain.

Oibríonn córas TLS (Stóráil áitiúil Thread) an Toscaire mar a leanas:

  • Is féidir le cód a ritheann ar an bpríomhshnáithe sliotán TLS a leithdháileadh don phróiseas iomlán. Cé go bhfuil sé seo teibí, go praiticiúil is innéacs isteach i veicteoir é, a sholáthraíonn rochtain O(1).
  • Is féidir leis an bpríomhshnáithe sonraí treallach a shuiteáil ina sliotán. Nuair a dhéantar é seo, foilsítear na sonraí do gach snáithe oibrí mar ghnáth-imeacht lúb imeachta.
  • Is féidir le snáitheanna oibrithe léamh óna sliotán TLS agus aon sonraí snáithe-áitiúla atá ar fáil ann a aisghabháil.

Cé gur paraidím an-simplí agus thar a bheith cumhachtach é, tá sé an-chosúil leis an gcoincheap maidir le blocáil RCU (Léigh-Cóip-Nuashonrú). Go bunúsach, ní fheiceann snáitheanna oibrithe aon athruithe sonraí sna sliotáin TLS agus an obair ar siúl. Ní tharlaíonn athrú ach amháin le linn na tréimhse sosa idir imeachtaí oibre.

Úsáideann Toscaire é seo ar dhá bhealach éagsúla:

  • Trí shonraí éagsúla a stóráil ar gach snáithe oibrithe, is féidir rochtain a fháil ar na sonraí gan aon bhlocáil.
  • Trí phointeoir comhroinnte a choinneáil ar shonraí domhanda sa mhodh inléite amháin ar gach snáithe oibrí. Mar sin, tá comhaireamh tagartha sonraí ag gach snáithe oibrithe nach féidir a laghdú agus an obair ar siúl. Ní scriosfar na seansonraí ach amháin nuair a shocraíonn gach oibrí agus nuair a uaslódálann siad sonraí comhroinnte nua. Tá sé seo comhionann le RCU.

Snáithiú nuashonraithe braisle

San alt seo, déanfaidh mé cur síos ar conas a úsáidtear TLS (Stóráil áitiúil Thread) chun braisle a bhainistiú. Áirítear le bainistíocht braisle xDS API agus/nó próiseáil DNS, chomh maith le seiceáil sláinte.
[Aistriúchán] Múnla snáithithe Toscaire

Áirítear ar bhainistíocht sreabhadh braisle na comhpháirteanna agus na céimeanna seo a leanas:

  1. Is comhpháirt é an Bainisteoir Braisle laistigh de Thoscaire a bhainistíonn gach sruth in aghaidh braisle ar a dtugtar, an tSeirbhís Fionnachtana Braisle (CDS) API, an tSeirbhís Fionnachtana Rúnda (SDS) agus an tSeirbhís Fionnachtana Endpoint (EDS) APIs, DNS, agus seiceálacha seachtracha gníomhacha seiceáil sláinte. Tá sé freagrach as dearcadh "comhsheasmhach faoi dheireadh" a chruthú ar gach braisle in aghaidh an tsrutha, lena n-áirítear ina hóstach aimsithe chomh maith le stádas sláinte.
  2. Déanann an seiceálaí sláinte seiceáil gníomhach sláinte agus tuairiscíonn sé athruithe ar stádas sláinte don bhainisteoir braisle.
  3. Déantar CDS (Seirbhís Fionnachtana Braisle) / SDS (Seirbhís Fionnachtana Rúnda) / EDS (Seirbhís Fionnachtana Deiridh) / DNS chun ballraíocht braisle a chinneadh. Cuirtear an t-athrú stáit ar ais chuig an mbainisteoir braisle.
  4. Déanann gach snáithe oibrithe lúb imeacht go leanúnach.
  5. Nuair a chinneann an bainisteoir braisle go bhfuil an staid le haghaidh braisle athraithe, cruthaíonn sé pictiúr inléite amháin nua de staid an bhraisle agus seolann sé chuig gach snáithe oibrithe é.
  6. Le linn na chéad tréimhse ciúine eile, déanfaidh an snáithe oibrithe an pictiúr a nuashonrú sa sliotán TLS leithdháilte.
  7. Le linn imeacht I/O atá ceaptha chun an t-óstach chun an t-iarmhéid lódála a chinneadh, iarrfaidh an cothromóir ualaigh sliotán TLS (Stóráil áitiúil Thread) chun faisnéis a fháil faoin óstach. Ní éilíonn sé seo glais. Tabhair faoi deara freisin gur féidir le TLS imeachtaí nuashonraithe a spreagadh freisin ionas gur féidir le cothromóirí ualaigh agus comhpháirteanna eile caches, struchtúir sonraí, etc. a athríomh. Tá sé seo lasmuigh de raon feidhme an phoist seo, ach úsáidtear é in áiteanna éagsúla sa chód.

Ag baint úsáide as an nós imeachta thuas, is féidir leis an Toscaire gach iarratas a phróiseáil gan aon bhac (ach amháin mar a thuairiscítear roimhe seo). Seachas castacht an chóid TLS féin, ní gá go dtuigfeadh an chuid is mó den chód conas a oibríonn ilshnáithe agus is féidir é a scríobh i snáithe amháin. Déanann sé seo an chuid is mó den chód níos éasca a scríobh chomh maith le feidhmíocht níos fearr.

Fochórais eile a bhaineann úsáid as TLS

Úsáidtear TLS (Stóráil áitiúil snáithe) agus RCU (Léigh Cóip Nuashonrú) go forleathan in Toscaire.

Samplaí d’úsáid:

  • Meicníocht chun feidhmiúlacht a athrú le linn an fhorghníomhaithe: Ríomhtar liosta reatha na bhfeidhmiúlachta cumasaithe sa phríomhshnáithe. Ansin tugtar pictiúr inléite amháin do gach snáithe oibrithe ag baint úsáide as séimeantaic RCU.
  • Táblaí bealaigh á n-ionadú: Maidir le táblaí bealaigh a sholáthraíonn RDS (Seirbhís Fionnachtana Bealaigh), cruthaítear na táblaí bealaigh ar an bpríomhshnáithe. Soláthrófar an pictiúr inléite amháin ina dhiaidh sin do gach snáithe oibrí ag baint úsáide as séimeantaic RCU (Read Copy Update). Ciallaíonn sé seo go bhfuil na táblaí bealaigh athraithe éifeachtach ó thaobh adamhach.
  • Taisce ceanntásca HTTP: Mar a tharla, tá sé costasach go leor an ceanntásc HTTP a ríomh do gach iarratas (agus ~25K+ RPS in aghaidh an chroí á rith). Ríomhann Toscaire an ceanntásc go lárnach thart ar gach leath soicind agus cuireann sé ar fáil do gach oibrí é trí TLS agus RCU.

Tá cásanna eile ann, ach ba cheart go dtabharfadh na samplaí roimhe seo tuiscint mhaith ar cad chuige a n-úsáidtear TLS.

Gaistí feidhmíochta aitheanta

Cé go bhfeidhmíonn Toscaire go maith ar an iomlán, tá roinnt réimsí suntasacha ann ar gá aird a thabhairt orthu nuair a úsáidtear é le comhairgeadra agus tréchur an-ard:

  • Mar a thuairiscítear san Airteagal seo, faoi láthair faigheann gach snáithe oibrithe glas agus iad ag scríobh chuig an maolán cuimhne logála rochtana. Ag comhairgeadra ard agus tréchur ard, beidh ort na logaí rochtana do gach snáithe oibrí a bhaisceáil ar chostas seachadadh as-ordú agus tú ag scríobh chuig an gcomhad deiridh. Mar mhalairt air sin, is féidir leat logáil rochtana ar leith a chruthú do gach snáithe oibrí.
  • Cé go bhfuil na staitisticí an-uasmhéadaithe, ag comhairgeadra agus tréchur an-ard is dócha go mbeidh argóint adamhach ar staitisticí aonair. Is é réiteach na faidhbe seo ná cuntair in aghaidh an tsnáithe oibrithe le hathshocrú tréimhsiúil ar na cuntair lárnacha. Déanfar é seo a phlé i bpost ina dhiaidh sin.
  • Ní oibreoidh an ailtireacht reatha go maith má imscartar Toscaire i gcás inar fíorbheagán naisc a dteastaíonn acmhainní próiseála suntasacha uathu. Níl aon ráthaíocht ann go ndéanfar naisc a dháileadh go cothrom i measc snáitheanna oibrithe. Is féidir é seo a réiteach trí chothromú nasc oibrithe a chur i bhfeidhm, rud a cheadóidh naisc a mhalartú idir snáitheanna oibrithe.

Conclúid

Tá samhail snáithithe an Toscaire deartha chun éascaíocht a dhéanamh ar ríomhchlárú agus ar chomhthreomhaireacht ollmhór ar chostas cuimhne agus naisc a d’fhéadfadh a bheith amú mura bhfuil siad cumraithe i gceart. Ligeann an tsamhail seo dó feidhmiú go han-mhaith ag comhaireamh snáitheanna agus tréchur an-ard.
Mar a luaigh mé go hachomair ar Twitter, is féidir leis an dearadh a bheith ar bun freisin ar chruach líonraithe iomlán de mhodh úsáideora ar nós DPDK (Data Plane Development Kit), a bhféadfadh gnáthfhreastalaithe a láimhseáil na milliúin iarratas in aghaidh an tsoicind le próiseáil iomlán L7. Beidh sé an-suimiúil a fheiceáil cad a thógfar sna blianta beaga amach romhainn.
Trácht tapa deiridh amháin: Is iomaí uair a fiafraíodh díom cén fáth a roghnaigh muid C++ don Toscaire. Is é an chúis go fóill gurb í an t-aon teanga de ghrád tionsclaíochta a úsáidtear go forleathan fós inar féidir an ailtireacht a bhfuil cur síos uirthi sa phost seo a thógáil. Is cinnte nach bhfuil C++ oiriúnach do gach tionscadal nó fiú go leor tionscadal, ach i gcásanna úsáide áirithe is é an t-aon uirlis fós é chun an post a dhéanamh.

Naisc chuig an gcód

Naisc le comhaid a bhfuil comhéadain agus feidhmiúcháin ceanntásc plé leo sa phost seo:

Foinse: will.com

Add a comment