[Nsụgharị] Nlereanya eri eri

Ntụgharị asụsụ akụkọ: Ihe nrịbama nke envoy - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

Achọpụtara m isiokwu a na-atọ ụtọ nke ukwuu, ebe ọ bụ na a na-ejikarị Envoy eme ihe dị ka akụkụ nke "istio" ma ọ bụ naanị dị ka "onye na-ahụ maka ingress" nke kubernetes, ọtụtụ ndị mmadụ enweghị otu mmekọrịta ya na ya, dịka ọmụmaatụ, na-ahụkarị. Nginx ma ọ bụ nrụnye Haproxy. Otú ọ dị, ọ bụrụ na ihe na-agbaji, ọ ga-adị mma ịghọta otú o si arụ ọrụ site n'ime. Agbalịrị m ịsụgharị ọtụtụ n'ime ederede gaa na Russian dị ka o kwere mee, gụnyere okwu ndị pụrụ iche; maka ndị na-ahụ na ọ na-ewute ya ilele nke a, ahapụrụ m ndị mbụ ahụ na mbo. Nabata nwamba.

Akwụkwọ teknuzu dị ala maka codebase Envoy adịchaghị ụkọ ugbu a. Iji dozie nke a, m na-eme atụmatụ ime usoro nke blọọgụ gbasara usoro dị iche iche nke Envoy. Ebe ọ bụ na nke a bụ isiokwu mbụ, biko mee ka m mara ihe i chere na ihe i nwere ike ịmasị gị n’isiokwu ndị dị n’ihu.

Otu n'ime ajụjụ teknuzu a na-ahụkarị m na-enweta gbasara onye ozi bụ ịrịọ maka nkọwa dị ala nke ụdị threadi ọ na-eji. N'ime ọkwa a, m ga-akọwa otu onye ozi maapụ njikọ na eri, yana usoro Nchekwa Mpaghara nke Thread ọ na-eji n'ime ime ka koodu dị n'otu na ịrụ ọrụ dị elu.

Nchịkọta eri

[Nsụgharị] Nlereanya eri eri

Onye ozi na-eji ụdị iyi atọ dị iche iche:

  • Isi: Nke a na eri na-achịkwa usoro mmalite na nchupu, nhazi niile nke XDS (xDiscovery Service) API, gụnyere DNS, nyocha ahụike, ụyọkọ izugbe na njikwa oge, nhazi ọnụọgụgụ, nchịkwa na njikwa usoro n'ozuzu - akara Linux. na-ekpo ọkụ malitegharịa, wdg. Ihe ọ bụla. eme na nke a thread bụ asynchronous na "non-blocking". N'ozuzu, isi eri na-ahazi usoro ọrụ niile dị oke mkpa nke na-achọghị nnukwu CPU iji na-agba ọsọ. Nke a na-enye ohere ka edere ọtụtụ koodu njikwa ka ọ bụ otu eri.
  • Onye ọrụ: Site na ndabara, Onye ozi na-emepụta eri onye ọrụ maka eriri ngwaike ọ bụla na sistemụ, enwere ike ijikwa nke a site na iji nhọrọ --concurrency. Eriri onye ọrụ ọ bụla na-eme loop mmemme “anaghị egbochi”, bụ nke na-ahụ maka ịge onye ọ bụla ege ntị; n'oge edere (July 29, 2017) enweghị nzacha nke onye na-ege ntị, ịnakwere njikọ ọhụrụ, na-eme ngwa nzacha nzacha maka. njikọ, na nhazi ọrụ ntinye / mmepụta (IO) niile n'oge ndụ njikọ ahụ. Ọzọ, nke a na-enye ohere ka edere ọtụtụ koodu njikwa njikọ dị ka a ga-asị na ọ bụ otu eri.
  • Mpempe faịlụ: Faịlụ ọ bụla nke onye ozi na-ede, ọkachasị ịnweta ndekọ, nwere eriri mgbochi nọọrọ onwe ya ugbu a. Nke a bụ n'ihi na ịdegara faịlụ faịlụ echekwara na sistemụ faịlụ ọbụlagodi mgbe ị na-eji ya O_NONBLOCK nwere ike na-egbochi mgbe ụfọdụ (asụ ude). Mgbe eriri ndị ọrụ chọrọ ide na faịlụ, a na-ebuga data ahụ na ebe nchekwa ebe a na-emesịa wepụ ya na eri ahụ. ihichapụ faịlụ. Nke a bụ otu mpaghara koodu ebe teknụzụ ndị ọrụ niile nwere ike igbochi otu mkpọchi ka ha na-agbalị imeju ebe nchekwa.

