[Translation] Awoṣe asapo Aṣoju

Itumọ nkan naa: Awoṣe asomọ Aṣoju - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

Mo rii nkan yii ni iyanilenu pupọ, ati pe niwọn igba ti Aṣoju jẹ igbagbogbo lo bi apakan ti “istio” tabi nirọrun bi “oluṣakoso ingress” ti kubernetes, ọpọlọpọ eniyan ko ni ibaraenisepo taara kanna pẹlu rẹ bi, fun apẹẹrẹ, pẹlu aṣoju aṣoju. Nginx tabi awọn fifi sori ẹrọ Haproxy. Sibẹsibẹ, ti nkan ba ṣẹ, yoo dara lati ni oye bi o ṣe n ṣiṣẹ lati inu. Mo gbìyànjú láti túmọ̀ ọ̀pọ̀lọpọ̀ ọ̀rọ̀ náà sí èdè Rọ́ṣíà bí ó bá ti lè ṣeé ṣe tó, títí kan àwọn ọ̀rọ̀ àkànṣe; fún àwọn tí wọ́n rí i pé ó máa ń dùn wọ́n láti wo èyí, mo fi àwọn ìpilẹ̀ṣẹ̀ náà sílẹ̀ sínú àkámọ́. Kaabo si ologbo.

Awọn iwe imọ-ẹrọ kekere-kekere fun koodu koodu Envoy jẹ fọnka lọwọlọwọ. Lati ṣe atunṣe eyi, Mo gbero lati ṣe lẹsẹsẹ awọn ifiweranṣẹ bulọọgi nipa ọpọlọpọ awọn ọna ṣiṣe ti Aṣoju. Níwọ̀n bí èyí ti jẹ́ àpilẹ̀kọ àkọ́kọ́, jọ̀wọ́ jẹ́ kí n mọ ohun tí o rò àti ohun tí o lè nífẹ̀ẹ́ sí nínú àwọn àpilẹ̀kọ ọjọ́ iwájú.

Ọkan ninu awọn ibeere imọ-ẹrọ ti o wọpọ julọ ti Mo gba nipa Aṣoju ni bibeere fun apejuwe ipele kekere ti awoṣe asapo ti o nlo. Ninu ifiweranṣẹ yii, Emi yoo ṣe apejuwe bii awọn maapu awọn maapu Envoy si awọn okun, bakanna bi Eto Ibi ipamọ Agbegbe Thread ti o nlo ni inu lati jẹ ki koodu ni afiwe ati iṣẹ giga.

Akopọ Threading

[Translation] Awoṣe asapo Aṣoju

Aṣoju nlo awọn oriṣiriṣi oriṣi mẹta ti awọn ṣiṣan:

  • Akọkọ: O tẹle ara yii n ṣakoso ilana ibẹrẹ ati ifopinsi, gbogbo sisẹ ti XDS (iṣẹ xDiscovery) API, pẹlu DNS, iṣayẹwo ilera, iṣupọ gbogbogbo ati iṣakoso akoko asiko, atunto awọn iṣiro, iṣakoso ati iṣakoso ilana gbogbogbo - awọn ifihan agbara Linux. atunbere gbona, ati bẹbẹ lọ. ṣẹlẹ ni yi o tẹle jẹ asynchronous ati "ti kii-ìdènà". Ni gbogbogbo, okun akọkọ ṣe ipoidojuko gbogbo awọn ilana iṣẹ ṣiṣe to ṣe pataki ti ko nilo iye nla ti Sipiyu lati ṣiṣẹ. Eyi ngbanilaaye koodu iṣakoso pupọ julọ lati kọ bi ẹnipe o tẹle ara ẹyọkan.
  • Osise: Nipa aiyipada, Aṣoju ṣẹda okun oṣiṣẹ fun okun ohun elo kọọkan ninu eto naa, eyi le ṣakoso ni lilo aṣayan naa --concurrency. Okun oṣiṣẹ kọọkan n ṣiṣẹ lupu iṣẹlẹ “ti kii ṣe idilọwọ”, eyiti o jẹ iduro fun gbigbọ olutẹtisi kọọkan; ni akoko kikọ (Oṣu Keje 29, 2017) ko si pinpin olutẹtisi, gbigba awọn isopọ tuntun, imudara akopọ àlẹmọ fun asopọ, ati ṣiṣe gbogbo awọn iṣẹ titẹ sii / o wu (IO) lakoko igbesi aye asopọ naa. Lẹẹkansi, eyi ngbanilaaye pupọ julọ koodu mimu asopọ lati kọ bi ẹnipe o tẹle ara ẹyọkan.
  • Fifọ faili: Fáìlì kọ̀ọ̀kan tí Aṣojú kọ, ní pàtàkì àwọn àkọọ́lẹ̀ iwọle, ní òwú ìdènà òmìnira kan. Eyi jẹ nitori otitọ pe kikọ si awọn faili ti a fipamọ nipasẹ eto faili paapaa nigba lilo O_NONBLOCK le ma dina (sigh). Nigbati awọn okun oṣiṣẹ nilo lati kọ si faili kan, a ti gbe data naa gangan si ifipamọ ni iranti nibiti o ti fọ nipasẹ okun. danu faili. Eyi jẹ agbegbe kan ti koodu nibiti imọ-ẹrọ gbogbo awọn okun oṣiṣẹ le di titiipa kanna lakoko igbiyanju lati kun ifipamọ iranti kan.

