[Kev txhais] Envoy threading model

Kev txhais ntawm tsab xov xwm: Envoy threading qauv - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

Kuv pom cov kab lus no nthuav dav heev, thiab txij li Envoy feem ntau yog siv los ua ib feem ntawm "istio" lossis tsuas yog "ingress controller" ntawm kubernetes, feem ntau cov neeg tsis muaj kev sib cuam tshuam ncaj qha nrog nws, piv txwv li, nrog cov qauv zoo ib yam. Nginx lossis Haproxy installation. Txawm li cas los xij, yog tias muaj qee yam tawg, nws yuav zoo kom nkag siab tias nws ua haujlwm li cas los ntawm sab hauv. Kuv tau sim txhais cov ntawv sau ntau li ntau tau ua lus Lavxias, suav nrog cov lus tshwj xeeb; rau cov neeg uas pom tias nws mob siab rau saib qhov no, kuv tau tso cov ntsiab lus hauv kab lus. Zoo siab txais tos miv.

Cov ntaub ntawv qhia qis rau Envoy codebase tam sim no tsis tshua muaj. Txhawm rau kho qhov no, kuv npaj yuav ua cov ntawv tshaj tawm blog txog ntau lub subsystems ntawm Envoy. Txij li qhov no yog thawj tsab xov xwm, thov qhia rau kuv paub seb koj xav li cas thiab koj yuav xav li cas rau hauv cov ntawv yav tom ntej.

Ib qho ntawm cov lus nug ntau tshaj plaws uas kuv tau txais txog Envoy yog nug rau cov lus piav qhia qis ntawm cov qauv xov uas nws siv. Hauv cov ntawv tshaj tawm no, Kuv yuav piav qhia yuav ua li cas Envoy maps kev sib txuas rau cov xov, nrog rau Xov Xwm Hauv Zos Cia nws siv sab hauv los ua cov lej sib npaug thiab ua haujlwm siab.

Threading txheej txheem cej luam

[Kev txhais] Envoy threading model

Envoy siv peb hom dej sib txawv:

  • Main: Cov xov no tswj cov txheej txheem pib thiab txiav tawm, tag nrho cov txheej txheem ntawm XDS (xDiscovery Service) API, suav nrog DNS, kev kuaj xyuas kev noj qab haus huv, pawg tswj hwm thiab kev khiav haujlwm, kev txheeb xyuas rov pib dua, kev tswj hwm thiab kev tswj cov txheej txheem dav dav - Linux teeb liab pib dua, thiab lwm yam. Txhua yam uas tshwm sim hauv cov xov no yog asynchronous thiab "tsis thaiv". Feem ntau, cov xov tseem ceeb tswj hwm tag nrho cov txheej txheem tseem ceeb ntawm kev ua haujlwm uas tsis xav tau ntau npaum li CPU khiav. Qhov no tso cai rau feem ntau cov cai tswj tau sau raws li nws yog ib leeg threaded.
  • Tus neeg ua haujlwm: Los ntawm lub neej ntawd, Envoy tsim ib tus neeg ua haujlwm xov rau txhua qhov kho vajtse hauv lub kaw lus, qhov no tuaj yeem tswj tau siv qhov kev xaiv --concurrency. Txhua tus neeg ua haujlwm xov xwm khiav qhov "tsis thaiv" qhov xwm txheej, uas yog lub luag haujlwm rau kev mloog txhua tus mloog; thaum lub sijhawm sau ntawv (Lub Xya Hli 29, 2017) tsis muaj kev sib faib ntawm cov neeg mloog, lees txais kev sib txuas tshiab, ua kom lub lim dej rau kev sib txuas, thiab ua txhua yam kev tawm tswv yim / tso tawm (IO) kev ua haujlwm thaum lub neej ntawm kev sib txuas. Ntxiv dua thiab, qhov no tso cai rau feem ntau kev sib txuas tuav cov lej sau tau zoo li nws yog ib leeg threaded.
  • Cov ntaub ntawv flusher: Txhua cov ntaub ntawv uas Envoy sau, feem ntau nkag mus rau cov cav, tam sim no muaj kev ywj pheej thaiv xov. Qhov no yog vim qhov tseeb tias sau ntawv rau cov ntaub ntawv cached los ntawm cov ntaub ntawv kaw lus txawm tias siv O_NONBLOCK muaj peev xwm qee zaum tau thaiv (xav). Thaum cov neeg ua haujlwm threads yuav tsum tau sau rau hauv cov ntaub ntawv, cov ntaub ntawv tau raug hloov mus rau qhov tsis nyob hauv lub cim xeeb qhov twg nws thiaj li ntws los ntawm cov xov. ntaub ntawv yaug. Qhov no yog ib cheeb tsam ntawm cov cai uas technically tag nrho cov neeg ua haujlwm threads tuaj yeem thaiv tib lub xauv thaum sim ua kom lub cim xeeb tsis muaj.

