[Dikanteny] Modely amin'ny kofehy iraka

Fandikana ny lahatsoratra: Modely fametahana iraka - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

Hitako fa tena mahaliana ity lahatsoratra ity, ary satria ny Envoy dia matetika ampiasaina ho ampahany amin'ny "istio" na tsotra fotsiny amin'ny maha-"manara-maso ny fidirana" amin'ny kubernetes, ny ankamaroan'ny olona dia tsy manana fifandraisana mivantana aminy toy ny, ohatra, amin'ny mahazatra. Fametrahana Nginx na Haproxy. Na izany aza, raha misy zavatra tapaka, dia tsara ny mahatakatra ny fomba fiasan'ny ao anatiny. Niezaka nandika araka izay azo atao ny lahatsoratra ho amin'ny teny rosiana aho, anisan'izany ireo teny manokana ho an'ireo izay maharary ny mijery an'io, navelako ao anaty fononteny ny voalohany. Tongasoa eto amin'ny saka.

Ny antontan-taratasy ara-teknika ambany indrindra ho an'ny codebase Envoy dia somary vitsy. Mba hanarenana izany dia mikasa ny hanao andiana lahatsoratra bilaogy momba ny subsystem isan-karazany an'ny Envoy aho. Satria ity no lahatsoratra voalohany, azafady mba ampahafantaro ahy ny hevitrao sy izay mety hahaliana anao amin'ny lahatsoratra ho avy.

Ny iray amin'ireo fanontaniana ara-teknika mahazatra indrindra azoko momba ny Envoy dia mangataka famaritana ambany momba ny modely kofehy ampiasainy. Ato amin'ity lahatsoratra ity, hamariparitra ny fomba sarintanin'ny Envoy ny fifandraisana amin'ny kofehy, ary koa ny rafitra Thread Local Storage ampiasainy ao anatiny mba hahatonga ny kaody mifanandrify sy mahomby kokoa.

Fijerena kofehy

[Dikanteny] Modely amin'ny kofehy iraka

Mampiasa karazana renirano telo samihafa ny Envoy:

  • Main: Ity kofehy ity dia mifehy ny fanombohana sy ny famaranana, ny fanodinana rehetra ny XDS (xDiscovery Service) API, ao anatin'izany ny DNS, ny fanaraha-maso ara-pahasalamana, ny cluster ankapobeny sy ny fitantanana ny fotoana, ny famerenana ny antontan'isa, ny fitantanana ary ny fitantanana ny fizotran'ny ankapobeny - ny fanombohana mafana Linux, sns Ny zava-mitranga amin'ity lohahevitra ity dia asynchronous ary "tsy manakana". Amin'ny ankapobeny, ny kofehy lehibe dia mandrindra ny fizotran'ny fiasa manakiana rehetra izay tsy mila CPU be dia be. Izany dia mamela ny ankamaroan'ny kaody fanaraha-maso ho voasoratra ho toy ny kofehy tokana.
  • mpiasa: Amin'ny alΓ lan'ny default, ny Envoy dia mamorona kofehy mpiasa ho an'ny kofehy hardware tsirairay ao amin'ny rafitra, azo fehezina amin'ny fampiasana ny safidy --concurrency. Ny kofehy mpiasa tsirairay dia mihazakazaka hetsika "tsy manakana", izay tompon'andraikitra amin'ny fihainoana ny mpihaino tsirairay amin'ny fotoana anoratana (29 jolay 2017) dia tsy misy ny fifampiraharahana amin'ny mpihaino, manaiky fifandraisana vaovao, mametraka stack sivana ho an'ny; ny fifandraisana, ary ny fanodinana ny fiasan'ny fampidirana/famoahana (IO) rehetra mandritra ny androm-piainan'ny fifandraisana. Averina indray, izany dia mamela ny ankamaroan'ny kaody fitantanana fifandraisana ho soratana toy ny kofehy tokana.
  • Fandefasana rakitra: Ny rakitra tsirairay izay soratan'ny Envoy, indrindra ny fidirana amin'ny diary, dia manana kofehy fanakanana tsy miankina amin'izao fotoana izao. Izany dia noho ny manoratra amin'ny rakitra voatahiry amin'ny rafitra fichier na dia mampiasa aza O_NONBLOCK mety ho voasakana (misento). Rehefa mila manoratra amin'ny rakitra iray ny kofehy mpiasa, dia afindra any amin'ny buffer ho fitadidiana ny angon-drakitra ary afindra amin'ny kofehy amin'ny farany. fichier flush. Ity dia faritra iray amin'ny kaody izay ahafahan'ny kofehy mpiasa rehetra manakana ny hidin-trano iray ihany rehefa manandrana mameno buffer fahatsiarovana.

