Retis onus librarius architecturae in Yandex.Cloud

Retis onus librarius architecturae in Yandex.Cloud
Salve, ego Sergey Elantsev, ego develop network onus librari in Yandex.Cloud. Antea duxi progressionem L7 librari Yandex portal - collegae iocum ut quaecumque facio, evenit ut librator fiat. Lectores narrabo Habr quomodo onus in suggestu nubilo disponat, quod videmus sicut instrumentum ideale ad hoc propositum assequendum, et quomodo ad hoc instrumentum edificandum movemur.

Primum aliqua verba introducamus;

  • VIP (Virtual IP) - librarius IP oratio
  • Servo, backend, exempli gratia - machina virtualis currit applicatio
  • RIP (Real IP) - servo IP oratio
  • Healthcheck - promptum reprehendo servo
  • Availability Zona, AZ - separatim infrastructure in a centre data
  • Unio diversorum AZs

Onerati libratores tria opera principalia solvunt: ipsi aequilibrant, emendant culpam tolerantiae servitii et eius scalam simpliciorem reddunt. Culpa tolerantia conservatur per administrationem automatis commercii: monitores librarius statum applicationis et instantias excludit a conpensatione, quae ad vivam reprimendam non transeunt. Scala providetur ut pondera per instantias aequaliter distribuantur, necnon adaequationis indicem instantiarum in musca. Si aequiparatio satis uniformis non est, nonnullae instantiae onus accipient quod modum capacitatis excedit, et servitium minus certum fiet.

Librarius onus saepe per protocollum tabulatum ex exemplo OSI in quo incurrit indicatur. Cloud Balancer operatur in gradu TCP, qui respondet quartae tabulae L4.

Transeamus ad speculationem architecturae librariae nubis. Gradatim augebimus gradum singulorum. Librarios partes in tres classes dividimus. Classis plane config responsabilis est pro commercio usuario et scopum statum systematis reponit. Imperium planum hodiernam systematis statum reponit et systemata administrat ex classium planorum notitia, quae directe responsales sunt ut negotiationes a clientibus tuis instantiis tradant.

Data planum

Negotiatio terminatur in artibus carum finitimis iter itineris appellatur. Ad tolerantiam culpam augendam, plures tales cogitationes simul in una Mauris interdum operantur. Deinde negotiatio ad librarios pergit, qui nuntios IP quemlibet nuntiant omnibus AZs per BGP clientibus. 

Retis onus librarius architecturae in Yandex.Cloud

Negotiatio per ECMP transmittitur - hoc consilium fusum est secundum quod plures possunt esse itinera ad scopum aeque bona (in nostro casu, scopo destinatio IP oratio) et per quemlibet eorum fasciculi mitti possunt. Operam etiam adiuvamus in compluribus partibus disponibilitate secundum hoc schema: in unaquaque zona electronicam praebemus, negotiatio ad proximam vadit et fines eius non excedit. Postea in poste fusius quaeramus quid ad commercium acciderit.

Mando planum

 
Clavis pars plani config est API, per quam praecipuae operationes cum libratoribus fiunt: creando, delendo, mutando instantiarum compositionem, obtinendo sanos eventus, etc. Ex altera parte, hoc est CAUUM API, et in e. alterum, nos in Cloud saepissime compage gRPC utimur, ita "translate" REQUIEM ad gRPC, tum tantum gRPC utimur. Quaevis petitio ad creationem ducit operis seriei asynchroni idempotentissimi quae in communi piscina Yandex.Cloud opifices efficiuntur. Negotia ita scripta sunt ut quovis tempore suspendi possint ac deinde restarted. Hoc facit scalam, iterabilem et logificationem operationum.

Retis onus librarius architecturae in Yandex.Cloud

Quam ob rem, munus ab API petendum est officium moderatoris aequilibrii, quod in Go scriptum est. Librarios addere et removere potest, compositionem retro et occasus mutare. 

Retis onus librarius architecturae in Yandex.Cloud

Ministerium suum statum dat in Yandex Database, database distributum, quod mox uti poteris. In Yandex.Cloud, ut iam dixitcaniculae notio cibum adhibet: si officia ipsi utimur, tum etiam clientes nostri illis uti felices erunt. Yandex Database talis notionis exemplum est exsecutionis. Data omnia nostra in YDB recondimus, nec cogitare debemus de datorum conservatione et scalis: problemata haec nobis solvuntur, ut servitium datorum utimur.

