[Fassarar] Samfurin zaren manzo

Fassarar labarin: Samfurin zaren turawa - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

Na sami wannan labarin yana da ban sha'awa sosai, kuma tun da yake an fi amfani da Manzo a matsayin wani ɓangare na "istio" ko kuma kawai a matsayin "mai kula da kubernetes", yawancin mutane ba su da irin wannan hulɗar kai tsaye tare da shi, alal misali, tare da al'ada. Nginx ko Haproxy shigarwa. Duk da haka, idan wani abu ya karye, zai yi kyau a fahimci yadda yake aiki daga ciki. Na yi ƙoƙarin fassara yawancin rubutun zuwa Rashanci gwargwadon iyawa, gami da kalmomi na musamman; ga waɗanda suka ga yana da zafi don kallon wannan, na bar ainihin asali a cikin baka. Barka da zuwa cat.

Takaddun fasaha mara ƙanƙanta don lambar lambar jaka a halin yanzu ba ta da yawa. Don gyara wannan, na yi shirin yin jerin rubuce-rubucen shafi game da tsarin tsarin Manzo daban-daban. Tun da wannan shi ne talifi na farko, don Allah ka sanar da ni ra’ayinka da abin da za ka so a talifi na gaba.

Daya daga cikin mafi yawan tambayoyin fasaha da nake samu game da Manzo shine neman ƙaramin bayanin ƙirar zaren da yake amfani da shi. A cikin wannan sakon, zan bayyana yadda Manzo ke yin taswirorin haɗin yanar gizo, da kuma tsarin Ma'ajiya na Gida na Thread da yake amfani da shi a ciki don sanya lambar ta zama daidai da aiki mai girma.

Bayanin zaren

[Fassarar] Samfurin zaren manzo

Manzo yana amfani da rafuka iri-iri uku:

  • Babban: Wannan zaren yana sarrafa farawa da ƙarewa, duk sarrafa XDS (xDiscovery Service) API, gami da DNS, duba lafiya, babban tari da sarrafa lokacin aiki, sake saitin ƙididdiga, gudanarwa da sarrafa tsarin gabaɗaya - siginar Linux. zafi sake farawa, da sauransu. faruwa a cikin wannan zaren ba asynchronous kuma "ba blocking". Gabaɗaya, babban zaren yana daidaita duk mahimman ayyukan ayyuka waɗanda basa buƙatar babban adadin CPU don gudana. Wannan yana ba da damar rubuta mafi yawan lambar sarrafawa kamar dai zaren zare ɗaya ne.
  • Ma'aikaci: Ta hanyar tsoho, Manzo yana ƙirƙirar zaren ma'aikaci don kowane zaren kayan aiki a cikin tsarin, ana iya sarrafa wannan ta amfani da zaɓi --concurrency. Kowane zaren ma'aikaci yana gudanar da madauki na taron "ba tare da toshewa ba", wanda ke da alhakin sauraron kowane mai sauraro; a lokacin rubutawa (Yuli 29, 2017) babu sharewar mai sauraro, karɓar sabbin hanyoyin haɗi, ta atomatik tari don tacewa. haɗin kai, da sarrafa duk ayyukan shigarwa / fitarwa (IO) yayin rayuwar haɗin. Har ila yau, wannan yana ba da damar rubuta mafi yawan lambar sarrafa haɗin gwiwa kamar dai zaren zare ɗaya ne.
  • Mai sarrafa fayil: Kowane fayil ɗin da Manzo ya rubuta, galibin shiga rajistan ayyukan, a halin yanzu yana da zaren toshewa mai zaman kansa. Wannan ya faru ne saboda gaskiyar cewa rubutawa zuwa fayilolin da tsarin fayil ɗin ke ɓoye ko da lokacin amfani O_NONBLOCK wani lokacin ana iya toshewa (numfashi). Lokacin da zaren ma'aikaci yana buƙatar rubutawa zuwa fayil, ainihin bayanan ana matsar da su zuwa ma'auni a ƙwaƙwalwar ajiya inda a ƙarshe za a zubar da shi ta hanyar zaren. fayil ɗin ruwa. Wannan yanki ɗaya ne na lambar inda a zahiri duk zaren ma'aikaci zai iya toshe makulli ɗaya yayin ƙoƙarin cike ma'ajiyar ƙwaƙwalwa.

