MÅ«sdienu datu centros ir simtiem aktÄ«vo ierÄ«Äu, uz kurÄm attiecas dažÄdi uzraudzÄ«bas veidi. Bet pat ideÄls inženieris ar perfektu uzraudzÄ«bu spÄs pareizi reaÄ£Ät uz tÄ«kla kļūmi tikai dažu minÅ«Å”u laikÄ. ZiÅojumÄ Next Hop 2020 konferencÄ es prezentÄju datu centra tÄ«kla projektÄÅ”anas metodoloÄ£iju, kurai ir unikÄla iezÄ«me - datu centrs atveseļojas pats par sevi milisekundÄs. PrecÄ«zÄk, inženieris mierÄ«gi novÄrÅ” problÄmu, savukÄrt dienesti to vienkÄrÅ”i nepamana.
Daudziem tÄ«kla inženieriem datu centru tÄ«kls, protams, sÄkas ar ToR, ar slÄdzi plauktÄ. ToR parasti ir divu veidu saites. Mazie iet uz serveriem, citi - viÅu ir N reizes vairÄk - iet uz pirmÄ lÄ«meÅa spines, tas ir, uz tÄs uplinkiem. AugÅ”upsaites parasti tiek uzskatÄ«tas par vienÄdÄm, un datplÅ«sma starp augÅ”upsaitÄm tiek lÄ«dzsvarota, pamatojoties uz 5 korpusu jaucÄjkodu, kas ietver proto, src_ip, dst_ip, src_port, dst_port. Å eit nav nekÄdu pÄrsteigumu.
TÄlÄk, kÄ izskatÄs lidmaŔīnu arhitektÅ«ra? PirmÄ lÄ«meÅa muguriÅas nav savienotas viena ar otru, bet ir savienotas ar superspinu palÄ«dzÄ«bu. Burts X bÅ«s atbildÄ«gs par superspiniem, tas ir gandrÄ«z kÄ Å”Ä·Ärssavienojums.
Un ir skaidrs, ka, no otras puses, tori ir savienoti ar visiem pirmÄ lÄ«meÅa muguriÅiem. Kas Å”ajÄ attÄlÄ ir svarÄ«gs? Ja mums ir mijiedarbÄ«ba plauktÄ, tad mijiedarbÄ«ba, protams, notiek caur ToR. Ja mijiedarbÄ«ba notiek moduļa iekÅ”ienÄ, tad mijiedarbÄ«ba notiek caur pirmÄ lÄ«meÅa muguriÅÄm. Ja mijiedarbÄ«ba ir starpmodulÄra - kÄ Å”eit, ToR 1 un ToR 2 -, tad mijiedarbÄ«ba iet cauri gan pirmÄ, gan otrÄ lÄ«meÅa mugurkaulam.
TeorÄtiski Å”Äda arhitektÅ«ra ir viegli mÄrogojama. Ja mums ir porta ietilpÄ«ba, vietas rezerve datu centrÄ un iepriekÅ” ieklÄta Ŕķiedra, tad plakÅu skaitu vienmÄr var palielinÄt, tÄdÄjÄdi palielinot sistÄmas kopÄjo kapacitÄti. Uz papÄ«ra tas ir ļoti vienkÄrÅ”i izdarÄms. TÄ tas bÅ«tu arÄ« reÄlajÄ dzÄ«vÄ. Bet Å”odienas stÄsts nav par to.
Es gribu, lai tiktu izdarÄ«ti pareizi secinÄjumi. Mums ir daudz ceļu datu centrÄ. ViÅi ir nosacÄ«ti neatkarÄ«gi. Viens veids, kÄ iekļūt datu centrÄ, ir iespÄjams tikai ToR ietvaros. Moduļa iekÅ”pusÄ mums ir tÄds pats ceļu skaits kÄ plakÅu skaits. Ceļu skaits starp moduļiem ir vienÄds ar plakÅu skaita un supergriezienu skaita reizinÄjumu katrÄ plaknÄ. Lai bÅ«tu skaidrÄk, lai sajustu mÄrogu, nosaukÅ”u skaitļus, kas ir derÄ«gi kÄdam no Yandex datu centriem.
Ir astoÅas lidmaŔīnas, katrai lidmaŔīnai ir 32 supergriezieni. RezultÄtÄ izrÄdÄs, ka moduļa iekÅ”pusÄ ir astoÅi ceļi, un ar starpmoduļu mijiedarbÄ«bu no tiem jau ir 256.
Tas ir, ja mÄs izstrÄdÄjam pavÄrgrÄmatu, mÄÄ£inot uzzinÄt, kÄ izveidot defektu izturÄ«gus datu centrus, kas paÅ”i sevi dziedÄ, tad plakanÄ arhitektÅ«ra ir pareizÄ izvÄle. Tas ļauj atrisinÄt mÄrogoÅ”anas problÄmu, un teorÄtiski tas ir viegli. Ir daudz neatkarÄ«gu ceļu. Paliek jautÄjums: kÄ Å”Äda arhitektÅ«ra pÄrdzÄ«vo neveiksmes? Notiek dažÄdas avÄrijas. Un mÄs to tagad apspriedÄ«sim.
Lai kÄds no mÅ«su superspiniem saslimst. Å eit es atgriezos pie divu plakÅu arhitektÅ«ras. MÄs pieturÄsimies pie tiem kÄ piemÄra, jo vienkÄrÅ”i bÅ«s vieglÄk redzÄt, kas Å”eit notiek, ja ir mazÄk kustÄ«go daļu. Lai X11 saslimst. KÄ tas ietekmÄs pakalpojumus, kas dzÄ«vo datu centros? Daudz kas ir atkarÄ«gs no tÄ, kÄ patiesÄ«bÄ izskatÄs neveiksme.
Ja kļūme ir laba, tÄ tiek noÄ·erta tÄ paÅ”a BFD automatizÄcijas lÄ«menÄ«, automatizÄcija ar prieku liek problÄmsavienojumus un izolÄ problÄmu, tad viss ir kÄrtÄ«bÄ. Mums ir daudz ceļu, satiksme momentÄni tiek novirzÄ«ta uz alternatÄ«viem marÅ”rutiem, un dienesti neko nepamanÄ«s. Å is ir labs scenÄrijs.
Slikts scenÄrijs ir tad, ja mums ir pastÄvÄ«gi zaudÄjumi un automatizÄcija nepamana problÄmu. Lai saprastu, kÄ tas ietekmÄ lietojumprogrammu, mums bÅ«s jÄpavada nedaudz laika, lai apspriestu, kÄ darbojas TCP protokols.
Ceru, ka ar Å”o informÄciju nevienu neÅ”okÄÅ”u: TCP ir rokasspiediena protokols. Tas ir, vienkÄrÅ”ÄkajÄ gadÄ«jumÄ sÅ«tÄ«tÄjs nosÅ«ta divas paketes un saÅem kumulatÄ«vu apstiprinÄjumu par tÄm: "Es saÅÄmu divas paketes."
PÄc tam viÅÅ” nosÅ«tÄ«s vÄl divas paketes, un situÄcija atkÄrtosies. Jau iepriekÅ” atvainojos par nelielu vienkÄrÅ”oÅ”anu. Å is scenÄrijs ir pareizs, ja logs (pakeÅ”u skaits lidojumÄ) ir divi. Protams, kopumÄ tas tÄ nav obligÄti. Bet pakeÅ”u pÄrsÅ«tÄ«Å”anas kontekstu neietekmÄ loga lielums.
Kas notiks, ja mÄs pazaudÄsim 3. paku? Å ajÄ gadÄ«jumÄ adresÄts saÅems 1., 2. un 4. paciÅas. Un viÅÅ”, izmantojot opciju SACK, skaidri informÄs sÅ«tÄ«tÄju: "Zini, atnÄca trÄ«s, bet pazaudÄja vidÄjo." ViÅÅ” saka "Ack 2, SACK 4".
SÅ«tÄ«tÄjs Å”ajÄ brÄ«dÄ« bez problÄmÄm atkÄrto tieÅ”i pazaudÄto paketi.
Bet, ja logÄ tiek pazaudÄta pÄdÄjÄ pakete, situÄcija izskatÄ«sies pavisam savÄdÄk.
SaÅÄmÄjs saÅem pirmÄs trÄ«s paketes un vispirms sÄk gaidÄ«t. Pateicoties dažÄm optimizÄcijÄm Linux kodola TCP stekÄ, tas gaidÄ«s pÄrÄ« savienotu paketi, ja vien karogos nav skaidri norÄdÄ«ts, ka Ŕī ir pÄdÄjÄ pakete vai tamlÄ«dzÄ«gi. Tas gaidÄ«s, lÄ«dz beidzas aizkavÄtÄ ACK taimauts, un pÄc tam nosÅ«tÄ«s apstiprinÄjumu par pirmajÄm trim paketÄm. Bet tagad sÅ«tÄ«tÄjs gaidÄ«s. ViÅÅ” nezina, vai ceturtÄ paka ir pazudusi vai gatavojas ierasties. Un, lai nepÄrslogotu tÄ«klu, tas mÄÄ£inÄs gaidÄ«t skaidru norÄdi, ka pakete ir pazaudÄta, vai RTO taimauta beigas.
Kas ir RTO taimauts? Tas ir maksimums no RTT, ko aprÄÄ·ina TCP steka un kÄda konstante. Kas ir Ŕī konstante, mÄs tagad apspriedÄ«sim.
Bet svarÄ«gi, ja atkal nepaveicas un atkal tiek pazaudÄta ceturtÄ pakete, tad RTO dubultojas. Tas nozÄ«mÄ, ka katrs neveiksmÄ«gs mÄÄ£inÄjums ir taimauta dubultoÅ”anÄs.
Tagad redzÄsim, ar ko Ŕī bÄze ir vienÄda. PÄc noklusÄjuma minimÄlais RTO ir 200 ms. Tas ir minimÄlais datu pakeÅ”u RTO. SYN paketÄm tas ir atŔķirÄ«gs, 1 sekunde. KÄ redzat, pat pirmais mÄÄ£inÄjums atkÄrtoti nosÅ«tÄ«t paketes prasÄ«s 100 reizes ilgÄk nekÄ RTT datu centrÄ.
Tagad atgriezieties pie mÅ«su scenÄrija. Kas notiek ar pakalpojumu? Pakalpojums sÄk zaudÄt paketes. Lai servisam sÄkotnÄji paveicas un pazaudÄ kaut ko loga vidÅ«, tad saÅem MAISU, nosÅ«ta pazaudÄtÄs paketes vÄlreiz.
Bet, ja nelaime atkÄrtojas, tad mums ir RTO. Kas Å”eit ir svarÄ«gs? JÄ, tÄ«klÄ mums ir daudz ceļu. TaÄu viena konkrÄta TCP savienojuma TCP trafiks turpinÄs iet caur to paÅ”u bojÄto steku. PakeÅ”u zudums, ja mÅ«su maÄ£iskais X11 neizdziest pats no sevis, nenoved pie satiksmes plÅ«smas uz vietÄm, kas nav problemÄtiskas. MÄs cenÅ”amies piegÄdÄt paketi caur to paÅ”u bojÄto kaudzÄ«ti. Tas noved pie kaskÄdes kļūmes: datu centrs ir mijiedarbojoÅ”u lietojumprogrammu kopums, un daži visu Å”o lietojumprogrammu TCP savienojumi sÄk bojÄties, jo superspin ietekmÄ visas lietojumprogrammas, kas atrodas datu centrÄ. KÄ teicienÄ: ja zirgu neapapÄ, zirgs klibo; zirgs kliboja - ziÅojums netika piegÄdÄts; ziÅa netika nodota - viÅi zaudÄja karu. Tikai Å”eit skaitÄ«Å”ana ilgst sekundes no brīža, kad problÄma rodas, lÄ«dz degradÄcijas stadijai, ko sÄk izjust pakalpojumi. Tas nozÄ«mÄ, ka lietotÄji kaut kur var kaut ko nesaÅemt.
Ir divi klasiski risinÄjumi, kas viens otru papildina. Pirmais ir servisi, kas mÄÄ£ina nolikt salmus un atrisinÄt problÄmu Å”Ädi: āPielÄgosim kaut ko TCP kaudzÄ. Un izveidosim lietojumprogrammas lÄ«meÅa taimautus vai ilgstoÅ”as āāTCP sesijas ar iekÅ”ÄjÄm veselÄ«bas pÄrbaudÄm. ProblÄma ir tÄda, ka Å”Ädi risinÄjumi: a) vispÄr nav mÄrogoti; b) ļoti slikti pÄrbaudÄ«ts. Tas ir, pat ja pakalpojums nejauÅ”i konfigurÄ TCP steku, lai tas kļūtu labÄks, pirmkÄrt, tas, visticamÄk, nebÅ«s piemÄrojams visÄm lietojumprogrammÄm un visiem datu centriem, un, otrkÄrt, visticamÄk, tas nesapratÄ«s, kas ir izdarÄ«ts pareizi un kas nÄ. Tas ir, tas darbojas, bet tas darbojas slikti un nesamazinÄs. Un, ja ir tÄ«kla problÄma, kurÅ” ir vainÄ«gs? Protams, NOC. Ko dara NOC?
Daudzi dienesti uzskata, ka NOC darbs notiek apmÄram Å”Ädi. Bet, godÄ«gi sakot, ne tikai.
NOC klasiskajÄ shÄmÄ nodarbojas ar daudzu monitoringu izstrÄdi. Tie ir gan melnÄs kastes uzraudzÄ«ba, gan baltÄs kastes uzraudzÄ«ba. Par muguriÅu melnÄs kastes monitoringa piemÄru
Ko tu vÄlÄtos saÅemt? Mums ir tik daudz ceļu. Un problÄmas rodas tieÅ”i tÄpÄc, ka neveiksmÄ«gÄs TCP plÅ«smas turpina izmantot to paÅ”u marÅ”rutu. Mums ir nepiecieÅ”ams kaut kas, kas ļaus mums izmantot vairÄkus marÅ”rutus vienÄ TCP savienojumÄ. Å Ä·iet, ka mums ir risinÄjums. Ir TCP, ko sauc tÄ - vairÄku ceļu TCP, tas ir, TCP daudziem ceļiem. Tiesa, tas tika izstrÄdÄts pavisam citam uzdevumam ā viedtÄlruÅiem, kuriem ir vairÄkas tÄ«kla ierÄ«ces. Lai maksimÄli palielinÄtu pÄrsÅ«tÄ«Å”anu vai izveidotu primÄro / rezerves režīmu, tika izstrÄdÄts mehÄnisms, kas lietojumprogrammai pÄrredzami izveido vairÄkus pavedienus (sesijas) un ļauj pÄrslÄgties starp tiem kļūmes gadÄ«jumÄ. Vai, kÄ jau teicu, palieliniet joslas platumu.
Bet Å”eit ir nianse. Lai saprastu, kas tas ir, mums ir jÄaplÅ«ko, kÄ tiek iestatÄ«tas straumes.
VÄ«tnes tiek iestatÄ«tas secÄ«gi. Vispirms tiek instalÄta pirmÄ straume. TurpmÄkÄs plÅ«smas tiek iestatÄ«tas, izmantojot sÄ«kfailu, par kuru jau ir panÄkta vienoÅ”anÄs Å”ajÄ pavedienÄ. Un Å”eit ir problÄma.
ProblÄma ir tÄda, ka, ja pirmais pavediens netiek instalÄts, otrais un treÅ”ais pavediens nekad netiks parÄdÄ«ts. Tas nozÄ«mÄ, ka daudzceļu TCP neatrisina SYN paketes zudumu pirmajÄ straumÄ. Un, ja SYN tiek zaudÄts, daudzceļu TCP kļūst par normÄlu TCP. TÄtad datu centra vidÄ tas mums nepalÄ«dzÄs atrisinÄt problÄmu ar zaudÄjumiem rÅ«pnÄ«cÄ un iemÄcÄ«ties izmantot vairÄkus ceļus neveiksmes gadÄ«jumÄ.
Kas mums var palÄ«dzÄt? Daži no jums jau pÄc nosaukuma ir uzminÄjuÅ”i, ka IPv6 plÅ«smas etiÄ·etes galvenes lauks bÅ«s svarÄ«gs lauks mÅ«su turpmÄkajÄ stÄstÄ. PatieÅ”Äm, Å”is ir lauks, kas parÄdÄs versijÄ v6, tÄ nav v4, tas aizÅem 20 bitus, un par tÄ izmantoÅ”anu ir bijuÅ”as domstarpÄ«bas jau ilgu laiku. Tas ir ļoti interesanti - bija strÄ«di, kaut kas tika labots RFC ietvaros, un tajÄ paÅ”Ä laikÄ Linux kodolÄ parÄdÄ«jÄs implementÄcija, kas nekad nekur netika dokumentÄta.
Es iesaku pievienoties man nelielai izmeklÄÅ”anai. ApskatÄ«sim, kas pÄdÄjos gados ir noticis Linux kodolÄ.
2014. gads. Inženieris no liela un cienÄ«jama uzÅÄmuma Linux kodola funkcionalitÄti papildina ar plÅ«smas etiÄ·etes vÄrtÄ«bas atkarÄ«bu no ligzdas hash. Ko viÅi te cenÅ”as labot? Tas ir saistÄ«ts ar RFC 6438, kurÄ tika apspriesta Å”Äda problÄma. Datu centra iekÅ”ienÄ IPv4 bieži ir iekapsulÄts IPv6 paketÄs, jo pati rÅ«pnÄ«ca ir IPv6, bet IPv4 kaut kÄ jÄizdod. Ilgu laiku bija problÄmas ar slÄdžiem, kas nevarÄja meklÄt zem divÄm IP galvenÄm, lai nokļūtu TCP vai UDP un atrastu tur src_ports, dst_ports. IzrÄdÄ«jÄs, ka hash, ja paskatÄs uz pirmajÄm divÄm IP galvenes, izrÄdÄ«jÄs gandrÄ«z fiksÄts. Lai no tÄ izvairÄ«tos, lai Ŕīs iekapsulÄtÄs trafika lÄ«dzsvaroÅ”ana darbotos pareizi, tika ierosinÄts plÅ«smas etiÄ·etes lauka vÄrtÄ«bai pievienot jaucÄju no 5 korpusa iekapsulÄtÄs paketes. ApmÄram tas pats tika darÄ«ts citÄm iekapsulÄÅ”anas shÄmÄm, UDP, GRE, pÄdÄjÄ tika izmantots lauks GRE Key. TÄ vai citÄdi mÄrÄ·i Å”eit ir skaidri. Un vismaz tajÄ brÄ«dÄ« tie bija noderÄ«gi.
2015. gadÄ jauns ielÄps nÄk no tÄ paÅ”a cienÄ«jamÄ inženiera. ViÅÅ” ir ļoti interesants. Tur ir teikts sekojoÅ”ais ā mÄs nejauÅ”i izvÄlÄsimies jaucÄju negatÄ«va marÅ”rutÄÅ”anas notikuma gadÄ«jumÄ. Kas ir negatÄ«vs marÅ”rutÄÅ”anas notikums? Å is ir RTO, par kuru mÄs runÄjÄm iepriekÅ”, tas ir, loga astes zudums ir patieÅ”Äm negatÄ«vs notikums. Tiesa, ir salÄ«dzinoÅ”i grÅ«ti uzminÄt, kas tas ir.
2016, vÄl viens cienÄ«ts uzÅÄmums, arÄ« liels. Tas parsÄ pÄdÄjos kruÄ·us un padara to tÄ, lai jaukÅ”ana, ko mÄs iepriekÅ” veicÄm nejauÅ”i, tagad tiek mainÄ«ta katrÄ SYN atkÄrtotajÄ pÄrraidÄ un pÄc katra RTO taimauta. Un Å”ajÄ vÄstulÄ pirmo un pÄdÄjo reizi izskan galvenais mÄrÄ·is - pÄrliecinÄties, ka trafika kanÄlu zuduma vai pÄrslodzes gadÄ«jumÄ ir iespÄja veikt mÄ«kstu pÄrmarÅ”rutu, izmantojot vairÄkus ceļus. Protams, pÄc tam bija daudz publikÄciju, tÄs var viegli atrast.
Lai gan nÄ, jÅ«s nevarat, jo par Å”o tÄmu nav bijusi neviena publikÄcija. Bet mÄs zinÄm!
Un, ja jÅ«s pilnÄ«bÄ nesaprotat, kas tika darÄ«ts, es jums pateikÅ”u tagad.
Kas ir paveikts, kÄda funkcionalitÄte ir pievienota Linux kodolam? txhash mainÄs uz nejauÅ”u vÄrtÄ«bu pÄc katra RTO notikuma. Å is ir tas pats negatÄ«vais marÅ”rutÄÅ”anas rezultÄts. JaucÄjs ir atkarÄ«gs no Ŕī txhash, un plÅ«smas etiÄ·ete ir atkarÄ«ga no skb jaucÄjkoda. Å eit ir daži aprÄÄ·ini par funkcijÄm, visas detaļas nevar ievietot vienÄ slaidÄ. Ja kÄds ir ziÅkÄrÄ«gs, varat iet cauri kodola kodam un pÄrbaudÄ«t.
Kas Å”eit ir svarÄ«gs? PlÅ«smas etiÄ·etes lauka vÄrtÄ«ba mainÄs uz nejauÅ”u skaitli pÄc katras RTO. KÄ tas ietekmÄ mÅ«su neveiksmÄ«go TCP straumi?
SACK gadÄ«jumÄ nekas nav mainÄ«jies, jo mÄs cenÅ”amies atkÄrtoti nosÅ«tÄ«t zinÄmu pazaudÄtu paketi. Tik tÄlu, labi.
TaÄu RTO gadÄ«jumÄ, ja esam pievienojuÅ”i plÅ«smas etiÄ·eti jaucÄjfunkcijai pakalpojumÄ ToR, satiksme var veikt citu marÅ”rutu. Un jo vairÄk lidmaŔīnu, jo lielÄka iespÄja atrast ceļu, kuru neietekmÄ konkrÄtas ierÄ«ces avÄrija.
Viena problÄma paliek - RTO. Cits marÅ”ruts, protams, tiek atrasts, bet tam tiek veltÄ«ts daudz laika. 200 ms ir daudz. OtrÄ parasti ir mežonÄ«ba. IepriekÅ” es runÄju par taimautiem, kas konfigurÄ pakalpojumus. TÄtad, sekunde ir taimauts, kas parasti iestata pakalpojumu lietojumprogrammas lÄ«menÄ«, un Å”ajÄ gadÄ«jumÄ pakalpojums bÅ«s pat samÄrÄ pareizs. TurklÄt, es atkÄrtoju, reÄlÄ RTT mÅ«sdienu datu centrÄ ir aptuveni 1 milisekunde.
Ko var darÄ«t ar RTO taimautiem? Taimautu, kas ir atbildÄ«gs par RTO datu pakeÅ”u zuduma gadÄ«jumÄ, var salÄ«dzinoÅ”i viegli konfigurÄt no lietotÄja vietas: ir IP utilÄ«ta, un viens no tÄs parametriem satur to paÅ”u rto_min. Å
emot vÄrÄ, ka, protams, RTO jÄgriež nevis globÄli, bet gan dotajiem prefiksiem, Å”Äds mehÄnisms izskatÄs diezgan darbojoÅ”s.
Tiesa, ar SYN_RTO viss ir nedaudz sliktÄk. Tas ir dabiski pavirÅ”i. VÄrtÄ«ba ir fiksÄta kodolÄ - 1 sekunde, un viss. JÅ«s to nevarat sasniegt no lietotÄja vietas. Ir tikai viens veids.
eBPF nÄk palÄ«gÄ. VienkÄrÅ”oti sakot, tÄs ir mazas programmas C. TÄs var ievietot ÄÄ·os dažÄdÄs kodola steka un TCP steka izpildes vietÄs, ar kurÄm var mainÄ«t ļoti lielu skaitu iestatÄ«jumu. KopumÄ eBPF ir ilgtermiÅa tendence. TÄ vietÄ, lai zÄÄ£Ätu desmitiem jaunu sysctl parametru un paplaÅ”inÄtu IP utilÄ«tu, kustÄ«ba notiek eBPF virzienÄ un paplaÅ”ina tÄ funkcionalitÄti. Izmantojot eBPF, varat dinamiski mainÄ«t sastrÄgumu kontroles un dažÄdus citus TCP iestatÄ«jumus.
Bet mums ir svarÄ«gi, lai ar tÄ palÄ«dzÄ«bu jÅ«s varÄtu sagrozÄ«t SYN_RTO vÄrtÄ«bas. Un ir publiski ievietots piemÄrs:
Ko mÄs jau zinÄm? Tas, ka plakanÄ arhitektÅ«ra ļauj mÄrogot, mums izrÄdÄs ÄrkÄrtÄ«gi noderÄ«gi, kad ieslÄdzam plÅ«smas etiÄ·eti uz ToR un iegÅ«stam iespÄju plÅ«st ap problemÄtiskajÄm zonÄm. LabÄkais veids, kÄ samazinÄt RTO un SYN-RTO vÄrtÄ«bas, ir izmantot eBPF programmas. Paliek jautÄjums: vai ir droÅ”i izmantot plÅ«smas etiÄ·eti balansÄÅ”anai? Un Å”eit ir nianse.
PieÅemsim, ka jums tÄ«klÄ ir pakalpojums, kas darbojas Anycast. DiemžÄl man nav laika sÄ«kÄk iedziļinÄties par anycast, bet tas ir izplatÄ«ts pakalpojums, kurÄ ir pieejami dažÄdi fiziski serveri uz vienas IP adreses. Un Å”eit ir iespÄjama problÄma: RTO notikums var notikt ne tikai tad, kad satiksme ŔķÄrso rÅ«pnÄ«cu. Tas var notikt arÄ« ToR bufera lÄ«menÄ«: kad notiek incast notikums, tas var notikt pat resursdatorÄ, kad resursdators kaut ko izlej. Kad notiek RTO notikums un tas maina plÅ«smas etiÄ·eti. Å ajÄ gadÄ«jumÄ datplÅ«sma var pÄriet uz citu jebkuru apraides gadÄ«jumu. PieÅemsim, ka tas ir statuss anycast, tas satur savienojuma stÄvokli ā tas var bÅ«t L3 Balancer vai kÄds cits pakalpojums. Tad rodas problÄma, jo pÄc RTO TCP savienojums nonÄk serverÄ«, kas par Å”o TCP savienojumu neko nezina. Un, ja mums nav stÄvokļa koplietoÅ”anas starp anycast serveriem, tad Å”Äda trafika tiks pÄrtraukta un TCP savienojums pÄrtrÅ«ks.
Ko Å”eit var darÄ«t? JÅ«su kontrolÄtajÄ vidÄ, kurÄ iespÄjojat plÅ«smas etiÄ·eÅ”u lÄ«dzsvaroÅ”anu, jums ir jÄlabo plÅ«smas etiÄ·etes vÄrtÄ«ba, piekļūstot Anycast serveriem. VienkÄrÅ”Äkais veids ir to izdarÄ«t, izmantojot to paÅ”u eBPF programmu. TaÄu Å”eit ir ļoti svarÄ«gs moments ā ko darÄ«t, ja nepÄrvaldÄt datu centru tÄ«klu, bet esat telekomunikÄciju operators? TÄ ir arÄ« jÅ«su problÄma: sÄkot ar noteiktÄm Juniper un Arista versijÄm, tÄs pÄc noklusÄjuma iekļauj plÅ«smas etiÄ·eti hash funkcijÄ ā godÄ«gi sakot, man nesaprotama iemesla dÄļ. Tas var izraisÄ«t TCP savienojumu pÄrtraukÅ”anu no lietotÄjiem, kuri izmanto jÅ«su tÄ«klu. TÄpÄc es ļoti iesaku pÄrbaudÄ«t marÅ”rutÄtÄja iestatÄ«jumus Å”ajÄ vietÄ.
TÄ vai citÄdi, man Ŕķiet, ka esam gatavi pÄriet uz eksperimentiem.
Kad ieslÄdzÄm ToR plÅ«smas etiÄ·eti, sagatavojÄm aÄ£enta eBPF, kas tagad dzÄ«vo uz saimniekiem, nolÄmÄm negaidÄ«t nÄkamo lielo neveiksmi, bet gan veikt kontrolÄtus sprÄdzienus. MÄs paÅÄmÄm ToR, kuram ir Äetras augÅ”upsaites, un samazinÄjÄm vienu no tiem. ViÅi uzzÄ«mÄja likumu, viÅi teica - tagad jÅ«s zaudÄjat visas paketes. KÄ redzat kreisajÄ pusÄ, mums ir pakeÅ”u monitorings, kas ir samazinÄjies lÄ«dz 75%, tas ir, tiek zaudÄti 25% pakeÅ”u. LabajÄ pusÄ ir diagrammas ar pakalpojumiem, kas atrodas aiz Ŕī uzdevuma. Faktiski Å”ie ir satiksmes diagrammas savienojumiem ar serveriem, kas atrodas plauktÄ. KÄ redzat, tÄs nogrima vÄl zemÄk. KÄpÄc tie nogrima zemÄk - nevis par 25%, bet dažos gadÄ«jumos par 3-4 reizÄm? Ja TCP savienojums ir neveiksmÄ«gs, tas turpina mÄÄ£inÄt sasniegt, izmantojot bojÄto interfeisu. To pastiprina tipiskÄ pakalpojuma darbÄ«ba DC iekÅ”ienÄ ā vienam lietotÄja pieprasÄ«jumam tiek Ä£enerÄti N pieprasÄ«jumi iekÅ”Äjiem pakalpojumiem, un atbilde tiks nosÅ«tÄ«ta lietotÄjam, vai nu tad, kad atbildÄs visi datu avoti, vai arÄ« tad, kad tiek aktivizÄts noildze. lietojumprogrammas lÄ«menis, kas vÄl ir jÄkonfigurÄ. Tas ir, viss ir ļoti, ļoti slikti.
Tagad tas pats eksperiments, bet ar iespÄjotu plÅ«smas etiÄ·eti. KÄ redzat, kreisajÄ pusÄ mÅ«su partiju uzraudzÄ«ba samazinÄjÄs par tiem paÅ”iem 25%. Tas ir pilnÄ«gi pareizi, jo par retranslÄcijÄm neko nezina, sÅ«ta paketes un vienkÄrÅ”i skaita piegÄdÄto un pazaudÄto pakeÅ”u attiecÄ«bu.
Un labajÄ pusÄ ir pakalpojumu grafiks. Å eit jÅ«s neatradÄ«sit problÄmas locÄ«tavas efektu. DatplÅ«sma tajÄs paÅ”Äs milisekundÄs plÅ«da no problÄmas apgabala uz trim atlikuÅ”ajÄm augÅ”upsaitÄm, kuras problÄma neietekmÄja. Mums ir tÄ«kls, kas dziedÄ pats par sevi.
Å is ir mans pÄdÄjais slaids, laiks izvÄrtÄt. Tagad es ceru, ka jÅ«s zinÄt, kÄ izveidot paÅ”atjaunojoÅ”u datu centru tÄ«klu. Jums nevajadzÄs iet cauri Linux kodola arhÄ«vam un meklÄt tur Ä«paÅ”us ielÄpus, jÅ«s zinÄt, ka Flow etiÄ·ete Å”ajÄ gadÄ«jumÄ atrisina problÄmu, taÄu jums ir rÅ«pÄ«gi jÄpieiet Å”im mehÄnismam. Un es vÄlreiz uzsveru, ka, ja esat pÄrvadÄtÄjs, jums nevajadzÄtu izmantot plÅ«smas etiÄ·eti kÄ jaucÄjfunkciju, pretÄjÄ gadÄ«jumÄ jÅ«s pÄrtrauksit savu lietotÄju sesijas.
TÄ«kla inženieriem ir jÄnotiek konceptuÄlai maiÅai: tÄ«kls nesÄkas ar ToR, nevis ar tÄ«kla ierÄ«ci, bet ar resursdatoru. Diezgan spilgts piemÄrs ir tas, kÄ mÄs izmantojam eBPF gan, lai mainÄ«tu RTO, gan lai fiksÄtu plÅ«smas etiÄ·eti attiecÄ«bÄ uz anycast pakalpojumiem.
PlÅ«smas etiÄ·etes mehÄniÄ·is noteikti ir piemÄrots citiem lietojumiem kontrolÄtajÄ administratÄ«vajÄ segmentÄ. TÄ var bÅ«t satiksme starp datu centriem, vai arÄ« jÅ«s varat izmantot Å”Ädu mehÄniku Ä«paÅ”Ä veidÄ, lai kontrolÄtu izejoÅ”o trafiku. Bet es ceru, ka par to runÄÅ”u nÄkamreiz. Liels paldies par jÅ«su uzmanÄ«bu.
Avots: www.habr.com