Kev sib txuas tuav

Raws li tau tham luv luv saum toj no, txhua tus neeg ua haujlwm xov xwm mloog txhua tus mloog yam tsis muaj kev sib faib. Yog li, cov kernel yog siv los ua qhov zoo xa cov khoom siv rau cov neeg ua haujlwm xov. Cov kernels niaj hnub no feem ntau yog qhov zoo heev ntawm qhov no, lawv siv cov yam ntxwv zoo li kev tawm tswv yim / tso tawm (IO) qhov tseem ceeb boosting los sim sau cov xov nrog kev ua haujlwm ua ntej lawv pib siv lwm cov xov uas tseem mloog ntawm tib lub qhov (socket), thiab tsis siv cov robin. locking (Spinlock) ua txhua qhov kev thov.
Thaum ib qho kev sib txuas raug lees txais ntawm tus neeg ua haujlwm xov, nws yeej tsis tawm ntawm txoj xov ntawd. Tag nrho cov txheej txheem txuas ntxiv ntawm kev sib txuas yog ua tiav hauv cov neeg ua haujlwm xov, suav nrog txhua tus cwj pwm xa mus.

Qhov no muaj ob peb yam tseem ceeb:

  • Tag nrho cov pas dej sib txuas hauv Envoy raug xa mus rau cov neeg ua haujlwm xov. Yog li, txawm hais tias HTTP / 2 kev sib txuas cov pas dej tsuas yog ua ib qho kev sib txuas rau txhua tus tswv tsev hauv ib lub sijhawm, yog tias muaj plaub tus neeg ua haujlwm xov, yuav muaj plaub qhov kev sib txuas HTTP / 2 rau ib tus tswv tsev nyob rau hauv ib qho chaw ruaj khov.
  • Yog vim li cas Envoy ua haujlwm li no yog los ntawm kev khaws txhua yam ntawm ib tus neeg ua haujlwm xov, yuav luag txhua tus lej tuaj yeem sau yam tsis muaj kev thaiv thiab zoo li nws yog ib leeg xov. Qhov kev tsim no ua rau nws yooj yim los sau ntau tus lej thiab ntsuas qhov zoo kawg nkaus rau ze li qhov tsis txwv ntawm cov neeg ua haujlwm xov.
  • Txawm li cas los xij, ib qho ntawm cov khoom tseem ceeb yog tias los ntawm lub cim xeeb pas dej ua ke thiab kev sib txuas ua tau zoo sawv cev, nws yog qhov tseem ceeb heev rau kev teeb tsa. --concurrency. Muaj ntau tus neeg ua haujlwm xov ntau tshaj qhov tsim nyog yuav pov tseg lub cim xeeb, tsim kev sib txuas ntau dua, thiab txo tus nqi ntawm kev sib txuas. Ntawm Lyft, peb cov neeg sawv cev ntawm cov tsheb thauj khoom sib tw khiav nrog cov nqi qis heev kom qhov kev ua tau zoo sib xws nrog cov kev pabcuam uas lawv zaum ntawm ib sab. Peb khiav Envoy raws li tus neeg sawv cev ntug tsuas yog ntawm qhov siab tshaj plaws concurrency.