Gudanar da haɗin kai

Kamar yadda aka tattauna a taƙaice a sama, duk zaren ma'aikaci yana sauraron duk masu sauraro ba tare da wani ɓarna ba. Don haka, ana amfani da kwaya don aika kwasfan da aka karɓa da kyau zuwa zaren ma'aikaci. Kwayoyin zamani gabaɗaya suna da kyau sosai akan wannan, suna amfani da sifofi kamar shigarwa/fitarwa (IO) fifikon haɓakawa don ƙoƙarin cika zaren da aiki kafin su fara amfani da sauran zaren waɗanda suma suke saurare akan soket ɗaya, sannan kuma ba sa amfani da zagaye. kulle (Spinlock) don aiwatar da kowace buƙata.
Da zarar an karɓi haɗin kan zaren ma'aikaci, ba zai taɓa barin wannan zaren ba. Duk ƙarin sarrafa haɗin haɗin ana sarrafa shi gaba ɗaya a cikin zaren ma'aikaci, gami da kowane hali na turawa.

Wannan yana da sakamako masu mahimmanci da yawa:

  • Duk wuraren waha na haɗi a cikin Manzo an sanya su zuwa zaren ma'aikaci. Don haka, kodayake wuraren shakatawa na HTTP/2 suna yin haɗi ɗaya kawai ga kowane mai watsa shiri na sama a lokaci guda, idan akwai zaren ma'aikata guda huɗu, za a sami haɗin HTTP/2 guda huɗu a kowane mai masaukin baki a cikin tsayayyen yanayi.
  • Dalilin da ya sa Wakilin ya yi aiki haka shi ne, ta hanyar ajiye komai a kan zaren ma'aikaci ɗaya, kusan dukkanin lambobin za a iya rubuta su ba tare da toshewa ba kuma kamar dai zaren guda ɗaya ne. Wannan ƙira yana sauƙaƙa rubuta lamba da yawa da ma'auni mai matuƙar ban sha'awa da kyau zuwa kusan adadin zaren ma'aikaci mara iyaka.
  • Koyaya, ɗayan manyan hanyoyin da ake ɗauka shine cewa daga wurin ajiyar ƙwaƙwalwar ajiya da ingantaccen yanayin haɗin kai, a zahiri yana da matukar mahimmanci don saita saitunan. --concurrency. Samun ƙarin zaren ma'aikata fiye da larura zai ɓata ƙwaƙwalwar ajiya, haifar da ƙarin haɗin kai marasa aiki, da rage ƙimar haɗa haɗin haɗin. A Lyft, kwantenan motar jakadan mu yana gudana tare da ƙarancin ƙima ta yadda aikin ya yi daidai da ayyukan da suke zaune kusa da su. Muna gudanar da Manzo a matsayin wakili na gefe kawai a iyakar daidaituwa.

Menene rashin toshewa ke nufi?

An yi amfani da kalmar "ba tare da toshewa" sau da yawa ya zuwa yanzu yayin da ake tattaunawa kan yadda manyan zaren ma'aikata ke aiki. An rubuta duk lambar akan zaton cewa babu wani abu da aka taɓa katange. Koyaya, wannan ba gaskiya bane gabaɗaya (menene ba gaskiya bane?).