Ijikwa njikọ

Dị ka a tụlere nkenke n'elu, eriri ndị ọrụ niile na-ege ndị na-ege ntị ntị n'enweghị ihe ọ bụla. Ya mere, a na-eji kernel na-ezipụ oghere ndị anabatara na eri ndị ọrụ. Mkpụrụ ndụ ọgbara ọhụrụ na-adịkarị mma na nke a, ha na-eji njirimara dị ka ntinye / mmepụta (IO) na-ebuli elu iji gbalịa mejupụta eri na ọrụ tupu ha amalite iji eriri ndị ọzọ na-egekwa ntị n'otu oghere, na-adịghịkwa eji gburugburu robin. mkpọchi (Spinlock) iji hazie arịrịọ ọ bụla.
Ozugbo anabatara njikọ na eri onye ọrụ, ọ dịghị ahapụ eri ahụ. A na-edozi nhazi niile nke njikọ ahụ kpamkpam na eri onye ọrụ, gụnyere omume mbugharị ọ bụla.

Nke a nwere ọtụtụ nsonaazụ dị mkpa:

  • A na-ekenye ọdọ mmiri njikọ niile dị na Enji na eriri onye ọrụ. Yabụ, ọ bụ ezie na ọdọ mmiri njikọ HTTP / 2 na-eme naanị otu njikọ na onye nnabata ọ bụla na-ebuli elu n'otu oge, ọ bụrụ na enwere eriri ndị ọrụ anọ, a ga-enwe njikọ HTTP / 2 anọ maka ndị ọbịa na-aga n'ihu na steeti kwụsiri ike.
  • Ihe mere Envoy ji arụ ọrụ otu a bụ na site n'idebe ihe niile na eri otu onye ọrụ, ihe fọrọ nke nta ka ọ bụrụ koodu niile nwere ike ide n'enweghị ngọngọ ma dị ka a ga-asị na ọ bụ otu eriri. Nhazi a na-eme ka ọ dị mfe ide ọtụtụ koodu na akpịrịkpa nke ọma na ọnụ ọgụgụ ndị ọrụ na-enweghị njedebe.
  • Otú ọ dị, otu n'ime isi ihe a na-ewere bụ na site na ebe nchekwa ebe nchekwa na njiri arụmọrụ njikọ, ọ dị ezigbo mkpa ịhazi ya. --concurrency. Inwe eri ndị ọrụ karịa ka ọ dị mkpa ga-emebi ebe nchekwa, mepụta njikọ ndị na-abaghị uru, ma belata ọnụego njikọ njikọ. Na Lyft, arịa ndị nnọchi anya ndị nnọchi anya anyị na-eji ọnụ ahịa dị ala na-agba ọsọ ka arụmọrụ dabara na ọrụ ha na-anọdụ ala n'akụkụ. Anyị na-agba Envoy dị ka onye nnọchi anya ihu naanị na nkwekọrịta kacha.

Kedu ihe enweghị mgbochi pụtara?

A na-eji okwu ahụ bụ "anaghị egbochi" eme ihe ọtụtụ oge mgbe a na-ekwu maka otu eriri isi na onye ọrụ si arụ ọrụ. Edere koodu niile n'echiche na ọ nweghị ihe gbochiri. Agbanyeghị, nke a abụghị eziokwu kpamkpam (nke na-abụghị eziokwu?).

