Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ebe data ọgbara ọhụrụ nwere ọtụtụ narị ngwaọrụ arụ ọrụ arụnyere, nke ụdị nlebanya dị iche iche kpuchie. Mana ọbụlagodi ezigbo injinia nwere nleba anya zuru oke n'aka ga-enwe ike ịzaghachi nke ọma maka ọdịda netwọk n'ime nkeji ole na ole. N'ime akụkọ na ọgbakọ na-esote Hop 2020, ewepụtara m usoro nhazi netwọkụ DC, nke nwere njirimara pụrụ iche - ebe data na-agwọ onwe ya na milliseconds. Kpọmkwem nke ọma, onye injinia ahụ ji nwayọọ dozie nsogbu ahụ, ebe ọrụ anaghị achọpụta ya.

- Iji malite, m ga-enye mmeghe zuru oke maka ndị nwere ike ọ gaghị ama usoro nke DC nke oge a.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Maka ọtụtụ ndị injinia netwọkụ, netwọk data etiti na-amalite, n'ezie, ya na ToR, yana ngbanwe na rack. ToR na-enwekarị ụdị njikọ abụọ. Ndị obere na-aga na sava, ndị ọzọ - enwere N ugboro karịa n'ime ha - na-aga na spines nke ọkwa mbụ, ya bụ, na elu ya. A na-ewerekarị uplinks hà nhata, na okporo ụzọ dị n'etiti uplinks bụ nha nha dabere na hash sitere na 5-tuple, nke gụnyere proto, src_ip, dst_ip, src_port, dst_port. Ọ dịghị ihe ijuanya ebe a.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Na-esote, kedu ihe nhazi atụmatụ atụmatụ dị? A naghị ejikọta spines nke ọkwa mbụ na ibe ya, mana ejikọtara ya site na superspines. Akwụkwọ ozi X ga-abụ ọrụ maka superspines; ọ fọrọ nke nta ka ọ dị ka njikọ obe.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ma o doro anya na, n'aka nke ọzọ, a na-ejikọta tori na spines niile nke ọkwa mbụ. Kedu ihe dị mkpa na foto a? Ọ bụrụ na anyị nwere mmekọrịta n'ime rack, mgbe ahụ mmekọrịta, n'ezie, na-aga site na ToR. Ọ bụrụ na mmekọrịta ahụ na-eme n'ime modul, mgbe ahụ, mmekọrịta ahụ na-eme site na spines nke mbụ. Ọ bụrụ na mmekọrịta ahụ bụ intermodular - dị ka ebe a, ToR 1 na ToR 2 - mgbe ahụ, mmekọrịta ahụ ga-aga site na spines nke ma ọkwa mbụ na nke abụọ.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Na tiori, ihe owuwu dị otú ahụ dị mfe scalable. Ọ bụrụ na anyị nwere ikike ọdụ ụgbọ mmiri, ohere ohere na etiti data na eriri etinyegoro, mgbe ahụ ọnụ ọgụgụ nke ụzọ nwere ike ịba ụba mgbe niile, si otú ahụ na-abawanye ikike nke usoro ahụ dum. Nke a dị nnọọ mfe ime na akwụkwọ. Ọ ga-adị ka nke a na ndụ. Mana akụkọ nke taa abụghị maka nke ahụ.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Achọrọ m ka a bịaruo nkwubi okwu ziri ezi. Anyị nwere ọtụtụ ụzọ n'ime data center. Ha nọọrọ onwe ha n'ọnọdụ. Otu ụzọ n'ime ebe data ga-ekwe omume naanị n'ime ToR. N'ime modul, anyị nwere ọnụ ọgụgụ nke ụzọ hà nhata ọnụ ọgụgụ nke ụzọ. Ọnụ ọgụgụ nke ụzọ n'etiti modul hà nhata ngwaahịa nke ọnụ ọgụgụ ụgbọ elu na ọnụ ọgụgụ nke superspines na ụgbọ elu ọ bụla. Iji mee ka ọ dokwuo anya, iji nweta nghọta nke ọnụ ọgụgụ ahụ, m ga-enye ọnụọgụ ndị dị irè maka otu n'ime ebe data Yandex.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Enwere ụgbọ elu asatọ, ụgbọ elu ọ bụla nwere 32 superspines. N'ihi ya, ọ na-apụta na e nwere ụzọ asatọ n'ime modul, na mmekọrịta intermodule enweelarị 256 n'ime ha.

Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ya bụ, ọ bụrụ na anyị na-emepe akwụkwọ Cookbook, na-agbalị ịmụta ka esi ewuo ebe data na-anabata mmejọ nke na-agwọ onwe ha, mgbe ahụ, nhazi nhazi bụ nhọrọ ziri ezi. Ọ na-edozi nsogbu scaling, na tiori ọ dị mfe. Enwere ọtụtụ ụzọ kwụụrụ onwe ya. Ajụjụ a ka dị: kedu ka ihe owuwu dị otú ahụ si lanarị ọdịda? Enwere ọdịda dị iche iche. Anyị ga-atụlekwa nke a ugbu a.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ka otu n'ime superspines anyị "na-arịa ọrịa". N'ebe a, m laghachiri n'ụlọ ọrụ ụgbọ elu abụọ. Anyị ga-ejigide ihe ndị a dị ka ọmụmaatụ n'ihi na ọ ga-adị mfe ịhụ ihe na-eme na obere akụkụ na-akpụ akpụ. Ka X11 rịa ọrịa. Kedu ka nke a ga-esi metụta ọrụ ndị bi n'ime ebe data? Ọtụtụ na-adabere n'otú ọdịda ahụ dị n'ezie.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ọ bụrụ na ọdịda ahụ dị mma, a na-ejide ya na ọkwa akpaaka nke otu BFD ahụ, akpaaka na-eji obi ụtọ na-etinye nkwonkwo nsogbu ma kewapụ nsogbu ahụ, mgbe ahụ ihe niile dị mma. Anyị nwere ọtụtụ ụzọ, a na-emegharị okporo ụzọ ozugbo gaa n'ụzọ ọzọ, ọrụ agaghị achọpụta ihe ọ bụla. Nke a bụ ezigbo edemede.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ihe dị njọ bụ ma ọ bụrụ na anyị nwere mfu mgbe niile, na akpaaka anaghị achọpụta nsogbu ahụ. Iji ghọta ka nke a si emetụta ngwa, anyị ga-etinye ntakịrị oge na-ekwurịta ka TCP si arụ ọrụ.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Enwere m olileanya na agaghị m eju onye ọ bụla nwere ozi a: TCP bụ usoro nkwenye nnyefe. Nke ahụ bụ, n'okwu dị mfe, onye na-ezigara ya na-eziga ngwugwu abụọ wee nata mkpọkọ ọnụ na ha: "Enwetara m ngwugwu abụọ."
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Mgbe nke ahụ gasịrị, ọ ga-eziga ngwugwu abụọ ọzọ, ọnọdụ ahụ ga-emeghachikwa. Ana m arịọ mgbaghara n'ihu maka ime ka ọ dị mfe. Ọnọdụ a ziri ezi ma ọ bụrụ na windo (ọnụọgụ nke ngwugwu na ụgbọ elu) bụ abụọ. N'ezie, na n'ozuzu ikpe nke a bụchaghị ikpe. Mana nha mpio anaghị emetụta ọnọdụ mbugharị ngwugwu.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Kedu ihe ga - eme ma ọ bụrụ na anyị tufuru ngwugwu 3? N'okwu a, onye nnata ga-anata ngwugwu 1, 2 na 4. Ọ ga-agwakwa onye zitere ya n'ụzọ doro anya site na iji nhọrọ SACK: "Ị maara, atọ bịarutere, mana etiti ahụ furu efu." Ọ na-ekwu, "Ack 2, SACK 4."
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