Fikarakarana fifandraisana

Araka ny noresahina tetsy ambony, ny kofehy mpiasa rehetra dia mihaino ny mpihaino rehetra tsy misy sharding. Noho izany, ny kernel dia ampiasaina handefasana socket ekena amin'ny kofehy mpiasa. Ny kernel maoderina amin'ny ankapobeny dia tena tsara amin'izany, mampiasa endri-javatra toy ny fanamafisana ny laharam-pahamehana input / output (IO) izy ireo mba hanandrana hameno kofehy amin'ny asa alohan'ny hanombohan'izy ireo mampiasa kofehy hafa izay mihaino amin'ny socket iray ihany, ary tsy mampiasa round robin. fanidy (Spinlock) mba hikarakarana ny fangatahana tsirairay.
Raha vantany vao ekena ny fifandraisana amin'ny kofehy mpiasa dia tsy miala amin'io kofehy io mihitsy. Ny fanodinana fanampiny rehetra momba ny fifandraisana dia karakaraina tanteraka ao amin'ny kofehy mpiasa, ao anatin'izany ny fitondran-tena rehetra.

Misy vokany lehibe maromaro izany:

  • Ny dobo fifandraisana rehetra ao amin'ny Envoy dia voatendry ho an'ny kofehy mpiasa. Noho izany, na dia mampifandray iray monja amin'ny mpampiantrano ambony tsirairay aza ny dobo fifandraisana HTTP/2, raha misy kofehy mpiasa efatra, dia hisy fifandraisana HTTP/2 efatra isaky ny mpampiantrano ambony ao anatin'ny toe-javatra tsy miova.
  • Ny antony mahatonga ny Envoy miasa toy izany dia ny fitazonana ny zava-drehetra amin'ny kofehy mpiasa iray, saika ny code rehetra dia azo soratana tsy misy fanakanana ary toy ny kofehy tokana. Ity endrika ity dia manamora ny fanoratana kaody sy mizana be dia be amin'ny kofehy mpiasa saika tsy voafetra.
  • Na izany aza, ny iray amin'ireo takeaway lehibe dia ny hoe avy amin'ny dobo fitadidiana sy ny fomba fijerin'ny fahombiazan'ny fifandraisana, dia tena zava-dehibe tokoa ny manamboatra ny --concurrency. Ny fananana kofehy mpiasa bebe kokoa noho ny ilaina dia handany fitadidiana, hamorona fifandraisana tsy miasa bebe kokoa, ary hampihena ny tahan'ny fifandonana. Ato amin'ny Lyft, ny kaontenera mpanelanelana iraka ataontsika dia mandeha miaraka amin'ny concurrency ambany dia ambany mba hifanaraka amin'ny serivisy mipetraka eo akaikiny ny fampisehoana. Mandeha Envoy ho toy ny proxy sisiny fotsiny izahay amin'ny fifanandrinana ambony indrindra.

Inona no dikan'ny tsy fanakanana?

Ny teny hoe "tsy fanakanana" dia nampiasaina imbetsaka hatramin'izao rehefa miresaka momba ny fomba fiasan'ny kofehy lehibe sy mpiasa. Ny kaody rehetra dia voasoratra amin'ny fiheverana fa tsy misy zavatra voasakana. Na izany aza, tsy marina tanteraka izany (inona no tsy marina tanteraka?).