Onye ozi na-eji ọtụtụ mkpọchi usoro ogologo oge:

  • Dịka a tụlere, mgbe ị na-ede ndekọ ohere ịnweta, eriri ndị ọrụ niile na-enweta otu mkpọchi tupu ejupụta ebe nchekwa nchekwa. Oge njide mkpọchi kwesịrị ịdị oke ala, mana ọ ga-ekwe omume na mkpọchi a na-asọ mpi na nnukwu concurrency na nnukwu mmepụta.
  • Onye ozi na-eji usoro dị mgbagwoju anya na-edozi ọnụ ọgụgụ ndị dị na mpaghara na eri ahụ. Nke a ga-abụ isiokwu nke post dị iche. Agbanyeghị, m ga-ekwu maka nkenke na dịka akụkụ nke nhazi ọnụ ọgụgụ eri na mpaghara, ọ na-adị mkpa mgbe ụfọdụ ịnweta mkpọchi na etiti "ụlọ ahịa stats". Agaghị achọ mkpọchi a ma ọlị.
  • Isi eri oge ụfọdụ kwesịrị ịhazi ya na eri ndị ọrụ niile. A na-eme nke a site na "ibipụta" site na isi eri ruo na eriri ndị ọrụ, na mgbe ụfọdụ site na eriri ndị ọrụ laghachi na eri isi. Nzipu chọrọ mkpọchi ka ozi ebipụtara nwee ike kwụ n'ahịrị maka izipu ma emechaa. E kwesịghị ịsacha mkpọchi ndị a nke ọma, mana enwere ike igbochi ya na teknụzụ.
  • Mgbe onye ozi na-ede ndekọ na iyi njehie sistemụ (njehie ọkọlọtọ), ọ na-enweta mkpọchi na usoro niile. N'ozuzu, a na-ewere igbu osisi mpaghara nke Envoy dị ka ihe egwu site n'ọnọdụ arụmọrụ, ya mere etinyebeghị nlezianya dị ukwuu maka imeziwanye ya.
  • Enwere mkpọchi ole na ole ndị ọzọ, mana ọ nweghị nke ọ bụla n'ime ha na-arụ ọrụ dị oke egwu na ekwesighi ịgba mgba.

Eriri nchekwa mpaghara

N'ihi na otu onye ozi na-ekewa ọrụ nke isi eri na ọrụ nke onye ọrụ, ọ dị mkpa ka e nwee ike ịme nhazi mgbagwoju anya na isi eri wee nye onye ọrụ ọ bụla eri n'ụzọ dị oke ọnụ. Nkebi a na-akọwa Nchekwa Mpaghara Eriri Envoy (TLS) na ọkwa dị elu. Na ngalaba na-esote m ga-akọwa otu esi eji ya jikwaa ụyọkọ.
[Nsụgharị] Nlereanya eri eri

Dị ka akọwara mbụ, eri bụ isi na-ejikwa ihe niile njikwa na njikwa ụgbọ elu na-arụ ọrụ n'ime usoro ndị ozi. Ụgbọ elu na-achịkwa dị ntakịrị ebe a, ma mgbe ị na-ele ya anya n'ime usoro nhazi n'onwe ya ma jiri ya tụnyere mbugharị nke eriri ndị ọrụ na-eme, ọ bụ ihe ezi uche dị na ya. Iwu n'ozuzu bụ na usoro isi eri na-arụ ọrụ ụfọdụ, mgbe ahụ ọ kwesịrị imelite eriri onye ọrụ ọ bụla dịka nsonaazụ nke ọrụ ahụ si dị. na nke a, eriri onye ọrụ adịghị mkpa ịnweta mkpọchi na ohere ọ bụla.

Usoro TLS nke Envoy (Thread local storage) na-arụ ọrụ dị ka ndị a:

  • Koodu na-agba ọsọ na isi eri nwere ike inye oghere TLS maka usoro niile. Ọ bụ ezie na nke a bụ abstracted, na omume, ọ bụ index n'ime vector, na-enye O(1) ohere.
  • Isi eri nwere ike itinye data aka ike n'ime oghere ya. Mgbe emechara nke a, a na-ebipụta data ahụ na eri onye ọrụ ọ bụla dị ka ihe omume nkịtị.
  • Eriri ndị ọrụ nwere ike ịgụ na oghere TLS ha wee weghachite data mpaghara eriri ọ bụla dị ebe ahụ.

Ọ bụ ezie na ọ dị nnọọ mfe ma dị ike nke ukwuu, ọ dị nnọọ ka echiche nke RCU (Gụọ-Copy-update) igbochi. N'ụzọ bụ isi, eriri ndị ọrụ anaghị ahụ mgbanwe data ọ bụla na oghere TLS ka ọrụ na-aga. Mgbanwe na-eme naanị n'oge ezumike n'etiti ihe omume ọrụ.

Onye nnọchi anya na-eji nke a ụzọ abụọ dị iche iche:

  • Site na ịchekwa data dị iche iche na eri onye ọrụ ọ bụla, enwere ike ịnweta data na-enweghị mgbochi ọ bụla.
  • Site na idowe ihe ntụnye aka na data zuru ụwa ọnụ n'ụdị ọgụgụ naanị na eri onye ọrụ ọ bụla. Ya mere, eriri onye ọrụ ọ bụla nwere ọnụọgụ ntụaka data nke enweghị ike ibelata mgbe ọrụ na-aga. Naanị mgbe ndị ọrụ niile daa jụụ wee bulite data ekekọrịtara ọhụrụ ka a ga-emebi data ochie. Nke a yiri RCU.