N'oge a, onye na-ezigara na-enweghị nsogbu ọ bụla na-emegharị kpọmkwem ngwugwu ahụ furu efu.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ma ọ bụrụ na ngwugwu ikpeazụ na windo furu efu, ọnọdụ ahụ ga-adị nnọọ iche.

Onye nnata na-enweta ngwugwu atọ mbụ na nke mbụ na-amalite ichere. Ekele maka ụfọdụ nkwalite na Linux kernel's TCP stack, ọ ga-echere ngwugwu ejikọtara ma ọ bụrụ na ọkọlọtọ gosiri n'ụzọ doro anya na ọ bụ ngwugwu ikpeazụ ma ọ bụ ihe yiri ya. Ọ ga-echere ruo mgbe oge ACK egbula oge kubie ume wee zipu nkwenye na ngwugwu atọ mbụ. Ma ugbu a onye ezipụ ga-echere. Ọ maghị ma ngwugwu nke anọ efuola ma ọ bụ na-achọ ịbịarute. Na ka ọ ghara ibufe netwọkụ ahụ, ọ ga-anwa ichere maka ngosipụta doro anya na ngwugwu ahụ efunahụla, ma ọ bụ ka oge RTO ga-agwụ.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Kedu ihe bụ ngwụcha RTO? Nke a bụ kacha nke RTT gbakọrọ site na nchịkọta TCP na ụfọdụ na-adịgide adịgide. Kedu ụdị mgbe niile nke a bụ, anyị ga-atụle ugbu a.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Mana ihe dị mkpa bụ na ọ bụrụ na anyị enwekwaghị ihu ọma ọzọ na ngwugwu nke anọ furu efu ọzọ, mgbe ahụ RTO na-abawanye. Ya bụ, mbọ ọ bụla na-enweghi nke ọma pụtara ịgbatị oge ahụ ugboro abụọ.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ugbu a, ka anyị hụ ihe ntọala a hà nhata. Site na ndabara, RTO kacha nta bụ 200 ms. Nke a bụ RTO kacha nta maka ngwugwu data. Maka ngwugwu SYN ọ dị iche, 1 sekọnd. Dị ka ị pụrụ ịhụ, ọbụna mgbalị mbụ iziga ngwugwu ga-ewe 100 ugboro ogologo karịa RTT n'ime data center.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ugbu a, ka anyị laghachi n'ọnọdụ anyị. Kedu ihe na-eme na ọrụ ahụ? Ọrụ ahụ na-amalite ịtụfu ngwugwu. Ka ọrụ ahụ nwee chi ọma n'ọnọdụ mbụ wee tufuo ihe n'etiti windo ahụ, mgbe ahụ ọ na-enweta SACK ma ziga ngwugwu ndị ahụ furu efu.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Mana ọ bụrụ na chi ọjọọ na-emeghachi onwe ya, mgbe ahụ anyị nwere RTO. Kedu ihe dị mkpa ebe a? Ee, anyị nwere ọtụtụ ụzọ na netwọk anyị. Mana okporo ụzọ TCP nke otu njikọ TCP ga-aga n'ihu na-aga n'ihu na otu nchịkọta agbajiri agbaji. Mfu ngwugwu, ma ọ bụrụhaala na X11 anwansi a nke anyị anaghị apụ n'onwe ya, anaghị eduga n'okporo ụzọ na-abanye na mpaghara na-enweghị nsogbu. Anyị na-agbalị ibunye ngwugwu ahụ site na otu ngwugwu ahụ gbajiri agbaji. Nke a na-eduga na ọdịda cascading: ebe data bụ ntọala nke ngwa mmekọrịta, na ụfọdụ njikọ TCP nke ngwa ndị a niile na-amalite imebi - n'ihi na superspine na-emetụta ngwa niile dị n'ime ebe data. Dị ka okwu na-aga: ọ bụrụ na ị naghị akpụkpọ ụkwụ ịnyịnya, ịnyịnya ahụ dara ngwọrọ; ịnyịnya gara ngwọrọ - a naghị ebupụta akụkọ ahụ; ewebataghị akụkọ ahụ - anyị meriri agha ahụ. Naanị ebe a, ọnụ ọgụgụ ahụ dị na sekọnd site na mgbe nsogbu ahụ bilitere ruo n'ókè nke mmebi nke ọrụ na-amalite inwe mmetụta. Nke a pụtara na ndị ọrụ nwere ike na-atụfu ihe ebe.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

