[Eadar-theangachadh] Modail snàthainn teachdaire

Eadar-theangachadh den artaigil: Modail snàthainn tosgaire - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

Fhuair mi an artaigil seo gu math inntinneach, agus leis gu bheil an Tosgaire air a chleachdadh gu tric mar phàirt den “istio” no dìreach mar “smachdadair teachd a-steach” kubernetes, chan eil an aon eadar-obrachadh dìreach aig a ’mhòr-chuid de dhaoine leis agus, mar eisimpleir, le àbhaisteach. Stàladh Nginx no Haproxy. Ach, ma bhriseas rudeigin, bhiodh e math tuigsinn mar a tha e ag obair bhon taobh a-staigh. Dh’ fheuch mi ri nas urrainn dhomh den teacsa eadar-theangachadh gu Ruisis, a’ toirt a-steach faclan sònraichte; dhaibhsan a tha ga fhaighinn goirt coimhead air seo, dh’ fhàg mi na tùsan ann am bragan. Fàilte don chat.

Tha sgrìobhainnean teignigeach ìre ìosal airson an Envoy codebase gu math gann an-dràsta. Gus seo a cheartachadh, tha mi an dùil sreath de phuist bhlog a dhèanamh mu na diofar fo-shiostaman aig Tosgaire. Leis gur e seo a’ chiad artaigil, feuch an innis thu dhomh do bheachdan agus na dh’ fhaodadh ùidh a bhith agad ann an artaigilean san àm ri teachd.

Is e aon de na ceistean teicnigeach as cumanta a gheibh mi mu dheidhinn Tosgaire a bhith ag iarraidh tuairisgeul ìre ìosal air a’ mhodail snàithlean a bhios e a’ cleachdadh. Anns an dreuchd seo, bheir mi cunntas air mar a bhios Tosgaire a’ mapadh cheanglaichean ri snàithleanan, a bharrachd air an t-siostam Stòradh Ionadail Thread a bhios e a’ cleachdadh air an taobh a-staigh gus còd a dhèanamh nas co-shìnte agus àrd-choileanadh.

Sealladh farsaing air snàithlean

[Eadar-theangachadh] Modail snàthainn teachdaire

Bidh an tosgaire a’ cleachdadh trì diofar shruthan:

  • Prìomh: Bidh an t-snàthainn seo a’ cumail smachd air tòiseachadh is crìochnachadh pròiseas, a h-uile giollachd den API XDS (xDiscovery Service), a’ toirt a-steach DNS, sgrùdadh slàinte, cruinneachadh coitcheann agus riaghladh ùine ruith, ath-shuidheachadh staitistig, rianachd agus riaghladh pròiseas coitcheann - comharran Linux, ath-thòiseachadh teth, msaa. a thachras san t-snàthainn seo tha asyncronach agus “gun bhacadh”. San fharsaingeachd, bidh am prìomh snàithlean a’ co-òrdanachadh a h-uile pròiseas gnìomh èiginneach nach eil feumach air tòrr CPU airson a ruith. Leigidh seo leis a’ mhòr-chuid de chòd smachd a bhith air a sgrìobhadh mar gum biodh e le aon snàthainn.
  • Neach-obrach: Gu gnàthach, bidh Tosgaire a’ cruthachadh snàithlean obraiche airson gach snàithlean bathar-cruaidh san t-siostam, faodar seo a smachdachadh leis an roghainn --concurrency. Bidh gach snàithlean neach-obrach a’ ruith lùb tachartais “gun bhacadh”, air a bheil uallach airson èisteachd ri gach neach-èisteachd; aig àm sgrìobhaidh (29 Iuchar, 2017) chan eil bearradh sam bith air an neach-èisteachd, a ’gabhail ri ceanglaichean ùra, a’ toirt a-steach stac sìoltachain airson an ceangal, agus a’ giullachd a h-uile gnìomh cur-a-steach / toraidh (IO) rè beatha a’ cheangail. A-rithist, leigidh seo leis a’ mhòr-chuid de chòd làimhseachadh ceangail a sgrìobhadh mar gum biodh e le aon snàithlean.
  • Fuasgladh faidhle: Tha snàithlean bacaidh neo-eisimeileach aig gach faidhle a sgrìobhas Tosgaire, gu h-àraidh logaichean ruigsinneachd. Tha seo air sgàth gu bheil sgrìobhadh gu faidhlichean air an tasgadh leis an t-siostam faidhle eadhon nuair a bhios iad gan cleachdadh O_NONBLOCK uaireannan gheibh thu bacadh (osna). Nuair a dh’ fheumas snàithleanan neach-obrach sgrìobhadh gu faidhle, thèid an dàta a ghluasad gu bufair mar chuimhneachan far am bi e mu dheireadh air a sgaoileadh tron ​​​​t-snàthainn sruthadh faidhle. Is e seo aon raon de chòd far am faod a h-uile snàithlean neach-obrach gu teicnigeach an aon ghlas a bhacadh fhad ‘s a tha iad a’ feuchainn ri bufair cuimhne a lìonadh.