erikọ mmelite ụyọkọ

Na ngalaba a, m ga-akọwa otu esi eji TLS (Nchekwa mpaghara eriri) jikwaa ụyọkọ. Njikwa ụyọkọ gụnyere xDS API na/ma ọ bụ nhazi DNS, yana nlele ahụike.
[Nsụgharị] Nlereanya eri eri

Ijikwa usoro mmiri ụyọkọ gụnyere ihe ndị a na usoro ndị a:

  1. Onye njikwa ụyọkọ bụ akụkụ dị n'ime onye ozi na-ahụ maka ụyọkọ niile ama ama na elu, Cluster Discovery Service (CDS) API, Service Discovery Service (SDS) na Endpoint Discovery Service (EDS) API, DNS, na mpụ na-arụsi ọrụ ike ịlele ahụike. Ọ bụ ya na-ahụ maka ịmepụta echiche "na-agbanwe agbanwe" nke ụyọkọ ọ bụla dị elu, nke gụnyere ndị ọbịa achọpụtara yana ọkwa ahụike.
  2. Onye na-enyocha ahụike na-eme nyocha ahụike na-arụsi ọrụ ike ma kọọrọ onye njikwa ụyọkọ mgbanwe ọnọdụ ahụike.
  3. CDS (ọrụ nchọpụta ụyọkọ) / SDS (ọrụ nchọpụta nzuzo) / EDS (ọrụ nchọpụta njedebe) / DNS ka a na-eme iji chọpụta ndị otu ụyọkọ. A na-eweghachite mgbanwe steeti ahụ n'aka onye njikwa ụyọkọ.
  4. Eriri onye ọrụ ọ bụla na-aga n'ihu na-eme loop mmemme.
  5. Mgbe onye njikwa ụyọkọ kpebiri na steeti maka ụyọkọ agbanweela, ọ na-emepụta foto ọhụrụ naanị ọgụgụ nke steeti ụyọkọ ahụ wee ziga ya na eri onye ọrụ ọ bụla.
  6. N'ime oge dị jụụ na-esote, eriri onye ọrụ ga-emelite foto n'ime oghere TLS ekenyere.
  7. N'oge ihe omume I / O kwesịrị ikpebi onye ọbịa ka ọ kwụọ nguzozi, onye na-edozi ibu ga-arịọ oghere TLS (Thread local storage) iji nweta ozi gbasara onye ọbịa. Nke a anaghị achọ mkpọchi. Rịba ama na TLS nwekwara ike ịkpalite ihe omume ka ndị na-ebu ibu na ihe ndị ọzọ nwee ike ịgbakọ cache, nhazi data, wdg. Nke a karịrị ike nke post a, mana ejiri ya n'ebe dị iche iche na koodu.

N'iji usoro a dị n'elu, Onye ozi nwere ike hazie arịrịọ ọ bụla na-enweghị mgbochi ọ bụla (belụsọ dị ka akọwara na mbụ). E wezụga mgbagwoju anya nke koodu TLS n'onwe ya, ọtụtụ n'ime koodu ahụ adịghị mkpa ịghọta ka multithreading si arụ ọrụ na enwere ike dee otu eriri. Nke a na-eme ka ọtụtụ koodu dị mfe ide na mgbakwunye na arụmọrụ dị elu.

Sistemụ ndị ọzọ na-eji TLS

A na-eji TLS (nchekwa mpaghara eriri) na RCU (Gụọ Nwelite Copy) n'ọtụtụ ebe na Envoy.

Ihe atụ nke iji:

  • Usoro maka ịgbanwe ọrụ n'oge egbu: A na-agbakọ ndepụta ọrụ enyere ugbu a na eri bụ isi. A na-enye eriri onye ọrụ ọ bụla onyonyo naanị ọgụgụ site na iji semantics RCU.
  • Dochie tebụl ụzọ: Maka tebụl ụzọ nke RDS (Route Discovery Service) nyere, a na-emepụta tebụl ụzọ na isi eri. A ga-emesị nye ndị ọrụ ọ bụla onyonyo onyonyo naanị site na iji semantics RCU (Gụọ Nwelite Copy). Nke a na-eme ka tebụl ụzọ na-agbanwe agbanwe nke ọma.
  • HTTP nkụnye eji isi mee: Dị ka ọ na-atụgharị, ịgbakọ nkụnye eji isi mee HTTP maka arịrịọ ọ bụla (mgbe ị na-agba ọsọ ~ 25K+ RPS kwa isi) dị oke ọnụ. Onye ozi etiti na-agbakọ nkụnye eji isi mee ihe dịka ọkara sekọnd ọ bụla wee nye ya onye ọrụ ọ bụla site na TLS na RCU.

