[Translatio] Legatus threading exemplar

Translatio articuli: Legatus threading exemplar - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

Articulum hunc satis iucundum inveni, et cum Legatus saepissime utatur ut pars "istio" vel simpliciter ut "ingressus moderatoris" kubernetes, plerique non habent eandem directam commercium cum eo ac, exempli gratia, cum typica. Nginx vel Haproxy officinae. Sed si aliquid frangitur, bonum est intelligere quomodo ab interiori operetur. Conatus sum textum quantum fieri in Russicum, etiam specialia verba interpretari: qui enim graviter hoc intueri, archetypa in parenthesi intermisi. Welcome to cat.

Documenta technica humili gradu pro codebase Legato nunc satis sparsa est. Ut huic remedium afferam, seriem epistularum diariorum de variis subsystematibus Legatorum agere instituimus. Cum hic sit primus articulus, fac ut sciam quid sentias et quid in articulis futuris interesse possis.

Una e communissimis technicis quaestionibus, quas de Internuntio accipio, petit pro humili gradu descriptionis exemplaris sequelis quo utitur. In hoc poste narrabo quomodo Envoyis tabulas nexus cum filis, tum in sequela Repositoria localis systematis interne adhibet ut codicem magis parallelum et excelsum efficeret.

Threading overview

[Translatio] Legatus threading exemplar

Utitur Legatus tribus generibus fluminum;

  • Principalis: Hoc filum controls processum satus et terminationem, omnes processus XDS (xDiscovery Service) API, incluso DNS, salutem tenendo, generatim botrum et runtime administrationem, statisticam reset, administrationem et processum generalem - Linux annuit, sileo calidum, etc. Omnia quae hoc filum accidit asynchronum et "non-obstructionem". In genere, principale filum coordinat omnes processus officialitatis criticae qui magnam quantitatem CPU ad currendum non requirunt. Hoc maxime permittit codicem imperium scribendum esse quasi unum liciatum.
  • Operarius: Defalta, Legatus artificem filum pro singulis ferramentis in systemate stamina creat, haec optione utens coerceri potest --concurrency. Quaelibet operarius filum decurrit "non-obturans" eventum ansam, quae ad unumquemque audientem pertinet, tempore scribendi (29 iulii 2017) nulla audientis communicatio, novas hospites accipientes, filtrum acervum instantiat. nexum, et omnes operationes input/output (IO) dispensando in vita nexu. Iterum, hoc maxime nexum tractantem codicem permittit scribendum quasi unum lina.
  • Fasciculi flusher: Quaelibet tabella quae Internuntius scribit, maxime stipites accessus, nunc filum interclusio sui iuris habet. Hoc accidit ex eo quod scribens ad tabularios conditivos in ratio lima vel cum utens O_NONBLOCK interdum adepto clausus potest (sigh). Cum operarius stamina opus est ad limam scribere, notitia actu movetur ad quiddam in memoria ubi tandem per filum subnixum est. file rubor. Haec una regio notae est in qua technice omnes stamina operariorum eandem seram obstruere possunt dum quiddam memoriam explere conatur.

Connection pertractatio

Ut supra breviter disputatum est, omnes stamina operante audientes omnes sine ulla incunctatione auscultant. Ita usus est acinum lepide ut bases receptae ad stamina mittat. nuclei moderni fere valde boni in hoc sunt, features ut input/output (IO) utuntur prioritate boosting ut filum opere impleant antequam incipiant aliis stamina uti quae etiam in eadem nervum audiunt, et etiam robin rotundo non utentes densis (Spinlock) ad processum singulis precibus.
Semel acceptatur nexus in filo laborantis, numquam hoc filum relinquit. Omnis ulterior nexus processus in operante filo totum tractatur, inclusa agendi ratione aliqua.

Plures hic momentis consectaria habet:

  • Omnes connexiones lacus Legati operanti filo deputantur. Itaque, cum HTTP/2 connexionem piscinae solum unum nexum ad unumquemque agmen adverso flumine uno tempore efficiunt, si quattuor stamina laborata sunt, quattuor HTTP/2 nexus per flumen exercitum in statu stabili erunt.
  • Causa internuntius hoc modo operatur est quia omnia in uno operante custodiendo omnia fere codice sine interclusione et quasi filo uno scribi possunt. Quae res efficit ut facile multum codicem et squamas incredibiliter ad scribendas paene infinitos stamina operantium numero efficiat.
  • Sed consectetur takeaways unum est quod ex memoria lacus et nexus efficientiae notio magni momenti est in actu configurare; --concurrency. Plus stamina laborantium quam necessaria habens memoriam dissipabit, nexus otiosiores creabit, ac rate nexus collationis minuet. In Lyft, legatus noster vascula sidecara currit valde infima concurrentia, ita ut effectus durius respondeat servitiis qui proxime sedent. Internuntius curritur ut procuratorem ore tantum ad maximum concurrendum.