Manzo yana amfani da makullai masu tsayi da yawa:

  • Kamar yadda aka tattauna, lokacin rubuta rajistan shiga, duk zaren ma'aikata suna samun makulli iri ɗaya kafin a cika buffer na ƙwaƙwalwar ajiya. Lokacin kulle kulle ya kamata ya zama ƙasa kaɗan, amma yana yiwuwa a yi fafatawa da kulle-kulle a babban haɗin gwiwa da babban kayan aiki.
  • Manzo yana amfani da tsari mai sarƙaƙƙiya don sarrafa kididdigar da ta dace da zaren. Wannan zai zama batun wani rubutu na daban. Duk da haka, a taƙaice zan ambaci cewa a matsayin wani ɓangare na sarrafa kididdigar zaren a cikin gida, wani lokaci yakan zama dole a sami makulli a tsakiyar "kantin sayar da ƙididdiga". Bai kamata a taɓa buƙatar wannan kullewa ba.
  • Babban zaren lokaci-lokaci yana buƙatar daidaitawa tare da duk zaren ma'aikaci. Ana yin haka ta hanyar "buga" daga babban zaren zuwa zaren ma'aikata, wani lokaci kuma daga zaren ma'aikaci ya koma babban zaren. Aika yana buƙatar kulle don saƙon da aka buga za a iya yin layi don isarwa daga baya. Waɗannan makullai bai kamata a taɓa yin hamayya da su ba, amma har yanzu ana iya toshe su a zahiri.
  • Lokacin da Manzo ya rubuta log ɗin zuwa rafin kuskuren tsarin (kuskuren daidaitaccen tsari), yana samun kulle akan gabaɗayan tsari. Gabaɗaya, aikin gandun daji na Manzo ana ɗaukarsa a matsayin mummunan aiki, don haka ba a ba da kulawa sosai don inganta shi ba.
  • Akwai ƴan wasu makullai na bazuwar, amma babu ɗayansu da yake aiki mai mahimmanci kuma bai kamata a taɓa yin ƙalubale ba.

Zaren ajiya na gida

Saboda yadda Manzo ke raba nauyin babban zaren da ya rataya a wuyan ma’aikaci, akwai bukatu da cewa za a iya yin hadadden tsari a kan babban zaren sannan a samar wa kowane ma’aikaci zaren yadda ya kamata a lokaci guda. Wannan sashe yana bayyana Ma'ajiyar Gida ta Wakilci (TLS) a babban matakin. A cikin sashe na gaba zan bayyana yadda ake amfani da shi don sarrafa gungu.
[Fassarar] Samfurin zaren manzo

Kamar yadda aka riga aka bayyana, babban zaren yana ɗaukar kusan duk aikin gudanarwa da sarrafa aikin jirgin sama a cikin tsarin Manzo. Jirgin sarrafawa yana da ɗan kima a nan, amma idan ka duba shi a cikin tsarin aikin da kansa kuma ka kwatanta shi da turawa wanda zaren ma'aikaci ke yi, yana da ma'ana. Babban ka'ida shine babban tsarin zaren yana yin wasu ayyuka, sannan yana buƙatar sabunta kowane zaren ma'aikaci gwargwadon sakamakon wannan aikin. a wannan yanayin, zaren ma'aikaci baya buƙatar samun makulli akan kowane damar shiga.

Tsarin TLS (Thread local storage) yana aiki kamar haka:

  • Lambar da ke gudana akan babban zaren na iya keɓance ramin TLS don ɗaukacin tsari. Ko da yake wannan an abstracted, a aikace shi ne fihirisa a cikin vector, samar da O(1) damar.
  • Babban zaren na iya shigar da bayanan sabani a cikin ramin sa. Lokacin da aka yi haka, ana buga bayanan ga kowane zaren ma'aikaci a matsayin al'amuran madauki na al'ada.
  • Zaren ma'aikata na iya karantawa daga ramin su na TLS kuma su dawo da duk bayanan-zaren da ake samu a wurin.

Kodayake tsari ne mai sauƙi kuma mai ban mamaki, yana kama da manufar RCU (Karanta-Kwafi-Update) tarewa. Mahimmanci, zaren ma'aikaci ba sa ganin kowane canje-canjen bayanai a cikin ramukan TLS yayin aiki yana gudana. Canji yana faruwa ne kawai a lokacin hutu tsakanin abubuwan aiki.

Manzo yana amfani da wannan ta hanyoyi guda biyu:

  • Ta hanyar adana bayanai daban-daban akan kowane zaren ma'aikaci, ana iya samun damar bayanan ba tare da toshewa ba.
  • Ta hanyar riƙe mai nuni ga bayanan duniya cikin yanayin karantawa kawai akan kowane zaren ma'aikaci. Don haka, kowane zaren ma'aikaci yana da ƙididdige ƙididdiga na bayanai waɗanda ba za a iya rage su ba yayin da aikin ke gudana. Sai kawai lokacin da duk ma'aikata suka huce kuma suka loda sabon bayanan da aka raba za a lalata tsoffin bayanan. Wannan yayi daidai da RCU.