Enwere ikpe ndị ọzọ, mana ihe atụ ndị gara aga kwesịrị inye ezigbo nghọta nke ihe eji TLS eme ihe.

Ọnyà arụmọrụ amaara

Ọ bụ ezie na onye ozi na-arụ ọrụ nke ọma n'ozuzu ya, enwere mpaghara ole na ole a ma ama na-achọ nlebara anya mgbe ejiri ya na nnukwu nkwekọrịta na mmepụta ihe:

  • Dịka akọwara n'isiokwu a, ugbu a eriri ndị ọrụ niile na-enweta mkpọchi mgbe ha na-ede na ebe nchekwa nchekwa ohere. N'ebe dị elu na ntinye dị elu, ị ga-achọ ịdekọ ndekọ ohere maka eriri onye ọrụ ọ bụla na-akwụ ụgwọ maka nnyefe na-enweghị usoro mgbe ị na-ede na faịlụ ikpeazụ. N'aka nke ọzọ, ị nwere ike ịmepụta ndekọ ohere dị iche maka eri onye ọrụ ọ bụla.
  • N'agbanyeghị na ọnụ ọgụgụ ndị a na-kachasị mma, na nnukwu concurrency na mmepụta a ga-enwe ike atomiki eset na onye ọ bụla ọnụ ọgụgụ. Ihe ngwọta maka nsogbu a bụ ụrọ nke onye ọrụ ọ bụla nwere nrụgharị nke etiti counters kwa oge. A ga-atụle nke a na post na-esote.
  • Ihe owuwu dị ugbu a agaghị arụ ọrụ nke ọma ma ọ bụrụ na etinyere onye nnọchi anya n'ọnọdụ ebe enwere njikọ ole na ole chọrọ akụrụngwa nhazi dị mkpa. Enweghị nkwa na a ga-ekesa njikọ nke ọma n'etiti eriri ndị ọrụ. Enwere ike idozi nke a site na itinye nguzozi njikọ nke ndị ọrụ, nke ga-enye ohere mgbanwe njikọ n'etiti eriri ndị ọrụ.

Mmechi

Emebere ụdị threadi nke onye ozi iji nye mfe mmemme na nnukwu myirịta na-efunahụ ebe nchekwa na njikọ nwere ike ịla n'iyi ma ọ bụrụ na ahazighị ya nke ọma. Ihe nlereanya a na-enye ya ohere ịrụ ọrụ nke ọma na ọnụ ọgụgụ eri dị elu na ntinye.
Dị ka m kwuru na nkenke na Twitter, imewe ahụ nwekwara ike ịgba ọsọ n'elu nchịkọta netwọk nke onye ọrụ dị ka DPDK (Data Plane Development Kit), nke nwere ike ime ka sava ndị na-emekarị na-ejikwa ọtụtụ nde arịrịọ kwa nkeji na nhazi L7 zuru ezu. Ọ ga-adọrọ mmasị ịhụ ihe a ga-ewu n'ime afọ ole na ole sochirinụ.
Otu okwu ngwa ngwa ikpeazụ ikpeazụ: Ajụrụ m ọtụtụ oge ihe kpatara anyị ji họrọ C++ maka Onye ozi. Ihe kpatara ya bụ na ọ ka bụ naanị asụsụ ọkwa ụlọ ọrụ a na-ejikarị eme ihe ebe enwere ike wuo ihe owuwu a kọwara na post a. C ++ adịghị mma maka ọrụ niile ma ọ bụ ọbụna ọtụtụ ọrụ, mana maka ụfọdụ ojiji ọ ka bụ naanị ngwá ọrụ iji nweta ọrụ ahụ.

Njikọ na koodu

Njikọ faịlụ nwere interfaces na mmejuputa nkụnye eji isi mee tụlere na post a:

isi: www.habr.com

Tinye a comment