Quid est non-obturans?

Nomen "non-obstructionis" aliquoties in tantum adhibitum est cum tractans quomodo principalia et operariorum fila operantur. Totum codicem scribitur supposito quod nihil usquam impeditur. Sed hoc non est omnino verum (quod non est omnino verum?).

Legatus varios processus longos cincinni utitur:

  • De quibus, cum accessum ad acta scribo, omnes operariorum stamina eandem seram acquirunt antequam in- tigillum memoriae quiddam impleatur. Sera tenendi tempus nimis humilis esse debet, sed in alto concursu et alto throughput certari potest seris.
  • Legatus systemate implicato utitur ad tractandum statisticum localem ad sequelam. Hic locus separati erit. Breviter tamen commemorabo, ut pars filorum processus statistica localiter, interdum necesse est seram in media "stats copia" acquirere. Haec densis ut nusquam requiri potest.
  • Praecipuum filum periodice opus est ut cum filis operariis componatur. Hoc fit per "divulgare" e filo principali ad stamina laborantium, et interdum ab operariorum staminibus ad principale stamina reducta. Mittens seram requirit ut nuntius divulgatus ad ulteriorem traditionem patefieri possit. Hi crines numquam serio conflictati sunt, sed adhuc technice impediri possunt.
  • Cum Internuntius stipes scribens ad systema erroris amnis (error vexillum), seram in totum processum acquirit. In genere, localis logings Legati ex aspectu effectus atrox censetur, ideo non multum attentum est ad eam emendandam.
  • Paucae aliae sunt temere crines, at nullae ex iis criticae exercentur nec unquam impugnandae sunt.

Post loci repono

Propter viam Legatus officia principalis sequelae ab officiis opificis sequelae separat, necessitas est ut processus multiplex in filo principali fieri possit et deinde unicuique operanti filo modo valde concurrente provideatur. Hanc sectionem Envoy Thread Localem (TLS) describit. In sequenti sectione describemus quomodo botrum disponere debeat.
[Translatio] Legatus threading exemplar

Ut iam dictum est, principale filum tractat paene omnem administrationem ac gubernationem plane functionality in processu Legati. Imperium planum hic paulum cumulatur, sed cum ipsum intra ipsum processum Legatum inspicias et compara ad procuret quod stamina faciente, sensum facit. Regula generalis est ut processus filorum principale aliquod opus faciat, et tunc necesse est ut unumquodque opus operariorum stamina renovare secundum eventum illius operis. hoc in casu, operarius linum non indiget ut seram in singulis accessibus acquirat.

Legati TLS (Repositorium loci) systematis opera ut sequitur:

  • Codex currens in filo principali TLS socors ad totum processum collocare potest. Etsi hoc abstractum est, in usu est index in vectorem, praebens O (1) aditum.
  • Summa filum data arbitraria in suam rimam installare potest. Cum hoc factum est, data unicuique operanti sequela divulgata est ut eventus normales eventus loop.
  • Stamina operariorum e socors eorum TLS legere possunt et quaelibet stamina localia notitias ibi praesto recuperare.

Quamvis paradigma valde simplex et incredibiliter potens, valde similis est conceptui RCU (Read-Copy-Update) interclusionis. Essentialiter, operarius stamina numquam videre aliquas notitias mutationes in foraminibus TLS dum opus currit. Mutatio non nisi per reliquum tempus inter operis certe occurrit.

Utitur hoc legatus duobus modis.

  • Si varias notitias reponendas in unoquoque operante stamina, data accessi sine ulla interclusione possunt.
  • Servando monstratorem communem datam globalem in lege solum modum in singulis filo laborantis. Ita unumquodque operarium linum habet referentiae notae comitem quae minui non potest dum opus currit. Solum cum omnes operarios mitescere et imponere novas notitias communes novas notitias antiquas delebunt. Hoc idem est cum RCU.

Botri update threading

In hac sectione describemus quomodo TLS (Repositorium locale filum) ad botrum disponendum adhibetur. Botri procuratio xDS API et/vel DNS processui includit, necnon sanitatis recognitionem.
[Translatio] Legatus threading exemplar