Imudani asopọ

Gẹgẹbi a ti jiroro ni ṣoki loke, gbogbo awọn okun oṣiṣẹ tẹtisi gbogbo awọn olutẹtisi laisi fifọ eyikeyi. Nitorinaa, ekuro ni a lo lati fi ore-ọfẹ firanṣẹ awọn iho ti o gba si awọn okun oṣiṣẹ. Awọn ekuro ode oni dara pupọ ni gbogbogbo, wọn lo awọn ẹya bii titẹ sii / o wu (IO) igbega ni ayo lati gbiyanju lati kun okùn kan pẹlu iṣẹ ṣaaju ki wọn to bẹrẹ lilo awọn okun miiran ti o tun n tẹtisi lori iho kanna, ati tun ko lo robin yika. titiipa (Spinlock) lati ṣe ilana ibeere kọọkan.
Ni kete ti o ba ti gba asopọ kan lori okun oṣiṣẹ, ko fi okun yẹn silẹ rara. Gbogbo sisẹ siwaju ti asopọ ni a mu ni kikun ni okun oṣiṣẹ, pẹlu eyikeyi ihuwasi firanšẹ siwaju.

Eyi ni ọpọlọpọ awọn abajade pataki:

  • Gbogbo awọn adagun asopọ asopọ ni Aṣoju ni a yàn si okun oṣiṣẹ. Nitorinaa, botilẹjẹpe awọn adagun-omi asopọ HTTP/2 nikan ṣe asopọ kan si agbalejo oke kọọkan ni akoko kan, ti awọn okun oṣiṣẹ mẹrin ba wa, awọn asopọ HTTP/2 mẹrin yoo wa fun agbalejo oke ni ipo iduro.
  • Idi ti Aṣoju n ṣiṣẹ ni ọna yii ni pe nipa titọju ohun gbogbo lori okun oṣiṣẹ kan, o fẹrẹ jẹ pe gbogbo koodu ni a le kọ laisi idinamọ ati bi ẹnipe o tẹle ara kan. Apẹrẹ yii jẹ ki o rọrun lati kọ koodu pupọ ati awọn iwọn ni iyalẹnu daradara si nọmba ailopin ti awọn okun oṣiṣẹ.
  • Sibẹsibẹ, ọkan ninu awọn ọna gbigbe akọkọ ni pe lati inu adagun iranti ati oju-ọna ṣiṣe asopọ, o ṣe pataki pupọ lati tunto --concurrency. Nini awọn okun oṣiṣẹ diẹ sii ju iwulo lọ yoo padanu iranti, ṣẹda awọn asopọ ti ko ṣiṣẹ diẹ sii, ati dinku oṣuwọn isọdọkan asopọ. Ni Lyft, awọn apoti ẹgbẹ ẹgbẹ aṣoju wa nṣiṣẹ pẹlu isọdọkan kekere pupọ ki iṣẹ ṣiṣe ni aijọju baamu awọn iṣẹ ti wọn joko lẹgbẹẹ. A nṣiṣẹ Envoy bi aṣoju eti nikan ni ilodisi ti o pọju.