Làimhseachadh ceangail

Mar a chaidh a dheasbad gu h-àrd, bidh na snàithleanan luchd-obrach uile ag èisteachd ris a h-uile neach-èisteachd gun sharding sam bith. Mar sin, thathas a’ cleachdadh an kernel gus socaidean ris an deach gabhail gu gràsmhor a chuir gu snàithleanan luchd-obrach. Tha kernels ùr-nodha sa chumantas fìor mhath air seo, bidh iad a’ cleachdadh feartan mar àrdachadh prìomhachas cuir a-steach / toradh (IO) gus feuchainn ri snàithlean a lìonadh le obair mus tòisich iad a’ cleachdadh snàithleanan eile a tha cuideachd ag èisteachd air an aon socaid, agus cuideachd gun a bhith a’ cleachdadh robin cruinn. glasadh (Spinlock) gus gach iarrtas a phròiseasadh.
Cho luath ‘s a thèid gabhail ri ceangal air snàithlean neach-obrach, cha bhith e a’ fàgail an t-snàthainn sin gu bràth. Tha a h-uile giollachd eile den cheangal air a làimhseachadh gu tur ann an snàithlean an neach-obrach, a’ toirt a-steach giùlan air adhart sam bith.

Tha grunn bhuaidhean cudromach aig seo:

  • Tha a h-uile amar ceangail ann an Envoy air a shònrachadh do shnàthainn neach-obrach. Mar sin, ged nach dèan amaran ceangail HTTP / 2 ach aon cheangal ri gach aoigh shuas an abhainn aig aon àm, ma tha ceithir snàithleanan luchd-obrach ann, bidh ceithir ceanglaichean HTTP / 2 ann airson gach aoigh shuas an abhainn ann an staid sheasmhach.
  • Is e an adhbhar a tha Tosgaire ag obair mar seo, le bhith a’ cumail a h-uile càil air aon snàithlean neach-obrach, faodar cha mhòr a h-uile còd a sgrìobhadh gun bhacadh agus mar gum biodh e na shnàthainn singilte. Tha an dealbhadh seo ga dhèanamh furasta tòrr chòd agus lannan a sgrìobhadh gu math gu àireamh cha mhòr gun chrìoch de snàithleanan luchd-obrach.
  • Ach, is e aon de na prìomh rudan beir leat gu bheil e fìor chudromach, bho shealladh cuimhne agus èifeachdas ceangail, an suidheachadh a rèiteachadh. --concurrency. Le bhith a’ faighinn barrachd snàithnean luchd-obrach na tha riatanach bidh sin a’ caitheamh cuimhne, a’ cruthachadh barrachd cheanglaichean leisg, agus a’ lughdachadh ìre cruinneachadh ceangail. Aig Lyft, bidh na soithichean càr taobh teachdaiche againn a’ ruith le airgead gu math ìosal gus am bi coileanadh gu ìre mhòr a rèir nan seirbheisean air am bi iad nan suidhe. Bidh sinn a’ ruith Envoy mar neach-ionaid iomaill a-mhàin aig an ìre as àirde de airgead.