E nwere ihe abụọ kpochapụwo ngwọta na-emeju ọ bụla ọzọ. Nke mbụ bụ ọrụ ndị na-agbalị itinye ahịhịa na-edozi nsogbu ahụ dị ka nke a: "Ka anyị tweak ihe na nchịkọta TCP. Ka anyị wepụta oge n'ọkwa ngwa ma ọ bụ oge TCP dị ogologo na nyocha ahụike nke ime." Nsogbu bụ na ndị dị otú ahụ ngwọta: a) adịghị ọnụ ma ọlị; b) A na-enyocha ya nke ọma. Nke ahụ bụ, ọ bụrụgodị na ọrụ ahụ na-ahazi nchịkọta TCP na mberede n'ụzọ na-eme ka ọ dị mma, nke mbụ, o yighị ka ọ ga-adaba na ngwa niile na ebe data niile, na nke abụọ, o yikarịrị, ọ gaghị aghọta na e mere ya. n'ụzọ ziri ezi, na ihe na-abụghị. Ya bụ, ọ na-arụ ọrụ, mana ọ na-arụ ọrụ na-adịghị mma na ọ dịghị ọnụ ọgụgụ. Ma ọ bụrụ na enwere nsogbu netwọkụ, onye ga-ata ụta? N'ezie, NOC. Kedu ihe NOC na-eme?

Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ọtụtụ ọrụ kwenyere na ọrụ NOC na-eme ihe dị ka nke a. Ma n'eziokwu, ọ bụghị naanị nke ahụ.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