Kini ti kii ṣe idinamọ tumọ si?

Ọrọ naa "ti kii ṣe idinamọ" ti lo ni ọpọlọpọ igba titi di igba ti o ba n jiroro bi akọkọ ati awọn okun oṣiṣẹ ṣe n ṣiṣẹ. Gbogbo koodu ti kọ lori arosinu pe ko si ohunkan ti o dina mọ. Sibẹsibẹ, eyi kii ṣe otitọ patapata (kini kii ṣe otitọ patapata?).

Aṣoju nlo ọpọlọpọ awọn titiipa ilana gigun:

  • Gẹgẹbi a ti jiroro, nigbati kikọ awọn iwe iwọle si, gbogbo awọn okun oṣiṣẹ gba titiipa kanna ṣaaju ki ifipamọ iranti iranti ti kun. Akoko idaduro titiipa yẹ ki o jẹ kekere pupọ, ṣugbọn o ṣee ṣe fun titiipa naa ni idije ni ilodisi giga ati iwọn-giga.
  • Aṣoju nlo eto eka pupọ lati mu awọn iṣiro ti o wa ni agbegbe si okun. Eyi yoo jẹ koko-ọrọ ti ifiweranṣẹ lọtọ. Bibẹẹkọ, Emi yoo mẹnuba ni ṣoki pe gẹgẹbi apakan ti awọn iṣiro o tẹle ara sisẹ ni agbegbe, o jẹ pataki nigbakan lati gba titiipa kan lori “itaja awọn iṣiro” aringbungbun kan. Titiipa yii ko yẹ ki o nilo.
  • Okun akọkọ lorekore nilo lati ṣatunṣe pẹlu gbogbo awọn okun oṣiṣẹ. Eyi ni a ṣe nipasẹ “titẹjade” lati okun akọkọ si awọn okun oṣiṣẹ, ati nigbakan lati awọn okun oṣiṣẹ pada si okun akọkọ. Fifiranṣẹ nilo titiipa ki ifiranṣẹ ti a tẹjade le wa ni ila fun ifijiṣẹ nigbamii. Awọn titiipa wọnyi ko yẹ ki o ṣe idije ni pataki, ṣugbọn wọn tun le dina ni imọ-ẹrọ.
  • Nigbati Aṣoju ba kọ akọọlẹ kan si ṣiṣan aṣiṣe eto (aṣiṣe boṣewa), o gba titiipa lori gbogbo ilana naa. Ni gbogbogbo, gedu agbegbe ti Envoy ni a ka si ẹru lati oju-ọna iṣẹ, nitorinaa ko ti ni akiyesi pupọ ti a fun lati ni ilọsiwaju.
  • Awọn titiipa laileto diẹ miiran wa, ṣugbọn ko si ọkan ninu wọn ti o ṣe pataki iṣẹ ṣiṣe ati pe ko yẹ ki o koju.

Itaja ibi ipamọ agbegbe

Nitori ọna ti Aṣoju ṣe ya awọn ojuse ti okun akọkọ kuro ninu awọn ojuse ti okùn oṣiṣẹ, ibeere kan wa pe iṣelọpọ eka le ṣee ṣe lori okùn akọkọ ati lẹhinna pese si okun oṣiṣẹ kọọkan ni ọna ti o ga julọ. Abala yii ṣe apejuwe Ibi ipamọ Agbegbe Ti Aṣoju Aṣoju (TLS) ni ipele giga kan. Ni apakan ti o tẹle Emi yoo ṣe apejuwe bi o ṣe nlo lati ṣakoso iṣupọ kan.
[Translation] Awoṣe asapo Aṣoju