Dab tsi yog qhov tsis thaiv kev thaiv?

Lo lus "tsis thaiv" tau siv ntau zaus txog tam sim no thaum tham txog yuav ua li cas lub ntsiab thiab cov neeg ua haujlwm threads ua haujlwm. Tag nrho cov cai yog sau rau ntawm qhov kev xav tias tsis muaj dab tsi raug thaiv. Txawm li cas los xij, qhov no tsis yog qhov tseeb tag nrho (dab tsi tsis muaj tseeb?).

Envoy siv ntau lub sijhawm ntev xauv:

  • Raws li tau hais los saum no, thaum sau cov ntaub ntawv nkag mus, txhua tus neeg ua haujlwm xov xwm tau txais tib lub xauv ua ntej lub cim xeeb nkag tsis tau sau. Lub sij hawm xauv lub sij hawm yuav tsum tsawg heev, tab sis nws muaj peev xwm rau lub xauv kom muaj kev sib tw ntawm siab concurrency thiab high throughput.
  • Envoy siv cov txheej txheem nyuaj heev los lis cov txheeb cais uas nyob hauv zos rau cov xov. Qhov no yuav yog lub ntsiab lus ntawm kev tshaj tawm cais. Txawm li cas los xij, kuv yuav hais luv luv tias yog ib feem ntawm kev ua cov xov tooj hauv zos, qee zaum yuav tsum tau txais lub xauv ntawm lub hauv paus "stats khw". Qhov kev xauv no yuav tsum tsis txhob xav tau.
  • Lub ntsiab xov ib ntus yuav tsum tau koom tes nrog txhua tus neeg ua haujlwm xov. Qhov no yog ua los ntawm "kev tshaj tawm" los ntawm cov xov tseem ceeb rau cov neeg ua haujlwm xov, thiab qee zaum los ntawm cov neeg ua haujlwm xov rov qab mus rau cov xov tseem ceeb. Kev xa yuav tsum muaj lub xauv kom cov lus tshaj tawm tuaj yeem raug xa mus rau tom ntej. Cov locks no yuav tsum tsis txhob sib tw hnyav, tab sis lawv tseem tuaj yeem raug thaiv kev lag luam.
  • Thaum Envoy sau ib lub cav rau qhov system yuam kev kwj (tus qauv yuam kev), nws tau txais lub xauv ntawm tag nrho cov txheej txheem. Feem ntau, Envoy txoj kev txiav txim siab hauv zos tau suav tias yog qhov txaus ntshai los ntawm qhov kev ua tau zoo, yog li tsis tau muaj kev saib xyuas ntau rau kev txhim kho nws.
  • Muaj ob peb lwm qhov kev ntsuas ntsuas, tab sis tsis muaj leej twg yog qhov tseem ceeb ntawm kev ua haujlwm thiab yuav tsum tsis txhob muaj kev sib tw.

Xov xov hauv zos cia

Vim tias txoj kev Envoy cais lub luag haujlwm ntawm cov xov tseem ceeb los ntawm lub luag haujlwm ntawm cov neeg ua haujlwm xov, nws yog qhov yuav tsum tau ua kom cov txheej txheem nyuaj tuaj yeem ua tiav ntawm cov xov tseem ceeb thiab muab rau txhua tus neeg ua haujlwm xov hauv ib qho zoo sib xws. Tshooj lus no piav qhia txog Envoy Thread Local Storage (TLS) nyob rau theem siab. Hauv seem tom ntej no kuv yuav piav qhia yuav ua li cas nws siv los tswj cov pawg.
[Kev txhais] Envoy threading model