NOC na atụmatụ oge gboo na-etinye aka na mmepe nke ọtụtụ usoro nlekota oru. Ndị a bụ ma igbe ojii na nyocha igbe ọcha. Banyere ihe atụ nke nleba anya nleba anya igbe ojii gwara Alexander Klimenko na ikpeazụ na-esote Hop. Site n'ụzọ, nlekota oru a na-arụ ọrụ. Ma ọbụna ezigbo nlekota oru ga-enwe oge laa. Na-emekarị nke a bụ nkeji ole na ole. Mgbe ọ gachara, ndị injinia nọ n'ọrụ chọrọ oge iji lelee ọrụ ya ugboro abụọ, dozie nsogbu ahụ wee kpochapụ ebe nsogbu ahụ. Nke ahụ bụ, n'ọnọdụ kachasị mma, ịgwọ nsogbu ahụ na-ewe nkeji 5, na nke kachasị njọ, nkeji 20, ma ọ bụrụ na ọ pụtaghị ozugbo ebe ihe efu na-eme. O doro anya na oge a niile - nkeji 5 ma ọ bụ 20 - ọrụ anyị ga-anọgide na-ata ahụhụ, nke nwere ike ọ gaghị adị mma.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Kedu ihe ga-amasị gị ịnata? Anyị nwere ọtụtụ ụzọ. Na nsogbu na-ebilite kpọmkwem n'ihi na TCP na-asọpụta na-enweghi ihu ọma na-aga n'ihu na-eji otu ụzọ ahụ. Anyị chọrọ ihe ga-enye anyị ohere iji ọtụtụ ụzọ n'ime otu njikọ TCP. Ọ ga-adị ka anyị nwere ihe ngwọta. Enwere TCP, nke a na-akpọ multipath TCP, ya bụ, TCP maka ọtụtụ ụzọ. N'ezie, e mepụtara ya maka ọrụ dị iche iche - maka smartphones nwere ọtụtụ ngwaọrụ netwọk. Iji bulie mbufe ma ọ bụ mee ọnọdụ mbụ/nkwakọba, e mepụtara usoro na-emepụta ọtụtụ eri (nnọkọ) n'ụzọ doro anya na ngwa ahụ ma na-enye gị ohere ịgbanwe n'etiti ha ma ọ bụrụ na ọdịda dara. Ma ọ bụ, dị ka m kwuru, bulie ogologo ahịrị ahụ.

Mana enwere nuance ebe a. Iji ghọta ihe ọ bụ, anyị ga-eleba anya ka esi eguzobe eri.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