Ny iraka dia mampiasa hidin'ny dingana maromaro:

  • Araka ny efa noresahina, rehefa manoratra log de access, ny kofehy mpiasa rehetra dia mahazo hidy mitovy alohan'ny hamenoana ny buffer log in-memory. Tokony ho ambany dia ambany ny fotoana fihazonana hidin-trano, saingy azo atao ny miady amin'ny hidin-trano amin'ny fifanandrinana avo lenta sy ny fivoahana avo lenta.
  • Mampiasa rafitra sarotra be ny Envoy mba hikarakarana ny antontan'isa izay eo an-toerana amin'ny kofehy. Io no ho lohahevitry ny lahatsoratra mitokana. Na izany aza, holazaiko fohifohy fa ao anatin'ny fanodinana antontan'isa eo an-toerana dia ilaina indraindray ny maka hidin-trano amin'ny "fivarotana statistika" foibe. Tsy tokony hilaina mihitsy io fanidiana io.
  • Ny kofehy lehibe dia mila mandrindra tsindraindray amin'ny kofehy mpiasa rehetra. Izany dia atao amin'ny "famoahana" avy amin'ny kofehy lehibe mankany amin'ny kofehy mpiasa, ary indraindray avy amin'ny kofehy mpiasa miverina amin'ny kofehy lehibe. Mitaky hidin-trano ny fandefasana mba hahafahan'ny hafatra navoaka milahatra ho an'ny fandefasana any aoriana. Ireo hidin-trano ireo dia tsy tokony hiadiana mafy mihitsy, fa mbola azo sakanana ara-teknika.
  • Rehefa manoratra lozisialy amin'ny onjam-pahadisoan'ny rafitra (fahadisoana manara-penitra) ny Envoy, dia mahazo hidy amin'ny dingana iray manontolo. Amin'ny ankapobeny, heverina ho ratsy ny fandraisan'anjaran'ny Envoy eto an-toerana amin'ny lafiny fampisehoana, noho izany dia tsy nisy fiheverana loatra ny fanatsarana izany.
  • Misy hidy kisendrasendra vitsivitsy hafa, saingy tsy misy amin'izy ireo no manakiana ny fampisehoana ary tsy tokony hohanina mihitsy.

Taratasy fitahirizana eo an-toerana

Noho ny fomba fanasarahan'ny Envoy ny andraikitry ny kofehy lehibe amin'ny andraikitry ny kofehy mpiasa, dia misy ny fepetra fa azo atao ny fanodinana sarotra amin'ny kofehy lehibe ary avy eo omena ny kofehy mpiasa tsirairay amin'ny fomba tena mifanaraka. Ity fizarana ity dia mamaritra ny Envoy Thread Local Storage (TLS) amin'ny ambaratonga avo. Ao amin'ny fizarana manaraka dia hamariparitra ny fomba fampiasana azy io amin'ny fitantanana cluster.
[Dikanteny] Modely amin'ny kofehy iraka

Araka ny efa nofaritana, ny kofehy lehibe dia mitantana saika ny fitantanana sy fanaraha-maso ny fiasan'ny fiaramanidina amin'ny fizotran'ny Envoy. Somary be loatra ny fiaramanidina fanaraha-maso eto, fa rehefa mijery azy ao anatin'ny fizotran'ny Envoy ianao ary mampitaha azy amin'ny fandefasana izay ataon'ny kofehy mpiasa dia misy dikany izany. Ny fitsipika ankapobeny dia ny fizotry ny kofehy lehibe dia manao asa sasany, ary avy eo dia mila manavao ny kofehy mpiasa tsirairay araka ny vokatry ny asa. Amin'ity tranga ity, ny kofehy mpiasa dia tsy mila mahazo hidin-trano isaky ny fidirana.

Ny rafitra TLS (Thread local storage) an'ny Envoy dia miasa toy izao manaraka izao:

  • Ny kaody mandeha amin'ny kofehy lehibe dia afaka manome slot TLS ho an'ny dingana manontolo. Na dia nohazavaina aza izany, amin'ny fampiharana dia fanondroana ho vector, manome fidirana O(1).
  • Ny kofehy lehibe dia afaka mametraka angon-drakitra tsy misy dikany ao anaty slot. Rehefa vita izany, dia avoaka amin'ny kofehy mpiasa tsirairay ny angon-drakitra ho toy ny hetsika famoriana hetsika mahazatra.
  • Ny kofehy mpiasa dia afaka mamaky avy amin'ny slot TLS ary maka izay angon-drakitra eo an-toerana misy ao.

Na dia paradigma tena tsotra sy mahery vaika aza izy io, dia mitovy amin'ny foto-kevitry ny fanakanana RCU (Read-Copy-Update). Amin'ny ankapobeny, tsy mahita fiovana angon-drakitra ao amin'ny slot TLS ny kofehy mpiasa rehefa mandeha ny asa. Ny fiovana dia mitranga mandritra ny fotoam-pialan-tsasatra eo anelanelan'ny hetsika asa.