Redeamus ad libratorem moderatoris. Eius munus est informationes de librario servare et negotium mittere ut promptitudinem machinae virtualis ad reprimendam reprimendam ad moderatoris sanitariae.

Healthcheck controller

Petitiones accipit ut normas reprimendo mutandas, eas in YDB salvet, officia inter nodos sanandos distribuit et eventus aggregat, qui tunc ad datorum servata sunt et ad moderatoris onerariae missum. Rursus rogat ut compositionem botri in plano datae cum onere-nodoro mutandi, de qua infra disseram.

Retis onus librarius architecturae in Yandex.Cloud

Plus fama de healthchecks. In plures classes dividi possunt. Audits diversae prosperitatis indiciis. TCP coercet necesse est ut nexum intra certum temporis spatium utiliter instituat. HTTP compescit et nexum prosperum require et responsionem cum 200 status codice.

Item sistit in genere actionis differunt - sunt activa et passiva. Passivum inhibet simpliciter monitorem quae cum commercii evenit sine ullo speciali actu. Hoc non valde bene operatur in L4 quia pendet ex logica protocolla superioris gradus: in L4 nulla est notitia quousque operatio sumpsit vel utrum perfectio nexus esset bona vel mala. Active compescit librarium postulare ut petitiones mittat cuilibet exemplo servitori.

Maxime libratores onus exercent vitamque cohibet. In Cloud decrevimus has partes systematis ad augendam scalam dividendam. Hic aditus dabit nobis numerum librariorum augere, servato numero petitionum sanitatis ad servitium. SCUTULATUM a nodis sanitatis separatis peraguntur, per quas scuta pressione intrita et replicantur. Ab uno exercitu, ut desit, cohibere non potes. Tum statum instantiarum tardavit. Compesculationes in quibusvis instantiis e tribus saltem nodis sanitatis perficimus. Nos proposita compescendi nodi inter nodi proposita algorithmos cohaerentes hashing.

Retis onus librarius architecturae in Yandex.Cloud

Separans conpensationem et sanitatis difficultates ducere potest. Si nodi sanitatis postulare instantiam postulant, praetereunte librario (quod nunquid mercaturae non est), tunc res nova oritur: subsidium vivere videtur, at negotiatio ad eam non pertinget. Hanc quaestionem solvimus hoc modo: praestamus ut per librarios mercaturam sanitatis incipiamus. Aliis verbis, ratio movendi fasciculos cum commercio a clientibus et a sanitariis minimum differt: in utroque casu, fasciculi libratores attingent, qui eas facultates scopo tradent.

Differentia est quod clientes rogant VIP, dum sanos rogant unicuique RIP. An interesting quaestio hic oritur: usoribus nostris facultatem praebemus facultates creandi in retiacula cana IP. Fingamus duas diversas nubes possessores qui post librarios officia sua absconderunt. Uterque eorum facultates in 10.0.0.1/24 subnet, cum inscriptionibus iisdem. Vos postulo ut aliquo modo eas distinguere possitis, et hic debes intendere in structuram Yandex.Cloud virtualis retis. Melius est invenire plura singula in de video: nubes eventu, interest nobis nunc ipsum esse multi-strati et cuniculos habet quod subnet id distingui potest.

Nodorum sanitatis librariorum contactus utentes sic dictas quasi-IPv6 inscriptiones. Inscriptio quasi-inscriptio est IPv6 cum inscriptione IPv4 et subnet id intra infixa usoris. Negotiatio libratorem attingit, quae ex eo extrahit IPv4 resource inscriptio, IPv6 cum IPv4 reponit et fasciculum mittit ad network usoris.

Negotiatio contraria eodem modo cedit: librarius videt destinationem retis grisei esse ab sanitatis checkers, et converti IPv4 ad IPv6.

VPP - cordis notitia planum

Librarius inducitur usura Vector Packet Processus (VPP) technologiae, compages a Cisco ad batch processui negotiationis retis. In casu nostro, compage operatur in fabrica administrationis retis spatium usoris bibliothecam - Data Plane Development Ornamentum (DPDK). Hoc fasciculum processus efficiendi praebet: multo pauciores interpellationes occurrunt in nucleo, et nullae sunt contextus permutationes inter spatium nuclei et spatium usoris. 

VPP etiam ulterius accedit et plus etiam exprimit e systematis fasciculis in batches componendo. Quaestus effectus provenit ex usu accessionum in hodiernis processoribus infestantibus. Ambae cellae datae sunt (fasciculi discursum in "vectors", notitia inter se proxima) et cella instructionis: in VPP, processus fasciculus graphiam sequitur, cuius nodi insunt munera quae idem opus faciunt.