A na-etinye eriri n'usoro. Ebu ụzọ tinye eri nke mbụ. A na-edozi eriri ndị na-esote site na iji kuki ekwekọrịtalarị n'ime eri ahụ. Ma ebe a bụ nsogbu.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Nsogbu bụ na ọ bụrụ na eriri nke mbụ eguzobeghị onwe ya, eriri nke abụọ na nke atọ agaghị ebilite. Ya bụ, multipath TCP anaghị edozi mfu nke ngwugwu SYN na mbido mbụ. Ma ọ bụrụ na SYN furu efu, multipath TCP na-atụgharị na TCP mgbe niile. Nke a pụtara na na a data center gburugburu ebe obibi ọ gaghị enyere anyị aka dozie nsogbu nke ọnwụ na ụlọ ọrụ mmepụta ihe na-amụta iji otutu ụzọ na omume nke ọdịda.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Gịnị nwere ike inyere anyị aka? Ụfọdụ n'ime unu echelarị site na aha ahụ na mpaghara dị mkpa na akụkọ ọzọ anyị ga-abụ ubi nkụnye eji isi mee labelụ IPv6. N'ezie, nke a bụ ubi na-apụta na v6, ọ bụghị na v4, ọ nwere 20 bits, enweela esemokwu maka ojiji ya ogologo oge. Nke a bụ ihe na-adọrọ mmasị nke ukwuu - enwere esemokwu, edozi ihe dị n'ime RFC, ma n'otu oge ahụ mmejuputa iwu pụtara na Linux kernel, nke na-edeghị ebe ọ bụla.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ana m akpọ gị oku ka gị na m gaa na nyocha ntakịrị. Ka anyị leba anya n'ihe na-eme na kernel Linux n'ime afọ ole na ole gara aga.

Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

afọ 2014. Onye injinia sitere na otu nnukwu ụlọ ọrụ a na-akwanyere ùgwù na-agbakwunye na arụmọrụ Linux kernel dabere na uru akara nrịba na hash oghere. Kedu ihe ha na-agbalị imezi ebe a? Nke a metụtara RFC 6438, nke tụlere okwu na-esonụ. N'ime ebe data, IPv4 na-etinyekarị ya na ngwugwu IPv6, n'ihi na ụlọ ọrụ ahụ n'onwe ya bụ IPv6, mana IPv4 ga-enyerịrị ya n'èzí. Ogologo oge enwere nsogbu na switches na-enweghị ike ile anya n'okpuru isi IP abụọ iji ruo TCP ma ọ bụ UDP wee chọta src_ports, dst_ports ebe ahụ. Ọ tụgharịrị na hash, ọ bụrụ na ị lelee isi okwu IP abụọ mbụ, tụgharịrị na ọ fọrọ nke nta ka ọ bụrụ nke a ga-edozi. Iji zere nke a, ka ịhazigharị okporo ụzọ a kpuchiri ekpuchi na-arụ ọrụ nke ọma, a tụrụ aro ka ịtinye hash nke ngwugwu 5-tuple na uru nke ubi akara ngosi. Ihe dị ka otu ihe ahụ ka e mere maka atụmatụ mkpuchi mkpuchi ndị ọzọ, maka UDP, maka GRE, nke ikpeazụ na-eji GRE Key field. Otu ụzọ ma ọ bụ ọzọ, ihe mgbaru ọsọ ebe a doro anya. Ma ọ dịkarịa ala n'oge ahụ, ha bara uru.

Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Na 2015, patch ọhụrụ sitere n'otu injinia a na-akwanyere ùgwù. Ọ na-adọrọ mmasị nke ukwuu. Ọ na-ekwu ihe ndị a - anyị ga-edobe hash ma ọ bụrụ na ihe omume ntụgharị na-adịghị mma. Gịnị bụ omume ntugharị na-adịghị mma? Nke a bụ RTO anyị tụlere na mbụ, ya bụ, ọnwụ nke ọdụ nke windo bụ ihe omume na-adịghị mma. N'eziokwu, ọ na-esi nnọọ ike iche na ọ bụ ya.

Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

2016, ụlọ ọrụ ọzọ a ma ama, dịkwa nnukwu. Ọ na-ekpochapụ crutches ikpeazụ wee mee ya ka hash, nke anyị mere na mbụ na-enweghị usoro, na-agbanwe ugbu a maka ntụgharị SYN ọ bụla na mgbe oge RTO gasịrị. Na n'akwụkwọ ozi a, maka oge mbụ na nke ikpeazụ, a na-ekwupụta ihe mgbaru ọsọ kachasị - iji hụ na okporo ụzọ na-efu ma ọ bụ nkwụsị ọwa nwere ike iji nwayọọ nwayọọ na-emegharị ma jiri ọtụtụ ụzọ. N'ezie, mgbe nke a gasịrị, e nwere ọtụtụ akwụkwọ, ị nwere ike ịchọta ha ngwa ngwa.

Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ọ bụ ezie na mba, ị nweghị ike, n'ihi na enwebeghị otu mbipụta na isiokwu a. Ma anyị maara!

Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ma ọ bụrụ na ị ghọtaghị nke ọma ihe e mere, m ga-agwa gị ugbu a.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Kedu ihe emere, kedu ọrụ agbakwunyere na kernel Linux? txhash na-agbanwe gaa na uru enweghị usoro mgbe mmemme RTO ọ bụla gasịrị. Nke a bụ ihe na-adịghị mma nke ịnyagharị. Hash na-adabere na txhash a, na akara ngosi na-agba ọsọ dabere na skb hash. Enwere ụfọdụ mgbako na ọrụ ebe a; enweghị ike itinye nkọwa niile n'otu slide. Ọ bụrụ na onye ọ bụla nwere mmasị, ị nwere ike ịga na koodu kernel wee lelee.