Gẹgẹbi a ti ṣalaye tẹlẹ, okun akọkọ n ṣe itọju gbogbo iṣakoso ati iṣẹ ṣiṣe iṣakoso ọkọ ofurufu ni ilana Aṣoju. Ọkọ ofurufu iṣakoso jẹ diẹ ti o pọju nibi, ṣugbọn nigbati o ba wo o laarin ilana Aṣoju funrararẹ ki o ṣe afiwe si ifiranšẹ siwaju ti awọn okun oṣiṣẹ ṣe, o jẹ oye. Ofin gbogbogbo ni pe ilana okun akọkọ ṣe diẹ ninu iṣẹ, lẹhinna o nilo lati ṣe imudojuiwọn okun oṣiṣẹ kọọkan ni ibamu si abajade iṣẹ yẹn. ninu ọran yii, okun oṣiṣẹ ko nilo lati gba titiipa lori iwọle kọọkan.

Eto TLS ti Aṣoju (Okun ibi ipamọ agbegbe) ṣiṣẹ bi atẹle:

  • Koodu nṣiṣẹ lori okun akọkọ le pin iho TLS fun gbogbo ilana. Botilẹjẹpe eyi jẹ ifasilẹ, ni iṣe o jẹ atọka sinu fekito kan, ti n pese iwọle O (1).
  • Okun akọkọ le fi data lainidii sinu iho rẹ. Nigbati eyi ba ti ṣe, a gbejade data naa si okun oṣiṣẹ kọọkan bi iṣẹlẹ iṣẹlẹ loop deede.
  • Awọn okun oṣiṣẹ le ka lati iho TLS wọn ati gba eyikeyi data-agbegbe data ti o wa nibẹ.

Botilẹjẹpe o rọrun pupọ ati apẹrẹ ti o lagbara iyalẹnu, o jọra pupọ si imọran ti idinamọ RCU (Ka-Daakọ-Imudojuiwọn). Ni pataki, awọn okun oṣiṣẹ ko rii awọn ayipada data eyikeyi ninu awọn iho TLS lakoko ti iṣẹ n ṣiṣẹ. Iyipada waye nikan ni akoko isinmi laarin awọn iṣẹlẹ iṣẹ.

Aṣoju nlo eyi ni awọn ọna oriṣiriṣi meji:

  • Nipa titoju awọn oriṣiriṣi data lori okun oṣiṣẹ kọọkan, data le wọle laisi idilọwọ eyikeyi.
  • Nipa titọju itọka pinpin si data agbaye ni ipo kika-nikan lori okun oṣiṣẹ kọọkan. Nitorinaa, okun oṣiṣẹ kọọkan ni kika itọkasi data ti ko le dinku lakoko ti iṣẹ n ṣiṣẹ. Nikan nigbati gbogbo awọn oṣiṣẹ ba balẹ ati gbejade data pinpin tuntun yoo pa data atijọ run. Eyi jẹ aami kanna si RCU.

Titẹ imudojuiwọn iṣupọ

Ni apakan yii, Emi yoo ṣe apejuwe bi a ṣe lo TLS ( Ibi ipamọ agbegbe ti o tẹle ) lati ṣakoso iṣupọ kan. Ṣiṣakoso iṣupọ pẹlu xDS API ati/tabi sisẹ DNS, bakanna bi iṣayẹwo ilera.
[Translation] Awoṣe asapo Aṣoju