Exempli causa, processus IP fasciculorum in VPP occurrit hoc ordine: primo, fasciculi capitis in nodo parsing, et deinde mittuntur ad nodo, qui in tabulas fusas longius promovet.

Paulo Hardcore. Auctores VPP compromissationes in usu cellarum processuum non ferunt, tam typicam codicem ad vectorem fasciculorum dispensando vectorizationis manualem continet: est fascia processus processus in quo condicio sicut "quatuor facis in queue" discursum habemus; idem pro duobus, tum - pro uno. Instructiones Praefetchae saepe datas in cella onerarias adhibentur ad accessum ad accelerandum in subsequentibus iterationibus.

n_left_from = frame->n_vectors;
while (n_left_from > 0)
{
    vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next);
    // ...
    while (n_left_from >= 4 && n_left_to_next >= 2)
    {
        // processing multiple packets at once
        u32 next0 = SAMPLE_NEXT_INTERFACE_OUTPUT;
        u32 next1 = SAMPLE_NEXT_INTERFACE_OUTPUT;
        // ...
        /* Prefetch next iteration. */
        {
            vlib_buffer_t *p2, *p3;

            p2 = vlib_get_buffer (vm, from[2]);
            p3 = vlib_get_buffer (vm, from[3]);

            vlib_prefetch_buffer_header (p2, LOAD);
            vlib_prefetch_buffer_header (p3, LOAD);

            CLIB_PREFETCH (p2->data, CLIB_CACHE_LINE_BYTES, STORE);
            CLIB_PREFETCH (p3->data, CLIB_CACHE_LINE_BYTES, STORE);
        }
        // actually process data
        /* verify speculative enqueues, maybe switch current next frame */
        vlib_validate_buffer_enqueue_x2 (vm, node, next_index,
                to_next, n_left_to_next,
                bi0, bi1, next0, next1);
    }

    while (n_left_from > 0 && n_left_to_next > 0)
    {
        // processing packets by one
    }

    // processed batch
    vlib_put_next_frame (vm, node, next_index, n_left_to_next);
}

So, Healthchecks colloqui super IPv6 ad VPP, quod vertit in IPv4. Hoc fit nodi in graphi, quem vocamus algorithmicum NAT. Negotiatio enim vicissim (et conversio ab IPv6 ad IPv4) eadem est algorithmica nodi NAT.

Retis onus librarius architecturae in Yandex.Cloud

Negotiatio directa ex clientibus librariorum clientibus per nodos graphatos percurrit, quae ipsum conpensationem faciunt. 

Retis onus librarius architecturae in Yandex.Cloud

Prima nodi sessiones glutinosa est. Hoc addit Nullam 5-tuple ad constituendas sessiones. 5-tuple inscriptio et portum clientis includit, unde notitia transmittitur, oratio et portus subsidiorum ad mercaturam accipiendam, necnon protocollum retis. 

The 5-tuple Nullam adiuvat ut minus supputationem in subsequenti nodo hausente cohaerentem praestare nos adiuvet, ac melius indicem subsidiorum tractandi post libratorem mutat. Cum fasciculus pro quo nulla sessio in librario pervenerit, ad nodi ligaturam constantem mittitur. Hoc est ubi librans fit utens cohaerenter hashing: opum eligimus ex indice facultatum "vive". Deinde, fasciculi ad nodi NAT mittuntur, quae actu locum destinatum inscriptionem reponit et checkssum calculat. Ut videre potes, regulas VPP sequimur similes, similes calculis aggregandi ad efficientiam caches processus processus augendam.

Congruunt hashing

Cur id eligimus et quid est etiam? Primum, praecedens negotium consideremus - subsidia ex indice eligendo. 

Retis onus librarius architecturae in Yandex.Cloud

Hashing inconstanter, fasciculum advenientis computatur, et subsidium e indice eligitur per numerum facultatum hoc Nullam reliquae dividendae. Quamdiu catalogus immutatus manet, schema hoc bene operatur: semper cum eadem 5-tupla ad eandem instanciam mittimus. Si, exempli gratia, aliqua subsidia respondere valetudini obstitit, tum notabilis pars emissarum electionem mutabit. Huius TCP nexus frangentur: fasciculus qui antea ad instantiam A pervenerit, instantiam B attingere incipiet, quae cum sessione huius fasciculi non nota est.