Kedu ihe dị mkpa ebe a? Uru nke mpaghara akara mgbaba na-agbanwe gaa na nọmba enweghị usoro mgbe RTO ọ bụla gachara. Kedu ka nke a si emetụta iyi TCP anyị na-adịghị mma?
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ọ bụrụ na SACK emee, ọ nweghị ihe na-agbanwe n'ihi na anyị na-agbalị iziga ngwugwu furu efu amaara. Dị nnọọ mma.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Mana n'ihe gbasara RTO, ọ bụrụhaala na anyị agbakwunyela akara nrịbama na ọrụ hash na ToR, okporo ụzọ nwere ike were ụzọ dị iche. Na ụzọ ndị ọzọ, ohere ka ọ ga-ahụ ụzọ nke ọdịda na otu ngwaọrụ adịghị emetụta.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Otu nsogbu ka dị - RTO. N'ezie, e nwere ụzọ ọzọ, ma ọtụtụ oge na-efunahụ na nke a. 200 ms dị ọtụtụ. Nke abụọ bụ nnọọ anụ ọhịa. Na mbụ, m na-ekwu maka oge nkwụsị na-ahazi ọrụ. Ya mere, nke abụọ bụ oge nkwụsịtụ, nke a na-ahazikarị site na ọrụ na ọkwa ngwa, na nke a, ọrụ ahụ ga-adịkwa mma. Ọzọkwa, m na-ekwughachi, ezigbo RTT n'ime ebe data ọgbara ọhụrụ dị gburugburu 1 millisecond.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Kedu ihe ị nwere ike ime na oge nkwụsị RTO? Oge nkwụsị, nke na-ahụ maka RTO ma ọ bụrụ na nkwụsị data ngwugwu, nwere ike ịhazi ya ngwa ngwa site na ohere onye ọrụ: enwere ike IP, na otu n'ime paramita ya nwere otu rto_min. N'iburu n'uche na RTO, n'ezie, ọ dị mkpa ka emezigharị ọ bụghị n'ụwa niile, mana maka prefixes nyere, usoro dị otú ahụ dị ka ọ ga-arụ ọrụ.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

N'ezie, na SYN_RTO ihe niile dịtụ njọ. A na-akụ ya n'otu n'otu. kernel nwere uru a kapịrị ọnụ nke 1 sekọnd, nke ahụ bụkwa ya. Ị nweghị ike iru ebe ahụ site na oghere onye ọrụ. Enwere naanị otu ụzọ.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