Mampiasa izany amin'ny fomba roa samihafa i Envoy:

  • Amin'ny fitehirizana angon-drakitra samihafa amin'ny kofehy mpiasa tsirairay, ny angon-drakitra dia azo idirana tsy misy fanakanana.
  • Amin'ny alΓ lan'ny fitazonana tondro ifampizarana amin'ny angona manerantany amin'ny fomba vakiana fotsiny amin'ny kofehy mpiasa tsirairay. Noho izany, ny kofehy mpiasa tsirairay dia manana isa reference data izay tsy azo ahena rehefa mandeha ny asa. Rehefa tony daholo ny mpiasa rehetra ka hampiditra angona nozaraina vaovao vao ho potika ny angona taloha. Izany dia mitovy amin'ny RCU.

Fampidirana ny kluster vaovao

Amin'ity fizarana ity dia hamariparitra ny fomba ampiasain'ny TLS (Thread local storage) hitantana cluster. Ny fitantanana kluster dia misy ny xDS API sy/na ny fanodinana DNS, ary koa ny fisavana ara-pahasalamana.
[Dikanteny] Modely amin'ny kofehy iraka

Ny fitantanana ny fikorianan'ny kluster dia ahitana ireto singa sy dingana manaraka ireto:

  1. Ny Cluster Manager dia singa iray ao anatin'ny Envoy izay mitantana ny cluster rehetra any ambony, ny Cluster Discovery Service (CDS) API, ny Secret Discovery Service (SDS) ary ny Endpoint Discovery Service (EDS) API, DNS, ary ny fisavana ara-pahasalamana ivelany. Izy io dia tompon'andraikitra amin'ny famoronana fomba fijery "mifanaraka amin'ny farany" isaky ny vondron'olona ambony, izay ahitana mpampiantrano hita ary koa ny toe-pahasalamana.
  2. Ny mpanara-maso ara-pahasalamana dia manao fisavana ara-pahasalamana mavitrika ary mitatitra ny fiovan'ny toe-pahasalamana amin'ny mpitantana cluster.
  3. CDS (Service Discovery Cluster) / SDS (Secret Discovery Service) / EDS (Endpoint Discovery Service) / DNS dia atao mba hamaritana ny maha-mpikambana cluster. Averina amin'ny mpitantana cluster ny fanovana fanjakana.
  4. Ny kofehy mpiasa tsirairay dia manatanteraka tsy an-kijanona hetsika iray.
  5. Rehefa manapa-kevitra ny mpitantana kluster fa niova ny fanjakana ho an'ny kluster iray, dia mamorona sary vakiana fotsiny momba ny toetry ny kluster ary mandefa izany any amin'ny kofehy mpiasa tsirairay.
  6. Mandritra ny vanim-potoana mangina manaraka, ny kofehy mpiasa dia hanavao ny sary ao amin'ny slot TLS nomena.
  7. Mandritra ny hetsika I/O izay heverina fa hamaritana ny mpampiantrano hampiditra ny fifandanjana, dia hangataka slot TLS (Thread local storage) ny mpandrindra entana mba hahazoana vaovao momba ny mpampiantrano. Tsy mila hidy izany. Mariho ihany koa fa ny TLS dia afaka manetsika hetsika fanavaozana ihany koa mba hahafahan'ny mpandrindra entana sy singa hafa mamerina ny cache, firafitry ny angona, sns. Mihoatra noho ity lahatsoratra ity izany, fa ampiasaina amin'ny toerana samihafa ao amin'ny code.

Amin'ny fampiasana ny fomba fiasa etsy ambony, ny Envoy dia afaka mikarakara ny fangatahana rehetra tsy misy fanakanana (afa-tsy izay voalaza teo aloha). Ankoatra ny fahasarotan'ny kaody TLS, ny ankamaroan'ny kaody dia tsy mila mahatakatra ny fomba fiasan'ny multithreading ary azo soratana amin'ny kofehy tokana. Izany dia manamora ny fanoratana ny ankamaroan'ny kaody ankoatra ny fampisehoana ambony.

Subsystems hafa mampiasa TLS

TLS (Thread local storage) sy RCU (Read Copy Update) dia ampiasaina betsaka amin'ny Envoy.