Zaren sabunta tari

A cikin wannan sashe, zan bayyana yadda ake amfani da TLS (Thread local storage) don sarrafa gungu. Gudanar da tari ya haɗa da xDS API da/ko sarrafa DNS, da kuma duba lafiya.
[Fassarar] Samfurin zaren manzo

Gudanar da kwararar tari ya ƙunshi abubuwa masu zuwa da matakai:

  1. Manajan Cluster wani bangare ne a cikin Manzo wanda ke kula da duk sanannen gungu na sama, Sabis ɗin Ganowa Cluster (CDS) API, Sabis na Gano Sirrin (SDS) da Sabis na Gano Ƙarshen (EDS) APIs, DNS, da duban lafiyar waje mai aiki. Ita ce ke da alhakin ƙirƙirar "daidaitaccen ra'ayi" na kowane gungu na sama, wanda ya haɗa da runduna da aka gano da kuma matsayin lafiya.
  2. Mai duba lafiyar yana yin aikin duba lafiya kuma yana ba da rahoton canje-canjen halin lafiya ga manajan tari.
  3. Ana yin CDS (Sabis ɗin Ganowa ta gungu) / SDS (Sabis ɗin Gano Sirri) / EDS (Sabis ɗin Gano Ƙarshen) / DNS ana yin su don tantance membobin tari. Ana mayar da canjin jiha zuwa ga manajan tari.
  4. Kowane zaren ma'aikaci yana ci gaba da aiwatar da madauki na taron.
  5. Lokacin da cluster manajan ya ƙayyade cewa jihar don gungu ta canza, ta ƙirƙiri sabon hoto mai karantawa kawai na jihar cluster kuma a aika zuwa kowane zaren ma'aikaci.
  6. A cikin lokacin shiru na gaba, zaren ma'aikaci zai sabunta hoton hoto a cikin ramin TLS da aka keɓe.
  7. A lokacin wani taron I / O wanda ya kamata ya ƙayyade mai watsa shiri don ɗaukar ma'auni, ma'aunin nauyi zai buƙaci ramin TLS (Thread local storage) don samun bayanai game da mai watsa shiri. Wannan baya buƙatar makullai. Lura kuma cewa TLS kuma na iya haifar da abubuwan sabuntawa ta yadda masu daidaita ma'aunin nauyi da sauran abubuwan haɗin gwiwa zasu iya sake ƙididdige caches, tsarin bayanai, da sauransu. Wannan ya wuce iyakar wannan sakon, amma ana amfani dashi a wurare daban-daban a cikin lambar.

Yin amfani da hanyar da ke sama, Manzo na iya aiwatar da kowace buƙata ba tare da wani toshewa ba (sai dai kamar yadda aka bayyana a baya). Baya ga rikitarwa na lambar TLS kanta, yawancin lambar ba sa buƙatar fahimtar yadda multithreading ke aiki kuma ana iya rubuta su guda ɗaya. Wannan yana sa mafi yawan lambar ya sauƙaƙe rubutawa baya ga ingantaccen aiki.

Sauran tsarin tsarin da ke amfani da TLS