eBPF na-abịa napụta. N'ikwu ya n'ụzọ dị mfe, ndị a bụ obere mmemme C. Enwere ike itinye ha n'ime nko n'ebe dị iche iche na mkpochapụ nke kernel stack na TCP stack, nke ị nwere ike ịgbanwe ọtụtụ ntọala dị ukwuu. N'ozuzu, eBPF bụ usoro na-adịte aka. Kama igbutu ọtụtụ paramita sysctl ọhụrụ na ịgbasa uru IP, mmegharị ahụ na-aga n'ihu eBPF ma na-agbasawanye ọrụ ya. Iji eBPF, ị nwere ike gbanwee njikwa mkpọchi na ntọala TCP ndị ọzọ dị iche iche.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Mana ọ dị anyị mkpa na enwere ike iji ya gbanwee ụkpụrụ SYN_RTO. Ọzọkwa, e nwere ihe atụ ezigara ọha: https://elixir.bootlin.com/linux/latest/source/samples/bpf/tcp_synrto_kern.c. Gịnị ka e mere ebe a? Ihe atụ na-arụ ọrụ, ma n'onwe ya dị oke ike. N'ebe a, a na-eche na n'ime ebe data anyị na-atụnyere ibe 44 mbụ; ọ bụrụ na ha dakọtara, mgbe ahụ anyị nọ n'ime ebe data. Na nke a, anyị na-agbanwe uru oge nkwụsị SYN_RTO ka ọ bụrụ 4ms. Enwere ike ịrụ otu ọrụ ahụ nke ọma karịa. Ma ihe atụ a dị mfe na-egosi na nke a bụ a) kwere omume; b) dịtụ mfe.

Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Gịnị ka anyị maraworị? Eziokwu ahụ bụ na nhazi ụgbọ elu na-enye ohere maka ịchacha, ọ na-apụta na ọ bara uru nke ukwuu maka anyị mgbe anyị na-eme ka akara ngosi na-asọba na ToR ma nweta ikike ịkwaga gburugburu ebe nsogbu. Ụzọ kacha mma iji belata ụkpụrụ RTO na SYN-RTO bụ iji mmemme eBPF. Ajụjụ a ka dị: ọ dị mma iji akara mgbaba maka ịhazigharị? Ma enwere nuance ebe a.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Were ya na ị nwere ọrụ na netwọk gị nke na-ebi na nkedo ọ bụla. N'ụzọ dị mwute, enweghị m oge iji banye n'ime nkọwa gbasara ihe ọ bụlacast bụ, mana ọ bụ ọrụ kesara nwere sava anụ ahụ dị iche iche nke a na-enweta site na otu adreesị IP ahụ. Ma nke a bụ nsogbu nwere ike ime: ihe omume RTO nwere ike ime ọ bụghị naanị mgbe okporo ụzọ na-agafe na akwa ákwà. Ọ nwekwara ike ime na ọkwa nchekwa ToR: mgbe ihe ngosi pụtara, ọ nwere ike ime na onye ọbịa mgbe onye ọbịa tụfuru ihe. Mgbe mmemme RTO mere na ọ na-agbanwe akara mgbaba. N'okwu a, okporo ụzọ nwere ike ịga na ihe nkedo ọ bụla ọzọ. Ka anyị were na nke a bụ ihe nkedo ọ bụla nwere steeti, o nwere ọnọdụ njikọ - ọ nwere ike ịbụ L3 Balancer ma ọ bụ ọrụ ọzọ. Mgbe ahụ, nsogbu na-ebilite, n'ihi na mgbe RTO gasịrị njikọ TCP rutere na ihe nkesa, nke na-amaghị ihe ọ bụla gbasara njikọ TCP a. Ma ọ bụrụ na anyị enweghị nkesa steeti n'etiti sava ọ bụla, mgbe ahụ, a ga-ahapụ ụdị okporo ụzọ ahụ na njikọ TCP ga-agbaji.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Kedu ihe ị ga-eme ebe a? N'ime gburugburu ebe ị na-achịkwa, ebe ị na-eme ka nhazi akara mmiri na-asọ asọ, ịkwesịrị ịdekọ uru nke akara ngosi mgbe ị na-abanye na sava ọ bụla. Ụzọ kachasị mfe bụ ime nke a site na otu mmemme eBPF. Ma ebe a bụ isi ihe dị ezigbo mkpa - ihe ị ga-eme ma ọ bụrụ na ị naghị arụ ọrụ netwọk data center, mana ị bụ onye na-arụ ọrụ telecom? Nke a bụkwa nsogbu gị: malite na ụfọdụ ụdị Juniper na Arista, ha na-agụnye akara nrịbama na ọrụ hash ha na ndabara - n'eziokwu, n'ihi ihe na-edoghị m anya. Nke a nwere ike ime ka ị hapụ njikọ TCP n'aka ndị ọrụ na-agafe na netwọk gị. Ya mere, a na m akwado ịlele ntọala ndị rawụta gị ebe a.