Dè a tha neo-bhacadh a’ ciallachadh?

Tha am facal “neo-bacadh” air a bhith air a chleachdadh grunn thursan gu ruige seo nuair a thathar a’ beachdachadh air mar a tha na prìomh snàithleanan agus snàithleanan neach-obrach ag obair. Tha a h-uile còd sgrìobhte leis a’ bharail nach tèid dad a bhacadh a-riamh. Ach, chan eil seo gu tur fìor (what is not entirely true?).

Bidh an tosgaire a’ cleachdadh grunn ghlasan pròiseas fada:

  • Mar a chaidh a dheasbad, nuair a bhios tu a’ sgrìobhadh logaichean ruigsinneachd, bidh a h-uile snàithlean neach-obrach a’ faighinn an aon ghlas mus tèid am bufair log cuimhneachaidh a lìonadh. Bu chòir an ùine glacaidh glasaidh a bhith gu math ìosal, ach tha e comasach a’ ghlas a chuir an aghaidh a chèile aig ìre àrd concurrency agus trochur àrd.
  • Bidh Envoy a’ cleachdadh siostam gu math toinnte airson làimhseachadh staitistig a tha ionadail don t-snàthainn. Bidh seo na chuspair air post air leth. Ach, bheir mi iomradh goirid, mar phàirt de bhith a’ giullachd staitistig snàithlean gu h-ionadail, gu bheil e uaireannan riatanach glas fhaighinn air “stòr stats” sa mheadhan. Cha bu chòir gum biodh feum air a’ ghlasadh seo a-riamh.
  • Feumaidh am prìomh snàithlean co-òrdanachadh bho àm gu àm leis a h-uile snàithlean neach-obrach. Tha seo air a dhèanamh le bhith "a 'foillseachadh" bhon phrìomh snàithlean gu snàithleanan luchd-obrach, agus uaireannan bho snàithleanan luchd-obrach air ais chun phrìomh snàithlean. Feumaidh cur a-steach glas gus an tèid an teachdaireachd foillsichte a chiudha airson a lìbhrigeadh nas fhaide air adhart. Cha bu chòir dùbhlan mòr a thoirt dha na glasan sin a-riamh, ach faodaidh iad fhathast a bhith air am bacadh gu teicnigeach.
  • Nuair a sgrìobhas Tosgaire log gu sruth mearachd an t-siostaim (mearachd àbhaisteach), gheibh e glas air a’ phròiseas gu lèir. San fharsaingeachd, tha logadh ionadail Envoy air a mheas uamhasach bho thaobh dèanadais, agus mar sin cha deach mòran aire a thoirt dha leasachadh.
  • Tha grunn ghlasan air thuaiream eile ann, ach chan eil gin dhiubh deatamach airson coileanadh agus cha bu chòir dùbhlan a thoirt dhaibh gu bràth.

Snàthainn stòradh ionadail

Air sgàth an dòigh anns a bheil an Tosgaire a’ sgaradh dleastanasan a’ phrìomh snàithlean bho dhleastanasan an t-snàthainn neach-obrach, tha riatanas ann gun gabh giollachd iom-fhillte a dhèanamh air a’ phrìomh snàithlean agus an uairsin a thoirt do gach snàithlean neach-obrach ann an dòigh gu math co-aontach. Tha an earrann seo a’ toirt cunntas air Stòradh Ionadail Envoy Thread (TLS) aig ìre àrd. Anns an ath earrann bheir mi cunntas air mar a tha e air a chleachdadh airson braisle a riaghladh.
[Eadar-theangachadh] Modail snàthainn teachdaire