Ṣiṣakoso ṣiṣan iṣupọ pẹlu awọn paati ati awọn igbesẹ wọnyi:

  1. Oluṣakoso iṣupọ jẹ paati laarin Aṣoju ti o ṣakoso gbogbo awọn iṣupọ ti a mọ si oke, Iṣẹ Awari Cluster (CDS) API, Iṣẹ Awari Aṣiri (SDS) ati Iṣẹ Awari Ipari (EDS) APIs, DNS, ati awọn sọwedowo ita ti nṣiṣe lọwọ. Ṣiṣayẹwo ilera. O jẹ iduro fun ṣiṣẹda iwo “iduroṣinṣin nikẹhin” ti iṣupọ oke kọọkan, eyiti o pẹlu awọn ogun ti a ṣe awari bii ipo ilera.
  2. Oluyẹwo ilera n ṣe ayẹwo ilera ti nṣiṣe lọwọ ati jabo awọn iyipada ipo ilera si oluṣakoso iṣupọ.
  3. CDS (Cluster Discovery Service) / SDS (Iṣẹ Awari Aṣiri) / EDS (Iṣẹ Awari Ipari) / DNS ni a ṣe lati pinnu awọn ọmọ ẹgbẹ iṣupọ. Iyipada ipinle ti pada si oluṣakoso iṣupọ.
  4. Okun oṣiṣẹ kọọkan n ṣiṣẹ lupu iṣẹlẹ nigbagbogbo.
  5. Nigbati oluṣakoso iṣupọ pinnu pe ipinlẹ fun iṣupọ kan ti yipada, yoo ṣẹda aworan kika-nikan tuntun ti ipinlẹ iṣupọ ati firanṣẹ si okun oṣiṣẹ kọọkan.
  6. Lakoko akoko idakẹjẹ atẹle, okun oṣiṣẹ yoo ṣe imudojuiwọn fọtoyiya ni iho TLS ti a sọtọ.
  7. Lakoko iṣẹlẹ I / O kan ti o yẹ lati pinnu agbalejo lati gbe iwọntunwọnsi, iwọntunwọnsi fifuye yoo beere aaye TLS kan (ibi ipamọ agbegbe okun) lati gba alaye nipa agbalejo naa. Eyi ko nilo awọn titiipa. Ṣe akiyesi tun pe TLS tun le fa awọn iṣẹlẹ imudojuiwọn ki awọn iwọntunwọnsi fifuye ati awọn paati miiran le ṣe atunto awọn caches, awọn ẹya data, ati bẹbẹ lọ. Eyi kọja opin ti ifiweranṣẹ yii, ṣugbọn o lo ni awọn aaye pupọ ninu koodu naa.

Lilo ilana ti o wa loke, Aṣoju le ṣe ilana gbogbo ibeere laisi idilọwọ eyikeyi (ayafi bi a ti ṣalaye tẹlẹ). Yato si idiju ti koodu TLS funrararẹ, pupọ julọ koodu naa ko nilo lati ni oye bii multithreading ṣe n ṣiṣẹ ati pe o le kọ ni ila-ẹyọkan. Eyi jẹ ki ọpọlọpọ koodu rọrun lati kọ ni afikun si iṣẹ ṣiṣe ti o ga julọ.

Awọn ọna ṣiṣe abẹlẹ miiran ti o lo TLS

TLS ( Ibi ipamọ agbegbe okun) ati RCU (Ka Imudojuiwọn Daakọ) jẹ lilo pupọ ni Aṣoju.

Awọn apẹẹrẹ ti lilo:

  • Ilana fun iyipada iṣẹ-ṣiṣe lakoko ipaniyan: Atokọ lọwọlọwọ ti iṣẹ ṣiṣe jẹ iṣiro ni okun akọkọ. Okun oṣiṣẹ kọọkan ni a fun ni aworan kika-nikan ni lilo awọn atunmọ RCU.
  • Rirọpo awọn tabili ipa ọna: Fun awọn tabili ipa ọna ti a pese nipasẹ RDS (Iṣẹ Awari Ipa ọna), awọn tabili ipa ọna ti ṣẹda lori okun akọkọ. Aworan aworan kika-nikan yoo jẹ atẹle naa si okun oṣiṣẹ kọọkan nipa lilo awọn itumọ RCU (Ka Imudojuiwọn Daakọ). Eyi jẹ ki iyipada awọn tabili ipa ọna atomically daradara.
  • HTTP akọsori caching: Bi o ti wa ni jade, iṣiro akọsori HTTP fun ibeere kọọkan (lakoko ti o nṣiṣẹ ~ 25K+ RPS fun mojuto) jẹ gbowolori pupọ. Aṣoju ni aarin ṣe iṣiro akọsori ni isunmọ gbogbo idaji iṣẹju-aaya ati pese fun oṣiṣẹ kọọkan nipasẹ TLS ati RCU.