Otu ụzọ ma ọ bụ ọzọ, ọ dị m ka anyị dị njikere ịga n'ihu na nnwale.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Mgbe anyị na-eme ka akara ngosi na-asọpụta na ToR, kwadebere onye ọrụ eBPF, nke na-ebi ugbu a na ndị ọbịa, anyị kpebiri na anyị agaghị echere nnukwu ọdịda na-esote, kama iji mee ihe mgbawa na-achịkwa. Anyị weere ToR, nke nwere ihe mgbago anọ, ma tọọ ntụpọ na otu n'ime ha. Ha chepụtara iwu wee sị - ugbu a ị na-efunahụ ngwugwu niile. Dị ka ị na-ahụ n'aka ekpe, anyị nwere nlekota nke otu-packet, nke gbadara ruo 75%, ya bụ, 25% nke ngwugwu efu. N'aka nri ka eserese ọrụ dị n'azụ ToR a. N'ikpeazụ, ndị a bụ eserese okporo ụzọ nke interfaces nwere sava n'ime rack. Dị ka ị pụrụ ịhụ, ha dara ọbụna ala. Gịnị kpatara ha ji daa ala - ọ bụghị site na 25%, mana n'ọnọdụ ụfọdụ site na ugboro 3-4? Ọ bụrụ na njikọ TCP adịghị mma, ọ na-aga n'ihu na-agbalị iru site na nkwụsịtụ gbajiri agbaji. Nke a na-akawanye njọ site na omume nke ọrụ dị n'ime DC - maka otu arịrịọ onye ọrụ, a na-emepụta arịrịọ N maka ọrụ ime, na nzaghachi ga-agakwuru onye ọrụ ma mgbe isi mmalite data niile zara, ma ọ bụ mgbe oge nkwụsị na-eme na ngwa ahụ. larịị, nke ka kwesịrị ịhazi. Ya bụ, ihe niile dị nnọọ njọ.
Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Ugbu a otu nnwale ahụ, mana ejiri uru akara mgbaba agbanyere. Dị ka ị pụrụ ịhụ, n'aka ekpe anyị batch nlekota oru dara otu 25%. Nke a bụ ihe ziri ezi, n'ihi na ọ maghị ihe ọ bụla gbasara retransmits, ọ na-eziga ngwugwu na nanị na-agụta ruru nke ọnụ ọgụgụ nke napụtara na furu efu ngwugwu.

Na aka nri bụ usoro ọrụ. Ị gaghị ahụ mmetụta nke nkwonkwo nsogbu ebe a. N'ime otu milliseconds ndị ahụ, okporo ụzọ na-esi na mpaghara nsogbu na-aga na njikọ elu atọ fọdụrụ nke nsogbu ahụ emetụtaghị. Anyị nwere netwọk na-agwọ onwe ya.

Netwọk na-agwọ onwe ya: anwansi nke Label Flow na onye nyocha gburugburu kernel Linux. Yandex akụkọ

Nke a bụ slide ikpeazụ m, oge ichikota. Ugbu a, enwere m olileanya na ị maara otu esi ewulite netwọk data etiti na-agwọ onwe ya. Ọ gaghị adị mkpa ịgafe ebe nchekwa kernel Linux wee chọọ patches pụrụ iche ebe ahụ; ị maara na akara Flow na nke a na-edozi nsogbu ahụ, mana ịkwesịrị iji nlezianya bịaruo usoro a. M na-ekwusi ike ọzọ na ọ bụrụ na ị bụ onye na-ahụ maka telecom, ị gaghị eji akara mmiri dị ka ọrụ hash, ma ọ bụghị ya, ị ga-akpaghasị nnọkọ ndị ọrụ gị.

Ndị injinia netwọkụ ga-enwerịrị mgbanwe echiche: netwọkụ na-amalite ọ bụghị na ToR, ọ bụghị site na ngwaọrụ netwọkụ, kama na onye ọbịa. Otu ihe atụ pụtara ìhè bụ ka anyị si eji eBPF ma gbanwee RTO na idozi akara ngosi na-erute ọrụ mgbasa ozi ọ bụla.

Igwe nrụbama na-erugharị ahụ dabara adaba maka ngwa ndị ọzọ n'ime ngalaba nchịkwa a na-achịkwa. Nke a nwere ike ịbụ okporo ụzọ n'etiti ebe data, ma ọ bụ ị nwere ike iji ụdị ọrụ ahụ n'ụzọ pụrụ iche iji jikwaa okporo ụzọ na-apụ apụ. Mana m ga-agwa gị gbasara nke a, enwere m olileanya, oge ọzọ. Daalụ nke ukwuu maka nlebara anya gị.

isi: www.habr.com