Mar a chaidh a mhìneachadh mar-thà, bidh am prìomh snàithlean a’ làimhseachadh cha mhòr a h-uile gnìomh plèana riaghlaidh is smachd sa phròiseas Tosgaire. Tha cus cuideam air a’ phlèana smachd an seo, ach nuair a choimheadas tu air taobh a-staigh pròiseas an Tosgaire fhèin agus an coimeas ris an gluasad air adhart a bhios snàithleanan an neach-obrach a’ dèanamh, tha e ciallach. Is e an riaghailt choitcheann gu bheil am prìomh phròiseas snàithlean a 'dèanamh beagan obrach, agus an uairsin feumaidh e gach snàithlean neach-obrach ùrachadh a rèir toradh na h-obrach sin. anns a 'chùis seo, chan fheum snàithlean an neach-obrach glas fhaighinn air gach slighe.

Tha siostam TLS Envoy (Stòradh ionadail Thread) ag obair mar a leanas:

  • Faodaidh còd a tha a 'ruith air a' phrìomh snàithlean slot TLS a riarachadh airson a 'phròiseis gu lèir. Ged a tha seo air a thoirt a-mach, ann an cleachdadh tha e na chlàr-amais a-steach do vectar, a’ toirt cothrom air O(1).
  • Faodaidh am prìomh snàithlean dàta neo-riaghailteach a chuir a-steach don t-slot aige. Nuair a thèid seo a dhèanamh, thèid an dàta fhoillseachadh do gach snàithlean neach-obrach mar thachartas lùb tachartais àbhaisteach.
  • Faodaidh snàithleanan luchd-obrach leughadh bhon t-slot TLS aca agus dàta ionadail snàithlean sam bith a tha ri fhaighinn an sin fhaighinn air ais.

Ged is e paradigm gu math sìmplidh agus air leth cumhachdach a th’ ann, tha e glè choltach ris a’ bhun-bheachd air bacadh RCU (Leugh-Copy-Update). Gu bunaiteach, chan fhaic snàithleanan luchd-obrach atharrachadh dàta sam bith anns na sliotan TLS fhad ‘s a tha obair a’ dol. Chan eil atharrachadh a 'tachairt ach anns an ùine fois eadar tachartasan obrach.

Bidh Envoy a’ cleachdadh seo ann an dà dhòigh eadar-dhealaichte:

  • Le bhith a’ stòradh dàta eadar-dhealaichte air gach snàithlean neach-obrach, faodar faighinn chun dàta gun bhacadh sam bith.
  • Le bhith a’ cumail comharradh co-roinnte gu dàta cruinneil ann am modh leughaidh a-mhàin air gach snàithlean neach-obrach. Mar sin, tha cunntas fiosrachaidh dàta aig gach snàithlean neach-obrach nach gabh a lughdachadh fhad ‘s a tha an obair a’ dol. Is ann dìreach nuair a bhios an neach-obrach uile a’ socrachadh agus a’ luchdachadh suas dàta ùr co-roinnte a thèid an seann dàta a sgrios. Tha seo co-ionann ri RCU.

Snàthadh a-nuas brabhsair

Anns an earrainn seo, bheir mi cunntas air mar a thathas a’ cleachdadh TLS (Stòradh ionadail Thread) gus cruinneachadh a riaghladh. Tha riaghladh cnuasachadh a’ toirt a-steach giullachd xDS API agus/no DNS, a bharrachd air sgrùdadh slàinte.
[Eadar-theangachadh] Modail snàthainn teachdaire