TLS (Ma'ajiyar gida mai zare) da RCU (Karanta Kwafi Sabunta) ana amfani da su sosai a cikin Manzo.

Misalan amfani:

  • Injiniyanci don canza ayyuka yayin aiwatarwa: Ana ƙididdige lissafin aikin da aka kunna na yanzu a cikin babban zaren. Ana ba kowane zaren ma'aikaci hoto ta hanyar karantawa kawai ta amfani da ma'anar RCU.
  • Maye gurbin teburin hanya: Don allunan hanyoyin da RDS (Sabis ɗin Gano Hanyar Hanya), an ƙirƙiri teburin hanyoyin akan babban zaren. Hoton karantawa kawai za a ba da shi ga kowane zaren ma'aikaci ta amfani da ma'anar RCU (Karanta Kwafi). Wannan yana sa canza tebur ɗin hanya ya zama ingantaccen tsari.
  • HTTP caching header: Kamar yadda ya fito, ƙididdige taken HTTP ga kowane buƙatu (yayin da ke gudana ~ 25K+ RPS a kowace mahimmanci) yana da tsada sosai. Manzo yana ƙididdige kan kai kusan kowane rabin daƙiƙa kuma yana ba kowane ma'aikaci ta hanyar TLS da RCU.

Akwai wasu lokuta, amma misalan da suka gabata ya kamata su ba da kyakkyawar fahimtar abin da ake amfani da TLS.

Sanann tarkon aiki

Duk da yake Manzo yana aiki sosai gabaɗaya, akwai ƴan sanannun wuraren da ke buƙatar kulawa lokacin da aka yi amfani da su tare da babban ma'amala da kayan aiki:

  • Kamar yadda aka bayyana a cikin wannan labarin, a halin yanzu duk zaren ma'aikata suna samun kulle yayin rubutawa zuwa buffer ƙwaƙwalwar ajiyar shiga. A babban ma'amala da kayan aiki mai yawa, kuna buƙatar tsara rajistan shiga ga kowane zaren ma'aikaci a cikin kuɗin isarwa ba tare da izini ba lokacin rubuta zuwa fayil ɗin ƙarshe. A madadin, za ka iya ƙirƙirar keɓancewar shiga log don kowane zaren ma'aikaci.
  • Ko da yake an inganta kididdigar sosai, a cikin madaidaicin ma'amala da kayan aiki da yawa za a iya samun takaddamar atomic akan kididdigar mutum ɗaya. Maganin wannan matsala shine kirga kowane zaren ma'aikaci tare da sake saitin na'urori na tsakiya lokaci-lokaci. Za a tattauna wannan a cikin rubutu na gaba.
  • Tsarin gine-ginen na yanzu ba zai yi aiki da kyau ba idan an tura Manzo a cikin yanayi inda akwai ƴan alaƙa kaɗan waɗanda ke buƙatar mahimman kayan sarrafawa. Babu tabbacin cewa za a rarraba haɗin kai daidai gwargwado tsakanin zaren ma'aikata. Ana iya warware wannan ta hanyar aiwatar da daidaita ma'amalar ma'aikata, wanda zai ba da damar musayar haɗin kai tsakanin zaren ma'aikaci.

Kammalawa

An ƙirƙira ƙirar zaren zaren manzon don samar da sauƙi na shirye-shirye da kuma daidaitattun daidaito a cikin ƙimar ƙwaƙwalwar ajiya mai yuwuwar ɓarna da haɗin kai idan ba a daidaita su daidai ba. Wannan samfurin yana ba shi damar yin aiki sosai a ƙididdige zaren ƙididdiga masu yawa da kayan aiki.
Kamar yadda na ambata a taƙaice akan Twitter, ƙirar kuma tana iya gudana a saman cikakken tari na hanyar sadarwar mai amfani kamar DPDK (Kitin Ci gaban Jirgin Sama), wanda zai iya haifar da sabobin na yau da kullun suna ɗaukar miliyoyin buƙatun daƙiƙa tare da cikakken sarrafa L7. Zai zama mai ban sha'awa sosai don ganin abin da ake ginawa a cikin 'yan shekaru masu zuwa.
Sharhi mai sauri na ƙarshe: An tambaye ni sau da yawa dalilin da yasa muka zaɓi C++ don Manzo. Dalilin ya rage cewa har yanzu shi ne kawai yaren masana'antu da ake amfani da shi sosai wanda za'a iya gina gine-ginen da aka bayyana a cikin wannan matsayi. C ++ ba shakka bai dace da duka ko ma ayyuka da yawa ba, amma ga wasu lokuta masu amfani har yanzu shine kawai kayan aiki don yin aikin.

Hanyoyin haɗi zuwa lamba

Hanyoyin haɗi zuwa fayiloli tare da musaya da aiwatar da kai da aka tattauna a cikin wannan post:

source: www.habr.com

Add a comment