Hashing Congruenter solvit problema descriptum. Facillime modus hanc notionem explicandi haec est: finge te anulum habere cui opes detrahes (exempli gratia, per IP:portum distribuis). Subsidium eligendo per angulum rotam versat, quae fasciculi Nullam determinatur.

Retis onus librarius architecturae in Yandex.Cloud

Haec minimizet discrimen mercaturae cum compositione opum mutat. Subsidia delendi modo afficit partem anuli constantis hausentis in quo subsidia sita erat. Subsidium addit etiam distributionem mutat, sed nodi sessiones tenaces habemus, quae nos non sinit ad novas facultates sessiones iam constitutas flectere.

Inspeximus ea quae fiunt ad dirigendum commercium inter librarios et facultates. Nunc ad mercaturam reditus inspiciamus. Sequitur eadem ratio, quam reprimendam mercaturam - per algorithmicam NAT, id est, per transpositionem NAT 44 ad negotiationem clientis et per NAT 46 ad sanitatis negotiationis. Adhaeremus nostro consilio: sanitatum commercium ac verum usorum commercium coniungimus.

Loadbalancer-node and convenerunt components

Compositio librariorum et opum in VPP relatum est ab officio locali - oneratis-nodi. Subscribit rerum rivo ab onerebri-coratore et machinari potest differentiam inter statum currentem et statum scopo acceptum a moderatore. Systema clausum obtinemus: eventus ab API ad libratorem moderatorem veniunt, qui munera ad reprimendam sanitatis moderatorem ad reprimendam facultatum "vivitatem" tribuit. Quod vicissim officia nodi notae notificatae assignat et consequitur eventus, post quem eos ad libratorem remittit moderatorem. Loadbalancer-node subscribit eventis a moderatoris et mutat statum VPP. In tali systemate, unumquodque ministerium novit tantum quid sit necessarium circa officia proxima. Numerus nexuum limitatur et facultatem habemus operandi et alia segmenta independenter scandere.

Retis onus librarius architecturae in Yandex.Cloud

Quae quaestiones vitandae sunt?

Omnia officia nostra in plano dicionis scripta sunt in Go et habent bonas scalas et fidelitates notas. Ite multas bibliothecas apertas fontem habet ad systemata edificationem distribuendam. GRPC active utimur, omnia components aperta continent fontem exsecutionem servitii inventionis - officia monitoria alterius effectus, compositionem dynamice mutare possunt, et hoc cum GRPC conpensatione conexi sumus. Ad metricam solutionem fonte aperto etiam utimur. In plano notitiarum honestas effectus et subsidia magna habuimus: factum esse difficillimum est ut statio conveniret qua in VPP perficiendo niti possemus, potius quam schedam retis ferream.

Et quaestionum ac solutionum

Quod non tam bene opus? Ite administratione automatic memoriam habet, sed memoria effluo adhuc fiet. Facillima via cum illis agere est goroutines currere et eas terminare memento. Take away: Watch tuum programmatis memoriam consummatio. Saepe numerus goroutines bonus indicator est. Plus est in hac fabula: in Ite facile est notitias runtimes - memoriae tabes, numerus goroutines currentium, et plura alia parametri.

Item, Ite non potest optima electio ad functiones probationes. Sunt satis verbosi, et norma "omnia in CI in massam currendi" non satis idonea est. Ita est, ut functiones probationes plus adiuvent-possent ac causant veras vicissitudines. Propter hoc, experimenta deesse possunt quia CPU cum probat unitate occupatus est. Conclusio: Si fieri potest, "gravis" seorsim probat ab unitate probat. 

Architectura microservice eventus magis implicatior est quam monolithus: stipites in justo diversis machinis colligendis non satis commodum est. Conclusio: si parvas facis, statim de typum cogita.

Consilia nostra

Libratorem internum, libratorem IPv6, scriptorum Kubernetarum subsidium adiiciemus, opera nostra conquassabit (modo modo sanitatis-nodi et sanitatis-ctrl sharded), novas sanitatum formas adde, ac etiam aggregationem callidum compescit deducendi. Consideramus facultatem faciendi officia nostra etiam magis independentia - ut non directe inter se communicent, sed verbo queue utendo. SQS-compatible religio nuper in Cloud apparuit Yandex Nuntius Queue.

Nuper publica emissio Yandex Load Balancer facta est. Explore Litterarum ad obsequium, librarios modo opportuno administrare et augere culpae tolerantiam inceptis tuis!

Source: www.habr.com