Tha riaghladh sruth chnuic a’ toirt a-steach na pàirtean agus na ceumannan a leanas:

  1. Tha am Manaidsear Cluster na phàirt taobh a-staigh Tosgaire a bhios a’ riaghladh a h-uile sruthan brabhsair aithnichte, an t-Seirbheis Lorg Cluster (CDS) API, an t-Seirbheis Lorg Dìomhair (SDS) agus Seirbheis Lorg Endpoint (EDS), APIs, DNS, agus sgrùdaidhean gnìomhach taobh a-muigh sgrùdadh slàinte. Tha e an urra ri bhith a’ cruthachadh sealladh “mu dheireadh cunbhalach” de gach buidheann shuas an abhainn, a tha a’ toirt a-steach luchd-aoigheachd a chaidh a lorg a bharrachd air inbhe slàinte.
  2. Bidh an neach-dearbhaidh slàinte a’ dèanamh sgrùdadh slàinte gnìomhach agus ag aithris air atharrachaidhean ann an inbhe slàinte don mhanaidsear brabhsair.
  3. Bithear a’ coileanadh CDS (Seirbheis Lorg Cluster) / SDS (Seirbheis Lorg Dìomhair) / EDS (Seirbheis Lorg Endpoint) / DNS gus ballrachd brabhsair a dhearbhadh. Tha an t-atharrachadh stàite air a thilleadh chun mhanaidsear brabhsair.
  4. Bidh gach snàithlean neach-obrach an-còmhnaidh a’ cur an gnìomh lùb tachartais.
  5. Nuair a cho-dhùineas am manaidsear brabhsair gu bheil an staid airson brabhsair air atharrachadh, cruthaichidh e dealbh ùr ri leughadh a-mhàin de staid a’ bhraisle agus cuiridh e gu gach snàithlean neach-obrach e.
  6. Rè an ath ùine shàmhach, bheir snàithlean an neach-obrach ùrachadh air an dealbh anns an t-slot TLS a chaidh a shònrachadh.
  7. Rè tachartas I / O a tha còir a bhith a’ dearbhadh an aoigh airson cothromachadh a luchdachadh, iarraidh an neach-cothromachaidh luchd slot TLS (Stòr ionadail Thread) gus fiosrachadh fhaighinn mun aoigh. Chan fheum seo glasan. Thoir an aire cuideachd gum faod TLS cuideachd tachartasan ùrachaidh a bhrosnachadh gus an urrainn do chothromachadh luchdan agus co-phàirtean eile caches, structaran dàta, msaa ath-àireamhachadh. Tha seo taobh a-muigh raon na dreuchd seo, ach tha e air a chleachdadh ann an grunn àiteachan sa chòd.

A’ cleachdadh a’ mhodh-obrach gu h-àrd, faodaidh an Tosgaire gach iarrtas a phròiseasadh gun bhacadh sam bith (ach a-mhàin mar a chaidh a mhìneachadh roimhe). A bharrachd air cho iom-fhillte 'sa tha còd TLS fhèin, chan fheum a' mhòr-chuid den chòd tuigsinn mar a tha ioma-snàithlean ag obair agus faodar a sgrìobhadh le aon snàthainn. Tha seo ga dhèanamh nas fhasa a’ mhòr-chuid den chòd a sgrìobhadh a bharrachd air coileanadh nas fheàrr.

Fo-shiostaman eile a bhios a’ cleachdadh TLS

Tha TLS (Stòradh ionadail Thread) agus RCU (Leugh Copy Update) air an cleachdadh gu farsaing ann an Tosgaire.

Eisimpleirean cleachdaidh:

  • Inneal airson comas-gnìomh atharrachadh aig àm cur gu bàs: Tha an liosta gnàthach de ghnìomhachd comasach air a thomhas sa phrìomh snàithlean. An uairsin gheibh gach snàithlean neach-obrach dealbh leughaidh a-mhàin a’ cleachdadh semantics RCU.
  • A 'cur an àite clàran slighe: Airson clàran slighe air an toirt seachad le RDS (Seirbheis Lorg Slighe), tha na clàran slighe air an cruthachadh air a’ phrìomh snàithlean. Thèid an dealbh leughaidh a-mhàin a thoirt seachad às deidh sin do gach snàithlean neach-obrach a’ cleachdadh semantics RCU (Leugh Copy Update). Tha seo a’ dèanamh atharrachadh clàran slighe èifeachdach gu atamach.
  • Tasgadh cinn-cinn HTTP: Mar a thionndaidh e, tha e gu math daor obrachadh a-mach bann-cinn HTTP airson gach iarrtas (fhad ‘s a tha e a’ ruith ~ 25K + RPS gach cridhe). Bidh an tosgaire sa mheadhan a’ tomhas a’ chinn timcheall air a h-uile leth diog agus ga thoirt do gach neach-obrach tro TLS agus RCU.