Raws li twb tau piav qhia lawm, cov xov tseem ceeb ua haujlwm txhua yam kev tswj hwm thiab tswj lub dav hlau ua haujlwm hauv cov txheej txheem Envoy. Lub dav hlau tswj yog me ntsis overloaded ntawm no, tab sis thaum koj saib nws nyob rau hauv tus txheej txheem Envoy nws tus kheej thiab muab piv rau kev xa mus uas cov neeg ua haujlwm threads ua, nws ua rau kev nkag siab. Txoj cai dav dav yog tias cov txheej txheem xov tseem ceeb ua qee yam haujlwm, thiab tom qab ntawd nws yuav tsum hloov kho txhua tus neeg ua haujlwm xov raws li qhov tshwm sim ntawm txoj haujlwm ntawd. Nyob rau hauv cov ntaub ntawv no, cov neeg ua hauj lwm xov tsis xav tau ib tug xauv ntawm txhua tus nkag.

Envoy's TLS (Thread local storage) system ua haujlwm raws li hauv qab no:

  • Code khiav ntawm lub ntsiab xov tuaj yeem faib TLS qhov rau tag nrho cov txheej txheem. Txawm hais tias qhov no yog abstracted, hauv kev xyaum nws yog qhov ntsuas rau hauv vector, muab O(1) nkag.
  • Cov xov tseem ceeb tuaj yeem nruab cov ntaub ntawv tsis txaus ntseeg rau hauv nws qhov. Thaum qhov no ua tiav, cov ntaub ntawv raug luam tawm rau txhua tus neeg ua haujlwm xov xwm raws li qhov xwm txheej ib txwm tshwm sim.
  • Cov neeg ua haujlwm xov tuaj yeem nyeem los ntawm lawv qhov TLS thiab khaws cov ntaub ntawv xov xwm hauv zos muaj nyob ntawd.

Txawm hais tias nws yog qhov yooj yim heev thiab muaj zog heev, nws zoo ib yam li lub tswv yim ntawm RCU (Nyeem-Copy-Update) thaiv. Qhov tseem ceeb, cov neeg ua haujlwm threads yeej tsis pom cov ntaub ntawv hloov pauv hauv TLS qhov chaw thaum ua haujlwm. Kev hloov pauv tsuas yog thaum lub sijhawm so ntawm cov xwm txheej ua haujlwm.

Envoy siv qhov no hauv ob txoj kev sib txawv:

  • Los ntawm kev khaws cov ntaub ntawv sib txawv ntawm txhua tus neeg ua haujlwm xov, cov ntaub ntawv tuaj yeem nkag mus yam tsis muaj kev thaiv.
  • Los ntawm kev tuav tus taw qhia qhia rau cov ntaub ntawv thoob ntiaj teb hauv hom nyeem nkaus xwb ntawm txhua tus neeg ua haujlwm xov. Yog li, txhua tus neeg ua haujlwm xov xwm muaj cov ntaub ntawv siv suav nrog uas tsis tuaj yeem txo qis thaum ua haujlwm. Tsuas yog thaum txhua tus neeg ua haujlwm tso siab thiab muab cov ntaub ntawv sib qhia tshiab yuav cov ntaub ntawv qub raug rhuav tshem. Qhov no zoo ib yam rau RCU.

Cluster hloov tshiab threading

Hauv seem no, kuv yuav piav qhia yuav ua li cas TLS (Thread local storage) siv los tswj cov pawg. Kev tswj hwm pawg suav nrog xDS API thiab / lossis kev ua DNS, nrog rau kev kuaj mob.
[Kev txhais] Envoy threading model