Ohatra amin'ny fampiasana:

  • Mekanisma hanovana ny fiasa mandritra ny fanatanterahana: Ny lisitry ny fampiasa azo ampiasaina ankehitriny dia kajy ao amin'ny loha-hevitra. Ny kofehy mpiasa tsirairay dia omena sary vakiana fotsiny amin'ny fampiasana semantika RCU.
  • Fanoloana tabilao zotra: Ho an'ny tabilao zotra nomen'ny RDS (Route Discovery Service), dia noforonina eo amin'ny kofehy lehibe ny tabilao zotra. Ny sary vakiana fotsiny dia homena ho an'ny kofehy mpiasa tsirairay avy amin'ny fampiasana semantika RCU (Read Copy Update). Izany dia mahatonga ny fiovan'ny tabilao zotra ho mahomby amin'ny fomba atomika.
  • Caching lohapejy HTTP: Raha ny fantatra dia lafo be ny kajy ny lohatenin'ny HTTP ho an'ny fangatahana tsirairay (raha mihazakazaka ~ 25K+ RPS isaky ny core). Ny Envoy dia manisa ny lohapejy eo amin'ny antsasaky ny segondra ary manome izany ho an'ny mpiasa tsirairay amin'ny alΓ lan'ny TLS sy RCU.

Misy tranga hafa, fa ny ohatra teo aloha dia tokony hanome fahatakarana tsara momba ny fampiasana TLS.

Fandrika fanta-daza

Na dia miasa tsara amin'ny ankapobeny aza ny Envoy, dia misy faritra vitsivitsy misongadina izay mila fitandremana rehefa ampiasaina miaraka amin'ny concurrency avo dia avo:

  • Araka ny voalaza ato amin'ity lahatsoratra ity, amin'izao fotoana izao ny kofehy mpiasa rehetra dia mahazo hidy rehefa manoratra amin'ny buffer fitadidiana logiciel. Amin'ny fampifanarahana avo lenta sy avo lenta dia mila manangom-bokatra ny diarin'ny fidirana ho an'ny kofehy mpiasa tsirairay ianao amin'ny fandaniana ny fandefasana tsy misy baiko rehefa manoratra amin'ny rakitra farany. Raha tsy izany, azonao atao ny mamorona logiciel fidirana mitokana ho an'ny kofehy mpiasa tsirairay.
  • Na dia azo atao tsara aza ny antontan'isa, amin'ny fifanandrifian-javatra avo dia avo dia mety hisy fifandirana atomika amin'ny antontan'isa tsirairay. Ny vahaolana amin'ity olana ity dia ny kaontera isaky ny kofehy mpiasa miaraka amin'ny famerenana tsindraindray ny kaontera afovoany. Hodinihina amin'ny lahatsoratra manaraka izany.
  • Ny maritrano ankehitriny dia tsy hiasa tsara raha toa ka apetraka amin'ny sehatra iray izay misy fifandraisana vitsy izay mitaky loharanom-pamokarana lehibe ny Envoy. Tsy misy antoka fa ny fifandraisana dia ho zaraina mitovy amin'ny kofehy mpiasa. Izany dia azo vahana amin'ny fampiharana ny fifandanjana fifandraisana amin'ny mpiasa, izay ahafahan'ny fifanakalozana fifandraisana eo amin'ny kofehy mpiasa.

Famaranana

Ny maodelin'ny threading an'ny Envoy dia natao hanomezana fanamorana ny fandaharana sy ny parallèle goavana amin'ny fandaniana ny fitadidiana sy ny fifandraisana mety ho very maina raha tsy voarindra tsara. Ity modely ity dia mamela azy hiasa tsara amin'ny fanisana kofehy sy ny throughput avo be.
Araka ny nolazaiko fohifohy tao amin'ny Twitter, ny famolavolana dia afaka mihazakazaka eo an-tampon'ny tambazotran'ny tambajotram-pifandraisana feno mpampiasa toy ny DPDK (Data Plane Development Kit), izay mety hiteraka lohamilina mahazatra mitantana fangatahana an-tapitrisany isan-tsegondra miaraka amin'ny fanodinana L7 feno. Tena mahaliana ny mahita izay haorina ao anatin'ny taona vitsivitsy.
Fanehoan-kevitra haingana farany: Efa imbetsaka aho no nanontaniana ny antony nisafidiananay C++ ho an'ny Envoy. Ny antony dia mitoetra fa io ihany no hany fiteny ampiasaina betsaka amin'ny kilasy indostrialy izay ahafahana manamboatra ny maritrano voalaza ato amin'ity lahatsoratra ity. Ny C ++ dia azo antoka fa tsy mety amin'ny tetikasa rehetra na maro mihitsy aza, fa amin'ny tranga sasany dia mbola io ihany no fitaovana hamitana ny asa.

Rohy amin'ny kaody

Rohy mankany amin'ny rakitra misy interface tsara sy fampiharana lohapejy noresahina tamin'ity lahatsoratra ity:

Source: www.habr.com

Add a comment