Tha cùisean eile ann, ach bu chòir dha na h-eisimpleirean roimhe seo deagh thuigse a thoirt seachad air na tha TLS air a chleachdadh.

Duilgheadasan coileanaidh aithnichte

Fhad ‘s a tha an Tosgaire a’ coileanadh gu math san fharsaingeachd, tha grunn raointean sònraichte ann a dh’ fheumas aire nuair a thèid a chleachdadh le airgead-crìche agus toradh fìor àrd:

  • Mar a chaidh a mhìneachadh san artaigil seo, an-dràsta bidh a h-uile snàithlean neach-obrach a’ faighinn glas nuair a bhios iad a ’sgrìobhadh chun bufair cuimhne log ruigsinneachd. Aig ìre àrd concurrency agus tar-chuir àrd, feumaidh tu na logaichean ruigsinneachd airson gach snàithlean neach-obrach a bhacadh aig cosgais lìbhrigeadh taobh a-muigh òrdugh nuair a sgrìobhas tu chun fhaidhle deireannach. Air neo, faodaidh tu log inntrigidh fa leth a chruthachadh airson gach snàithlean neach-obrach.
  • Ged a tha na staitistigean air an ùrachadh gu mòr, le co-ionannachd agus trochur fìor àrd bidh coltas ann gum bi connspaid atamach air staitistig fa leth. Is e am fuasgladh don duilgheadas seo cunntairean gach snàthainn neach-obrach le ath-shuidheachadh bho àm gu àm air cunntairean meadhanach. Thèid seo a dheasbad ann am post eile.
  • Chan obraich an ailtireachd a th’ ann an-dràsta gu math ma thèid Envoy a chleachdadh ann an suidheachadh far nach eil ach glè bheag de cheanglaichean a dh’ fheumas goireasan giullachd cudromach. Chan eil gealltanas sam bith ann gum bi ceanglaichean air an sgaoileadh gu cothromach am measg snàithleanan luchd-obrach. Faodar seo fhuasgladh le bhith a 'cur an gnìomh cothromachadh ceangail luchd-obrach, a leigeas le iomlaid cheanglaichean eadar snàithleanan luchd-obrach.

Co-dhùnadh

Tha modail snàthainn Envoy air a dhealbhadh gus prògramadh furasta agus co-shìnteachd mòr a thoirt seachad aig cosgais cuimhne agus ceanglaichean a dh’ fhaodadh a bhith sgudail mura h-eil iad air an rèiteachadh gu ceart. Tha am modail seo a’ leigeil leis coileanadh fìor mhath aig àireamhan snàithlean fìor àrd agus trochur.
Mar a thuirt mi gu h-aithghearr air Twitter, faodaidh an dealbhadh cuideachd ruith a bharrachd air stac lìonra làn modh cleachdaiche leithid DPDK (Data Plane Development Kit), a dh’ fhaodadh gum bi frithealaichean àbhaisteach a ’làimhseachadh milleanan de dh’ iarrtasan gach diog le làn ghiollachd L7. Bidh e glè inntinneach faicinn dè thèid a thogail anns na beagan bhliadhnaichean ri teachd.
Aon bheachd sgiobalta mu dheireadh: chaidh faighneachd dhomh iomadh uair carson a thagh sinn C ++ airson Tosgaire. Is e an adhbhar fhathast gur e seo an aon chànan ìre gnìomhachais a thathas a’ cleachdadh fad is farsaing anns am faodar an ailtireachd a tha air a mhìneachadh san dreuchd seo a thogail. Chan eil C ++ gu cinnteach freagarrach airson a h-uile pròiseact no eadhon mòran, ach airson cuid de chùisean cleachdaidh is e fhathast an aon inneal airson an obair a dhèanamh.

Ceanglaichean gu còd a

Ceanglaichean gu faidhlichean le eadar-aghaidh agus buileachadh cinn air an deasbad san dreuchd seo:

Source: www.habr.com

Cuir beachd ann