Botri fluxus administratione includit partes et gradus sequentes:

  1. Procurator Cluster est componentis intra Legatum qui omnes notas botri susum administrat, Cluster Service Inventionis (CDS) API, Servitium Secretum Inventionis (SDS) et Munus Inventionis Endpoint (EDS) APIs, DNS, et externae activae compescit, sanitatis recognitionem. Auctor est creare sententiam "tandem constantem" uniuscuiusque botri fluminis, quod includit inventas exercituum statum necnon sanitatis.
  2. Sanitas tessellatis activam valetudinem represserat et statum sanitatis mutationes in botro procuratori tradit.
  3. CDS (Cluster Discovery Service) / SDS (Secreta Inventionis Service) / EDS (Endpoint Discovery Service) / DNS fiunt ad designandum botrum membership. Res publica in botrum procuratori reddita est.
  4. Quisque operarius filum continuo ansam eventus exequitur.
  5. Cum procurator botri statum botri mutatum esse decernit, novum solum legitimum snapshots status botri creat eamque ad unumquemque filum laborantis mittit.
  6. Proximo quieto tempore, operarius linum renovabit snapshot in slot partita TLS.
  7. Tempore I/O eventus qui exercitum ad stateram onerare putatur determinare, onus librarius postulabit socors TLS (Locus repono) socors ad informationem de exercitu habere. Non eget comis. Nota etiam quod TLS eventa renovatio felis etiam potest ut libratores onerent et alia componentia caches, structuras datas computare possint, etc. Haec est extra ambitum huius stationis, sed variis in locis in codice usurpatur.

Utens suprascripto processu, Legatus omnem petitionem sine interclusione (praeterquam prius dictum est) procedere potest. Praeter intricata ipsius codicis TLS, maxime codicis non opus est intellegere quomodo multiplices operae multiplices bracteae singulae scribi possint. Ex quo efficitur, codicem plerosque facilius scribere praeter Superiorem.

Aliae subsystema quae TLS utuntur

TLS (Repositorium loci) et RCU (Read Exemplar Update) late in Internuntio usi sunt.

Exempla usus est:

  • Mechanismus ad mutationem functionality per executionem: Index hodiernae functionis capacitatis in filo principali computatur. Quisque stamen operarius tunc datus est solum snapshot usus RCU semantics legebat.
  • Repositoque itinere mensas: Mensae itineris a RDS (Route Inventionis Service), tabulae viae in filo principali factae sunt. Legi solum snapshot postea praebebitur unicuique operanti filo utens RCU (Read Exemplar Update) semantics. Hoc facit tabulae meatus mutabiles atomice efficientes.
  • HTTP header caching: Sicut evenit, HTTP capitis computandi pro singulis petitionibus (dum currit ~25K+ RPS per core) satis carus est. Internuntius centraliter computat caput quodlibet dimidium circiter alterum et unicuique operanti per TLS et RCU providet.

Sunt alii casus, sed praecedentia exempla praebent bonam intelligentiam quae TLS ponitur.

Nota perficientur scandala

Dum Legatus satis altiore munere fungitur, nonnullae notabiles areae sunt quae attentionem egent cum concursu altissimo et throughput;

  • Sicut in hoc articulo descripsimus, nunc omnes stamina operariorum seram habent cum scribendo ad quiddam memoriae log accessu. Ad magnum concursum et altum throughput, necesse est ut stipites accessum struere pro quolibet operante stamina inpensa extra ordinem traditionis scribentis ad tabulam ultimam. Vel, stipes separatum accessum ad unumquemque artificem filo creare potes.
  • Quamquam statisticae valde optimized, in maximo concursu ac throughput, verisimile erit contentio atomica in singulis statisticis. Solutio huius problematis calculis per fila laborantis cum repositione periodica calculis centralibus. Hoc in post- subsequente dicetur.
  • Hodierna architectura bene non faciet si Legatus in missione explicatur ubi paucissimae nexus sunt quae significant opes processus exigunt. Non est cautum quod nexus aequaliter inter fila laborantium distribuentur. Hoc solvi potest per nexum exsequendam operantis aequationem, quae permutationem nexuum inter fila laborantis patietur.

conclusio

Exemplar filis Legati ordinatur ad faciliorem programmandi et molem parallelismum in sumptu potentiae memoriae prodigus et nexus nisi recte conformatus. Exemplar hoc permittit ut optime in maximis comitibus ac throughput conficere.
Sicut breviter commemoravi in ​​Twitter, consilium potest etiam currere super acervum plenum usoris modum retis ut DPDK (Data Plani Kit Development), quod efficere potest in ministris conventionalibus pertractandis decies petitionum plenarum L7 secundo cum processu. Multum interest videre quid in his paucis annis aedificatum fuerit.
Unum extremum velox commentarium: toties quaesivi cur C++ pro Internuntio vellemus. Causa restat quod adhuc solum late usus est linguae gradus industrialis in qua architectura hoc postum descriptum aedificari potest. C++ certum non est omnibus vel etiam multis inceptis aptum, sed ad certos casus usus est instrumentum unum ad opus faciendum.

Nexus ad codicem

Vincula ad fasciculos cum interfaces et capitis exsecutiones in hoc poste discussas:

Source: www.habr.com