Cluster flow management muaj xws li cov nram qab no cov khoom thiab cov kauj ruam:

  1. Cluster Manager yog ib feem ntawm Envoy uas tswj hwm tag nrho cov kev paub txog cov dej ntws, Cluster Discovery Service (CDS) API, Secret Discovery Service (SDS) thiab Endpoint Discovery Service (EDS) APIs, DNS, thiab cov kev kuaj xyuas sab nraud. Nws yog lub luag haujlwm los tsim kom muaj qhov "tseem ceeb ib yam" saib ntawm txhua pawg neeg sab saud, uas suav nrog cov tswv tsev nrhiav pom thiab kev noj qab haus huv.
  2. Tus kws tshuaj xyuas kev noj qab haus huv ua ib qho kev kuaj mob hnyav thiab qhia txog kev hloov pauv kev noj qab haus huv rau tus thawj tswj hwm pawg.
  3. CDS (Cluster Discovery Service) / SDS (Secret Discovery Service) / EDS (Endpoint Discovery Service) / DNS yog ua los txiav txim rau pawg tswv cuab. Lub xeev hloov pauv rov qab mus rau pawg tswj hwm.
  4. Txhua tus neeg ua haujlwm xov tsis tu ncua ua ib qho kev tshwm sim voj.
  5. Thaum tus thawj tswj hwm pawg txiav txim siab tias lub xeev rau pawg tau hloov pauv, nws tsim cov ntawv nyeem tshiab nkaus xwb ntawm pawg pawg lub xeev thiab xa mus rau txhua tus neeg ua haujlwm xov.
  6. Thaum lub sijhawm nyob ntsiag to tom ntej no, cov xov xwm ua haujlwm yuav hloov kho cov duab thaij duab hauv TLS qhov chaw.
  7. Thaum lub sijhawm I / O qhov kev tshwm sim uas yuav tsum tau txiav txim siab tus tswv tsev kom thauj khoom sib npaug, tus nqi thauj khoom yuav thov TLS (Thread local storage) qhov kom tau txais cov ntaub ntawv hais txog tus tswv tsev. Qhov no tsis tas yuav tsum tau xauv. Nco ntsoov tias TLS tseem tuaj yeem ua rau cov xwm txheej hloov tshiab kom thauj khoom sib npaug thiab lwm yam khoom tuaj yeem suav rov qab cov ntaub ntawv, cov qauv ntaub ntawv, thiab lwm yam. Qhov no yog dhau ntawm qhov kev tshaj tawm no, tab sis siv ntau qhov chaw hauv cov cai.

Siv cov txheej txheem saum toj no, Envoy tuaj yeem ua txhua qhov kev thov yam tsis muaj kev thaiv (tshwj tsis yog raws li tau piav qhia dhau los). Ib cag ntawm qhov nyuaj ntawm TLS code nws tus kheej, feem ntau ntawm cov cai tsis tas yuav nkag siab tias kev sib txuas lus ua haujlwm li cas thiab tuaj yeem sau ib leeg xov. Qhov no ua rau feem ntau ntawm cov cai yooj yim sau ntxiv rau kev ua tau zoo dua.

Lwm subsystems uas siv TLS

TLS (Xov xwm hauv zos cia) thiab RCU (Nyeem Ntawv Hloov Kho) tau siv dav hauv Envoy.

Piv txwv ntawm kev siv:

  • Mechanism hloov kev ua haujlwm thaum ua tiav: Daim ntawv teev npe tam sim no ntawm kev ua haujlwm tau siv tau suav nrog hauv cov xov tseem ceeb. Txhua tus neeg ua haujlwm xov yog tom qab ntawd muab cov ntawv nyeem nkaus xwb uas siv RCU semantics.
  • Hloov cov kab lus: Rau txoj kev rooj muab los ntawm RDS (Route Discovery Service), cov rooj sib tham yog tsim los ntawm cov xov tseem ceeb. Cov ntawv nyeem nkaus xwb tom qab ntawd yuav muab rau txhua tus neeg ua haujlwm xov xwm siv RCU (Nyeem Ntawv Hloov Kho) cov ntsiab lus. Qhov no ua rau kev hloov cov kab lus atomically npaum.
  • HTTP header caching: Raws li nws hloov tawm, suav HTTP header rau txhua qhov kev thov (thaum khiav ~ 25K + RPS ib qho tseem ceeb) yog kim heev. Tus neeg sawv cev hauv nruab nrab suav cov header kwv yees li ib nrab thib ob thiab muab rau txhua tus neeg ua haujlwm ntawm TLS thiab RCU.