Awọn ọran miiran wa, ṣugbọn awọn apẹẹrẹ ti tẹlẹ yẹ ki o pese oye ti o dara ti kini TLS ti lo fun.

Awọn pitfalls iṣẹ ti a mọ

Lakoko ti Aṣoju ṣe daradara ni gbogbogbo, awọn agbegbe akiyesi diẹ wa ti o nilo akiyesi nigbati o ba lo pẹlu ibaramu giga pupọ ati iṣelọpọ:

  • Gẹgẹbi a ti ṣalaye ninu nkan yii, lọwọlọwọ gbogbo awọn okun oṣiṣẹ gba titiipa kan nigba kikọ si ifipamọ iranti log wiwọle. Ni ilodisi giga ati gbigbejade giga, iwọ yoo nilo lati ṣajọpọ awọn iwe iwọle fun okun oṣiṣẹ kọọkan ni laibikita fun ifijiṣẹ aṣẹ-aṣẹ nigba kikọ si faili ikẹhin. Ni omiiran, o le ṣẹda iwe iwọle lọtọ fun okun oṣiṣẹ kọọkan.
  • Botilẹjẹpe awọn iṣiro ti wa ni iṣapeye gaan, ni ilodiwọn giga pupọ ati iṣelọpọ yoo ṣee ṣe ariyanjiyan atomiki lori awọn iṣiro kọọkan. Ojutu si iṣoro yii jẹ awọn iṣiro fun okun oṣiṣẹ pẹlu atunto igbakọọkan ti awọn iṣiro aarin. Eyi ni yoo jiroro ni ifiweranṣẹ atẹle.
  • Awọn faaji ti isiyi kii yoo ṣiṣẹ daradara ti o ba ti fi Aṣoju ranṣẹ ni oju iṣẹlẹ nibiti awọn asopọ pupọ wa ti o nilo awọn orisun sisẹ pataki. Ko si iṣeduro pe awọn asopọ yoo pin boṣeyẹ laarin awọn okun oṣiṣẹ. Eyi le ṣe ipinnu nipasẹ imuse iwọntunwọnsi asopọ asopọ oṣiṣẹ, eyiti yoo gba laaye paṣipaarọ awọn asopọ laarin awọn okun oṣiṣẹ.

Ipari

Awoṣe asomọ ti Aṣoju jẹ apẹrẹ lati pese irọrun ti siseto ati afiwera nla ni laibikita fun iranti egbin ati awọn asopọ ti ko ba tunto ni deede. Awoṣe yii ngbanilaaye lati ṣe daradara pupọ ni awọn iṣiro okun ti o ga pupọ ati iṣelọpọ.
Gẹgẹbi Mo ti mẹnuba ni ṣoki lori Twitter, apẹrẹ naa tun le ṣiṣẹ lori oke akopọ ipo nẹtiwọọki olumulo ni kikun gẹgẹbi DPDK (Apo Idagbasoke Oju-ofurufu data), eyiti o le ja si ni awọn olupin apejọ ti n ṣakoso awọn miliọnu awọn ibeere fun iṣẹju keji pẹlu sisẹ L7 ni kikun. Yoo jẹ ohun ti o dun pupọ lati rii ohun ti a kọ ni awọn ọdun diẹ ti n bọ.
Ọkan kẹhin awọn ọna ọrọìwòye: Mo ti a ti beere ọpọlọpọ igba idi ti a yan C ++ fun Envoy. Idi naa wa pe o tun jẹ ede ipele ile-iṣẹ ti o gbajumo nikan ni eyiti a le kọ faaji ti a ṣalaye ninu ifiweranṣẹ yii. C ++ dajudaju ko dara fun gbogbo tabi paapaa ọpọlọpọ awọn iṣẹ akanṣe, ṣugbọn fun awọn ọran lilo kan o tun jẹ ohun elo nikan lati gba iṣẹ naa.

Awọn ọna asopọ si koodu

Awọn ọna asopọ si awọn faili pẹlu awọn atọkun ati awọn imuse akọsori ti a jiroro ni ifiweranṣẹ yii:

orisun: www.habr.com

Fi ọrọìwòye kun