[Fa'aliliuga] Fa'ata'ita'iga o filo filo

Fa'aliliuga o le tala: Fa'ata'ita'iga o filo fa'a'ave'au - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

Na ou mauaina lenei tusiga e manaia tele, ma talu ai o le Envoy e masani ona faʻaaogaina o se vaega o le "istio" poʻo le naʻo le "ingress controller" o kubernetes, o le tele o tagata e le tutusa le fegalegaleaiga tuusaʻo ma ia, mo se faʻataʻitaʻiga, ma masani masani. Nginx poʻo Haproxy faʻapipiʻi. Ae peitaʻi, afai e gau se mea, e lelei le malamalama pe faʻapefea ona galue mai totonu. Sa ou taumafai e faaliliu le tele o tusitusiga i le gagana Rusia pe a mafai, e aofia ai upu faapitoa; mo i latou e tiga le vaai i lenei mea, sa ou tuua le uluai tusitusiga i puipui. Susu mai ile pusi.

O faʻamaumauga faʻapitoa faʻapitoa mo le Envoy codebase o loʻo laʻititi nei. Ina ia foia lenei mea, ou te fuafua e fai se faasologa o tusiga blog e uiga i vaega eseese o le Envoy. Talu ai o le tusiga muamua lenei, faamolemole taʻu mai ia te aʻu ou manatu ma mea e te ono fiafia i ai i tala o lumanaʻi.

O se tasi o fesili faʻapitoa masani ou te mauaina e uiga i le Envoy o loʻo fesili mo se faʻamatalaga maualalo o le faʻataʻitaʻiga filo o loʻo faʻaaogaina. I lenei pou, o le a ou faʻamatalaina pe faʻafefea ona faʻapipiʻi e le Envoy fesoʻotaʻiga i filo, faʻapea foʻi ma le Thread Local Storage system e faʻaogaina i totonu e faʻaoga atili ai le code ma maualuga-faʻatinoga.

Aotelega o filo

[Fa'aliliuga] Fa'ata'ita'iga o filo filo

E tolu ituaiga o vaitafe e fa'aaogaina e le Envoy:

  • Autu: O lenei filo e pulea le faagasologa o le amataina ma le faamutaina, o gaioiga uma o le XDS (xDiscovery Service) API, e aofia ai le DNS, le siakiina o le soifua maloloina, faʻapipiʻi lautele ma le faʻatautaia o taimi, faʻasologa o fuainumera, pulega ma pulega lautele - faʻailoga Linux. toe amata vevela, ma isi mea uma e tupu i lenei filo e asynchronous ma "le poloka". I se tulaga lautele, o le filo autu e faʻamaopoopoina uma faiga faʻatinoga taua e le manaʻomia ai se aofaiga tele o le PPU e faʻatautaia. Ole mea lea e mafai ai ona tusia le tele o tulafono faatonutonu e pei o se filo e tasi.
  • Tagata faigaluega: Ona o le le mafai, Envoy faia se filo tagata faigaluega mo filo meafaigaluega taitasi i totonu o le faiga, e mafai ona pulea e faaaoga ai le filifiliga --concurrency. O filo faigaluega taʻitasi o loʻo faʻatautaia se faʻalavelave faʻafuaseʻi "e le o poloka", lea e nafa ma le faʻalogo i tagata faʻalogologo taʻitasi; i le taimi o le tusitusi (Iulai 29, 2017) e leai se faʻasoaina o le tagata faʻalogo, taliaina o fesoʻotaʻiga fou, faʻapipiʻi se faʻapipiʻi faamama mo le feso'ota'iga, ma le fa'agaioiina o fa'agaioiga uma o mea e fa'aoga/tuuina atu (IO) i le olaga atoa o le feso'ota'iga. Toe fa'apea, e mafai ai e le tele o feso'ota'iga fa'afeso'ota'iga code e tusia e pei o se filo tasi.
  • Fa'amama faila: O faila uma e tusia e le Envoy, e masani lava ona maua i ogalaau, o loʻo i ai nei se filo faʻapipiʻi tutoʻatasi. E mafua lenei mea i le mea moni o le tusitusi i faila na teuina e le faila faila tusa lava pe faʻaaoga O_NONBLOCK e mafai ona poloka i nisi taimi (mapuea). Afai e manaʻomia e filo a tagata faigaluega ona tusi i se faila, o faʻamaumauga e ave moni i se paʻu i le manatua lea e iu ai ina faʻafefe i le filo faila faila. O le tasi lea vaega o le code lea e mafai ai e filo a tagata faigaluega uma ona poloka le loka tutusa aʻo taumafai e faʻatumu se paʻu manatua.

Fa'afoega feso'ota'iga

E pei ona talanoaina puupuu i luga, o filo a tagata faigaluega uma e faʻalogo i tagata faʻalogo uma e aunoa ma se sharding. O le mea lea, o le fatu e faʻaaogaina e lafo faʻalelei sockets taliaina i filo faigaluega. O fatu fa'aonaponei e masani lava ona lelei tele i lenei mea, latou te fa'aogaina foliga e pei o le fa'auluina o le fa'amuamua i totonu/output (IO) e taumafai e fa'atumu se filo i galuega a'o le'i amata fa'aoga isi filo o lo'o fa'alogo i luga o le socket lava e tasi, ma e le fa'aogaina fo'i le robin. loka (Spinlock) e fa'agasolo ai talosaga ta'itasi.
O le taimi lava e talia ai se feso'ota'iga i luga o se filo a tagata faigaluega, e le alu ese lava i lena filo. O isi fa'agaioiga uma o le feso'ota'iga o lo'o fa'atautaia atoa i totonu o le filo a le tagata faigaluega, e aofia ai so'o se amioga e fa'asalalau atu.

O lenei mea e iai ni a'afiaga taua:

  • O vaita'ele feso'ota'iga uma i le Envoy e tu'uina atu i se filo a tagata faigaluega. O lea la, e ui lava ina na'o le tasi le feso'ota'iga o vaita'ele feso'ota'iga HTTP/2 i 'au ta'itasi i luga i le taimi, afai e fa filo tagata faigaluega, e fa HTTP/2 feso'ota'iga i le 'au talimalo i luga i se tulaga mautu.
  • O le mafuaʻaga e galue ai le Envoy i lenei auala e ala i le tuʻuina o mea uma i luga o se filo faigaluega e tasi, toetoe lava o code uma e mafai ona tusia e aunoa ma le poloka ma e pei o se filo tasi. O lenei mamanu e faigofie ai ona tusia le tele o numera ma fua faʻatatau lelei i se numera le faʻatapulaʻaina o filo faigaluega.
  • Ae ui i lea, o se tasi o mea taua e faʻaaogaina o le mai le vaitaele manatua ma le tulaga lelei o fesoʻotaʻiga, e matua taua tele le faʻatulagaina o le --concurrency. O le tele o filo a tagata faigaluega nai lo le mea e mana'omia o le a fa'aumatia ai le manatua, fa'ateleina feso'ota'iga le aoga, ma fa'aitiitia ai le fua o feso'ota'iga. I Lyft, o lo'o fa'agasolo a matou koneteina ta'avale a le avefe'au ma le fa'atauva'a maualalo ina ia fetaui lelei le fa'atinoga ma auaunaga o lo'o nonofo i talaane. Matou te fa'atinoina le Envoy e fai ma sui pito i luga na'o le maualuga o le tutusa.

O le a le uiga o le le poloka?

O le faaupuga "le poloka" ua faʻaaogaina i le tele o taimi i le taimi nei pe a talanoaina pe faʻafefea ona galue le filo autu ma le aufaigaluega. O tulafono uma e tusia i luga o le manatu e leai se mea e poloka. Ae ui i lea, e le'o atoatoa lenei mea (o le a le mea e le'o atoatoa?).

E fa'aaogaina e le avefe'au le tele o loka fa'agasolo umi:

  • E pei ona talanoaina, pe a tusia ni ogalaau avanoa, e maua uma e filo a tagata faigaluega le loka tutusa a'o le'i fa'atumu le fa'amaufa'ailoga ogalaau i totonu. O le taimi e taofi ai loka e tatau ona matua maualalo, ae e mafai ona tauva le loka i le maualuga o le concurrency ma le maualuga o le gaosiga.
  • E fa'aogaina e le Envoy se faiga fa'alavelave tele e fa'atautaia ai fa'amaumauga o lo'o i totonu o le filo. O le a avea lea ma autu o se isi pou. Ae ui i lea, o le a ou taʻua faʻapuupuu e avea o se vaega o le faʻatulagaina o fuainumera filo i le lotoifale, o nisi taimi e manaʻomia ai le mauaina o se loka i luga o se "stats store" tutotonu. O lenei loka e le tatau ona manaʻomia.
  • O le filo autu i lea taimi ma lea taimi e manaʻomia le faʻamaopoopoina ma filo faigaluega uma. E faia lea e ala i le "fa'asalalauina" mai le filo autu i filo a tagata faigaluega, ma o nisi taimi mai filo a le aufaigaluega i tua i le filo autu. O le auina atu e mana'omia se loka ina ia mafai ai ona fa'alaina le fe'au fa'asalalau mo le fa'ao'o mulimuli ane. O loka nei e le tatau ona matua finauina, ae e mafai lava ona poloka faʻapitoa.
  • Pe a tusia e le Envoy se ogalaau i le faʻaogaina o le faʻaogaina o mea sese (sese masani), e maua ai se loka i le faagasologa atoa. I se tulaga lautele, o le logging a le Envoy i le lotoifale e manatu e mataʻutia mai le tulaga o le faʻatinoga, o lea e leʻi tele se gauai i le faʻaleleia.
  • O lo'o i ai nai isi loka fa'afuase'i, ae leai se tasi o ia mea e taua tele le fa'atinoga ma e le tatau ona lu'iina.

Fa'aputu fa'apitonu'u

Ona o le auala e vavae ese ai e le Envoy ia matafaioi o le filo autu mai le matafaioi a le filo o le aufaigaluega, o loʻo i ai se manaʻoga e mafai ona faia le faʻalavelave lavelave i luga o le filo autu ona tuʻuina atu lea i filo a tagata faigaluega taʻitasi i se tulaga maualuga. O lenei vaega o loʻo faʻamatalaina le Envoy Thread Local Storage (TLS) i se tulaga maualuga. I le isi vaega o le a ou faʻamatalaina pe faʻapefea ona faʻaaogaina e pulea ai se fuifui.
[Fa'aliliuga] Fa'ata'ita'iga o filo filo

E pei ona uma ona faʻamatalaina, o le filo autu e faʻatautaia toetoe lava o pulega uma ma faʻatautaia galuega o vaalele i le faagasologa o le Envoy. O le va'alele fa'atonutonu e fai si ova le uta iinei, ae a e va'ai i ai i totonu o le Envoy process lava ia ma fa'atusatusa i le tu'uina atu o lo'o faia e filo a le aufaigaluega, e talafeagai. O le tulafono lautele o le faʻagasologa o filo autu e faia nisi o galuega, ona manaʻomia lea o le faʻafouina o filo faigaluega taʻitasi e tusa ai ma le taunuuga o lena galuega. i lenei tulaga, e le manaʻomia e le tagata faigaluega le mauaina o se loka i luga o avanoa taʻitasi.

Ole TLS (Thread local storage) system e galue e pei ona taua i lalo:

  • O le fa'ailoga o lo'o ta'avale i luga o le filo autu e mafai ona fa'asoa se avanoa TLS mo le faagasologa atoa. E ui ina fa'asa'oina, ae o le fa'ata'ita'iga o se fa'asino i totonu o se ve'a, e maua ai le avanoa O(1).
  • E mafai e le filo autu ona fa'apipi'i fa'amatalaga fa'apitoa i totonu o lona avanoa. A mae'a lea mea, ona fa'asalalauina lea o fa'amaumauga i filo a tagata faigaluega ta'itasi e fai ma fa'alavelave masani.
  • O filo a tagata faigaluega e mafai ona faitau mai la latou TLS slot ma toe aumai soʻo se filo-faʻamatalaga faʻapitonuʻu o loʻo maua iina.

E ui lava o se faʻataʻitaʻiga faigofie ma sili ona mamana, e talitutusa lava ma le manatu ole RCU (Read-Copy-Update) poloka. O le mea moni, e le'i va'aia e filo a tagata faigaluega ni suiga o fa'amaumauga i avanoa TLS a'o fa'agasolo galuega. O suiga e tupu na'o le taimi malolo i le va o galuega.

E faʻaaogaina e le avefeʻau lenei mea i auala eseese e lua:

  • E ala i le teuina o faʻamatalaga eseese i luga o filo faigaluega taʻitasi, e mafai ona maua faʻamatalaga e aunoa ma se poloka.
  • E ala i le fa'atumauina o se fa'asinomaga fa'asoa i fa'amaumauga a le lalolagi i le na'o le faitau i luga o filo a tagata faigaluega ta'itasi. O lea la, o filo faigaluega ta'itasi e iai fa'amaumauga fa'amaumauga e le mafai ona fa'aitiitia a'o fa'agasolo le galuega. Fa'atoa fa'afilemu uma tagata faigaluega ma tu'uina atu fa'amatalaga fou fa'asoa ona fa'aumatia lea o fa'amaumauga tuai. E tutusa lea ma le RCU.

Fa'afou fa'aputuga filo filo

I lenei vaega, o le a ou faʻamatalaina pe faʻafefea ona faʻaogaina le TLS (Thread local storage) e pulea ai se fuifui. Fa'atonuga fa'aopoopo e aofia ai le xDS API ma/po'o le fa'agaioiina o DNS, fa'apea fo'i ma le siakiina ole soifua maloloina.
[Fa'aliliuga] Fa'ata'ita'iga o filo filo

O le fa'afoega o le fa'asologa o vaega e aofia ai vaega ma laasaga nei:

  1. O le Cluster Manager o se vaega i totonu o le Envoy e fa'atautaia uma vaega o lo'o iloa i luga, le Cluster Discovery Service (CDS) API, le Secret Discovery Service (SDS) ma le Endpoint Discovery Service (EDS) APIs, DNS, ma siaki mai fafo. E nafa ma le fatuina o se vaaiga "iu lava ina tumau" o fuifui pito i luga taʻitasi, lea e aofia ai 'au na maua faʻapea foʻi ma le tulaga o le soifua maloloina.
  2. Ole su'ega ole soifua maloloina e fa'atino se siaki fa'alesoifua maloloina ma lipoti atu suiga ole tulaga ole soifua maloloina ile pule ole fuifui.
  3. CDS (Cluster Discovery Service) / SDS (Secret Discovery Service) / EDS (Endpoint Discovery Service) / DNS o loʻo faʻatinoina e fuafua ai le sui auai o le kulupu. O le suiga o le setete e toe faafoi atu i le pule o le fuifui.
  4. O filo faigaluega ta'itasi e fa'aauau pea ona fa'atinoina se fa'alavelave fa'alavelave.
  5. A iloa e le pule o le fuifui ua suia le setete mo se fuifui, na te faia se ata fou na'o le faitau o le setete o le fuifui ma auina atu i filo a tagata faigaluega taitasi.
  6. I le isi vaitau filemu, o le a fa'afouina e le filo a le tagata faigaluega le ata i le avanoa TLS.
  7. I le taimi o le I / O mea na tupu e tatau ona fuafua le talimalo e utaina le paleni, o le a talosagaina e le tagata faʻatauvaʻa se TLS (Thread local storage) slot e maua ai faʻamatalaga e uiga i le talimalo. E le mana'omia ni loka. Manatua foi e mafai foi e le TLS ona faʻaosoina mea faʻafouina ina ia mafai ai e tagata paleni o uta ma isi vaega ona toe faʻavasega faʻamaumauga, fausaga faʻamaumauga, ma isi. O lenei mea e sili atu i le lautele o lenei pou, ae faʻaaogaina i nofoaga eseese i le code.

I le faʻaaogaina o le faʻatinoga o loʻo i luga, e mafai e le Envoy ona faʻatautaia talosaga uma e aunoa ma se poloka (sei vagana ai le faʻamatalaina muamua). E ese mai i le lavelave o le TLS code lava ia, o le tele o le code e le manaʻomia ona malamalama pe faʻafefea ona galue multithreading ma mafai ona tusia i le tasi-filo. O le mea lea e fa'afaigofie ai ona tusia le tele o le code fa'aopoopo i le fa'atinoga maualuga.

O isi subsystems e fa'aogaina le TLS

TLS (Thread local storage) ma le RCU (Read Copy Update) o loʻo faʻaaogaina lautele i le Envoy.

Faataitaiga o le faaaogaina:

  • Mechanism mo le suia o galuega i le taimi o le faatinoga: O le lisi o lo'o i ai nei o fa'agaioiga fa'aagaaga o lo'o fuafua i le filo autu. E tu'uina atu i filo faigaluega ta'itasi se ata faitau na'o le fa'aogaina o le RCU semantics.
  • Suia laulau auala: Mo laulau auala e saunia e le RDS (Auaunaga Discovery Auala), o laulau auala e faia i luga o le filo autu. O le ata faitau-na'o le a tu'uina atu mulimuli ane i filo a tagata faigaluega ta'itasi e fa'aaoga ai le RCU (Read Copy Update) semantics. O le mea lea e mafai ai ona fa'atometi le suia o laulau ala.
  • HTTP ulutala fa'apipi'i: E foliga mai, o le fuafuaina o le ulutala HTTP mo talosaga taʻitasi (aʻo taʻavale ~ 25K + RPS i le autu) e taugata tele. E fa'atatau e le avefe'au le ulutala pe a ma le afa sekone ma tu'uina atu i tagata faigaluega ta'itasi e ala i le TLS ma le RCU.

E i ai isi mataupu, ae o faʻataʻitaʻiga muamua e tatau ona maua ai se malamalamaga lelei i le mea e faʻaogaina ai le TLS.

Ua iloa mailei fa'atinoga

E ui o le Envoy e lelei tele le faʻatinoga, o loʻo i ai ni nai vaega iloga e manaʻomia le gauai pe a faʻaaogaina ma le maualuga maualuga ma le gaosiga:

  • E pei ona faamatalaina i lenei tusiga, i le taimi nei e maua uma e filo a tagata faigaluega se loka pe a tusi atu i le access log memory buffer. I le maualuga o le tutusa ma le maualuga o le gaosiga, e te manaʻomia le faʻapipiʻiina o ogalaau avanoa mo filo faigaluega taʻitasi i le faʻaaluina o le tuʻuina atu i fafo pe a tusi i le faila mulimuli. I le isi itu, e mafai ona e faia se fa'amaumauga tu'ufa'atasi mo tagata faigaluega ta'itasi.
  • E ui lava o fuainumera e sili ona lelei, i le maualuga tele o le faʻaogaina ma le faʻaogaina o le a iai se finauga atomika i fuainumera taʻitasi. O le fofo i lenei fa'afitauli o fa'atauga i filo a tagata faigaluega fa'atasi ai ma le toe setiina fa'avaitaimi o fa'atau tutotonu. O le a talanoaina lenei mea i se isi pou mulimuli ane.
  • O le fausaga o loʻo iai nei o le a le lelei pe a faʻapipiʻiina le Envoy i se faʻataʻitaʻiga o loʻo i ai ni nai fesoʻotaʻiga e manaʻomia ai punaoa faʻapitoa. E leai se fa'amaoniga o feso'ota'iga o le a fa'asoa tutusa i filo a tagata faigaluega. E mafai ona foia lenei mea e ala i le faʻatinoina o le faapaleniina o fesoʻotaʻiga a tagata faigaluega, lea o le a faʻatagaina ai le fesuiaiga o fesoʻotaʻiga i le va o filo a tagata faigaluega.

Fa'ai'uga

O le faʻataʻitaʻiga filo a le Envoy ua mamanuina e tuʻuina atu ai le faʻafaigofieina o polokalame ma le tele o faʻataʻitaʻiga i le faʻalavelaveina o mafaufauga faʻaleagaina ma fesoʻotaʻiga pe a le saʻo le faʻatulagaina. O lenei fa'ata'ita'iga e mafai ai ona fa'atino lelei i le maualuga tele o filo ma fa'aulu.
E pei ona ou taʻua puupuu i luga o le Twitter, o le mamanu e mafai foi ona tamoe i luga o se faʻapipiʻi fesoʻotaʻiga faʻaoga-faʻaogaina e pei o le DPDK (Data Plane Development Kit), lea e mafai ona iʻu ai i le auʻaunaga masani e faʻatautaia le faitau miliona o talosaga i le sekone ma le L7 atoa. O le a manaia tele le va'ai i mea e fausia i nai tausaga o lumana'i.
Tasi fa'amatalaga vave mulimuli: Ua fesiligia a'u i le tele o taimi pe aisea na matou filifilia ai le C ++ mo Envoy. O lo'o tumau pea le mafua'aga e na'o le pau lea o le gagana fa'aoga fa'apisinisi e mafai ona fausia ai le fausaga o lo'o fa'amatalaina i lenei pou. C ++ e mautinoa lava e le fetaui mo galuega uma poʻo le tele foi, ae mo nisi tulaga faʻaoga e naʻo le pau lea o le meafaigaluega e faʻataunuʻu ai le galuega.

So'oga ile fa'ailoga

So'oga i faila ma feso'ota'iga ma fa'auluuluga fa'atinoga o lo'o talanoaina i lenei pou:

puna: www.habr.com

Faaopoopo i ai se faamatalaga