Muaj lwm qhov xwm txheej, tab sis cov piv txwv yav dhau los yuav tsum muaj kev nkag siab zoo txog dab tsi TLS siv rau.

Paub txog kev ua haujlwm pitfalls

Thaum Envoy ua tau zoo tag nrho, muaj ob peb qhov tseem ceeb uas yuav tsum tau ua tib zoo saib thaum nws siv nrog cov txiaj ntsig zoo heev thiab dhau los:

  • Raws li tau piav qhia hauv tsab xov xwm no, tam sim no txhua tus neeg ua haujlwm xov xwm tau txais lub xauv thaum sau ntawv mus rau qhov nkag nkag nkag tsis nco qab. Nyob rau hauv siab concurrency thiab high throughput, koj yuav tsum tau batch cov ntaub ntawv nkag mus rau txhua tus neeg ua haujlwm xov ntawm tus nqi ntawm cov khoom xa tawm thaum sau ntawv mus rau cov ntaub ntawv kawg. Xwb, koj tuaj yeem tsim ib daim ntawv nkag mus rau txhua tus neeg ua haujlwm.
  • Txawm hais tias cov txheeb cais tau ua kom zoo tshaj plaws, ntawm qhov sib txuam siab heev thiab dhau los yuav muaj kev sib cav atomic ntawm tus neeg txheeb cais. Kev daws rau qhov teeb meem no yog cov txee rau ib tus neeg ua haujlwm xov nrog lub sijhawm rov pib dua ntawm cov txee nruab nrab. Qhov no yuav tau tham hauv tsab xov xwm tom ntej.
  • Lub architecture tam sim no yuav tsis ua haujlwm zoo yog tias Envoy raug xa mus rau hauv qhov xwm txheej uas muaj kev sib txuas tsawg heev uas yuav tsum tau ua cov peev txheej tseem ceeb. Tsis muaj kev lees paub tias kev sib txuas yuav raug muab faib sib npaug ntawm cov neeg ua haujlwm xov. Qhov no tuaj yeem daws tau los ntawm kev siv cov neeg ua haujlwm sib txuas sib npaug, uas yuav tso cai rau kev sib pauv kev sib txuas ntawm cov neeg ua haujlwm xov.

Xaus

Envoy's threading qauv yog tsim los muab kev yooj yim ntawm kev ua haujlwm thiab kev sib luag loj heev ntawm kev siv lub cim xeeb khib nyiab thiab kev sib txuas yog tias tsis teeb tsa kom raug. Cov qauv no tso cai rau nws ua tau zoo heev ntawm cov xov tooj siab heev thiab dhau los.
Raws li kuv tau hais luv luv ntawm Twitter, tus qauv tsim kuj tseem tuaj yeem khiav mus rau sab saum toj ntawm tag nrho cov neeg siv hom kev sib txuas lus xws li DPDK (Data Plane Development Kit), uas tuaj yeem ua rau cov servers ib txwm tuav ntau lab ntawm kev thov ib ob nrog tag nrho L7 ua. Nws yuav nthuav heev kom pom dab tsi tau tsim nyob rau hauv ob peb xyoos tom ntej no.
Ib nqe lus ceev kawg: Kuv tau nug ntau zaus vim li cas peb xaiv C ++ rau Envoy. Yog vim li cas tseem tshuav tias nws tseem yog tib hom lus siv dav siv hauv cov lus uas tau piav qhia hauv cov ntawv no tuaj yeem tsim. C ++ yog qhov tseeb tsis haum rau txhua qhov lossis ntau qhov haujlwm, tab sis rau qee qhov kev siv nws tseem yog tib lub cuab yeej kom ua tiav txoj haujlwm.

Txuas rau code

Txuas mus rau cov ntaub ntawv nrog interfaces thiab header siv tau tham hauv no ncej:

Tau qhov twg los: www.hab.com

Ntxiv ib saib