Vi har utvecklat en design för datacenter-nÀtverk som möjliggör distribution av datorkluster med mer Àn 100 000 servrar och en maximal bisection bandwidth över en petabyte per sekund.
I Dmitrij Afanasjevs presentation lÀr du dig om de grundlÀggande principerna för den nya designen, skalning av topologier, problemen som uppstÄr, lösningsalternativ, samt om egenskaperna för routing och skalning av forwarding plane-funktioner i moderna nÀtverksenheter i tÀtt kopplade topologier med mÄnga ECMP-rutter. Dessutom berÀttade Dima kort om organisationen av extern konnektivitet, den fysiska nivÄn, kabelsystemet och sÀtt att ytterligare öka kapaciteten.
â Hej alla! Jag heter Dmitrij Afanasjev, jag Ă€r nĂ€tverksarkitekt pĂ„ Yandex och arbetar frĂ€mst med design av datacenter-nĂ€tverk.

Min presentation handlar om det uppdaterade datacenter-nÀtverket pÄ Yandex. Det Àr i stor utstrÀckning en evolution av den design vi hade, men samtidigt finns det ocksÄ nÄgra nya element. Detta Àr en översiktlig presentation, eftersom vi behövde komprimera mycket information pÄ kort tid. Vi börjar med valet av logisk topologi. Sedan kommer vi att ge en översikt av control plane och problem med skalbarhet i data plane, valet av vad som kommer att hÀnda pÄ den fysiska nivÄn, och vi kommer att titta pÄ nÄgra egenskaper hos enheterna. Vi berör ocksÄ vad som hÀnder i datacentret med MPLS, som vi talade om för en tid sedan.

SÄ vad Àr Yandex ur belastningar och tjÀnsters perspektiv? Yandex Àr en typisk hyperskalare. Sett ur anvÀndarnas perspektiv handlar det först och frÀmst om behandling av anvÀndarförfrÄgningar. Det handlar ocksÄ om olika streaming-tjÀnster och dataleveranser, eftersom vi ocksÄ har lagringstjÀnster. Om vi ser nÀrmare pÄ backend sÄ uppstÄr infrastrukturella belastningar och tjÀnster, sÄsom distribuerade objektlagringssystem, datareplikering och givetvis persistenta köer. En av de huvudsakliga typerna av belastningar Àr MapReduce och liknande system, strömmande bearbetning, maskininlÀrning, osv.

Hur Ă€r infrastrukturen uppbyggd dĂ€r allt detta sker? Ă
terigen, vi Àr en ganska typisk hyperscaler, Àven om vi kanske ligger lite nÀrmare den sida av spektrumet dÀr de mindre hyperscalerna finns. Men vi har alla attribut. Vi anvÀnder standardhÄrdvara och horisontell skalning överallt dÀr det Àr möjligt. Vi har en fullt utvecklad resurspoolering: vi arbetar inte med separata maskiner eller rack, utan slÄr samman dem till en stor pool av utbytbara resurser med nÄgra ytterligare tjÀnster som hanterar planering och allokering, och arbetar med hela denna pool.
SĂ„ vi fĂ„r nĂ€sta nivĂ„ â operativsystem pĂ„ kluster-nivĂ„. Det Ă€r mycket viktigt att vi helt kontrollerar teknikstacken som anvĂ€nds. Vi kontrollerar Ă€ndpunkterna (vĂ€rdarna), nĂ€tverket och programvarustacken.
Vi har flera stora datacenter i Ryssland och utomlands. Dessa förenas av en backbone som anvĂ€nder MPLS-teknologi. V vĂ„r interna infrastruktur Ă€r nĂ€stan helt uppbyggd pĂ„ IPv6, men eftersom vi behöver hantera extern trafik som fortfarande huvudsakligen kommer in via IPv4, mĂ„ste vi pĂ„ nĂ„got sĂ€tt leverera förfrĂ„gningar som kommer via IPv4 till frontend-servrar, och gĂ„ lite ut i den externa IPv4-internettet â till exempel för indexering.
De senaste iterationerna av datacenter-nÀtverksdesign anvÀnder flerlagers Clos-topologier, och endast L3 tillÀmpas. Vi övergick frÄn L2 för en tid sedan och suckade av lÀttnad. Slutligen inkluderar vÄr infrastruktur hundratusentals berÀkningsinstanser (servrar). Den maximala storleken pÄ klustret var för en tid sedan cirka 10 000 servrar. Detta beror till stor del pÄ hur dessa operativsystem pÄ klusternivÄ kan fungera, schemalÀggare, resursallokering osv. Eftersom det har skett framsteg pÄ sidan av infrastrukturprogramvaran, Àr det nu mÄlet att ha en storlek pÄ cirka 100 000 servrar i ett berÀkningskluster, och vi har fÄtt i uppgift att kunna bygga nÀtverksfabriker som effektivt möjliggör resurspooling i ett sÄdant kluster.

Vad vill vi egentligen ha frĂ„n datacenterets nĂ€tverk? Först och frĂ€mst â mycket billig och hyfsat jĂ€mt fördelad bandbredd. För nĂ€tverket Ă€r det grunden som gör att vi kan poola resurser. Den nya mĂ„lstorleken Ă€r omkring 100 000 servrar i ett kluster.
Vi vill sjÀlvklart ha en skalbar och stabil kontrollplan, eftersom det pÄ en sÄ stor infrastruktur uppstÄr mycket huvudbry Àven frÄn bara slumpmÀssiga hÀndelser, och vi vill inte ha ytterligare huvudbry frÄn kontrollplanet. Samtidigt vill vi minimera tillstÄndet i det. Ju mindre tillstÄnd, desto bÀttre och stabilare fungerar allt och enklare att diagnostisera.
SjÀlvklart behöver vi automatisering, eftersom det Àr omöjligt att manuellt hantera en sÄdan infrastruktur, och det har varit omöjligt under en tid nu. Vi behöver sÄ mycket som möjligt stöd för drift och CI/CD-support, i den mÄn det kan tillhandahÄllas.
Vid sĂ„dana storlekar pĂ„ datacenter och kluster uppstĂ„r det ett skarpt behov av att stödja inkrementell distribution och utvidgning utan avbrott i tjĂ€nsten. Om man pĂ„ kluster med tusen maskiner, kanske nĂ€ra tiotusen maskiner, fortfarande kan rulla ut som en operation â det vill sĂ€ga vi planerar att utöka infrastrukturen och nĂ„gra tusen maskiner lĂ€ggs till som en operation â sĂ„ uppstĂ„r inte klustret med hundratusen maskiner omedelbart, utan det byggs upp över tid. Det Ă€r önskvĂ€rt att under hela denna tid Ă€r den redan distribuerade infrastrukturen tillgĂ€nglig.
Och ett krav som vi hade och har avskaffat: det Àr stöd för multitenancy, det vill sÀga virtualisering eller segmentering av nÀtverket. Nu behöver vi inte göra detta pÄ nivÄn av nÀtverksfabriken, eftersom segmenteringen har flyttat till vÀrdarna, vilket har förenklat vÄr skalning. Tack vare IPv6 och det stora adressutrymmet behövde vi inte anvÀnda dubbletteradresser i den interna infrastrukturen, hela adresseringen var redan unik. Och eftersom vi har flyttat filtreringen och nÀtverkssegmenteringen till vÀrdarna behöver vi inte skapa nÄgra virtuella nÀtverksentiteter i datacenterens nÀtverk.

En mycket viktig sak Àr att det finns saker vi inte behöver. Om nÄgra funktioner kan tas bort frÄn nÀtverket underlÀttar det livet avsevÀrt, och det utökar i allmÀnhet valet av tillgÀnglig utrustning och mjukvara, vilket förenklar diagnostik avsevÀrt.
SÄ vad Àr det vi inte behöver, vad har vi kunnat avstÄ frÄn, inte alltid med glÀdje i stunden, men med stor lÀttnad nÀr processen var över?
Först och frÀmst avstÄendet frÄn L2. Vi behöver varken verklig eller emulerad L2. Det anvÀnds i betydande grad tack vare att vi kontrollerar applikationsstacken. VÄra applikationer skalas horisontellt, de arbetar med L3-adressering och de oroar sig inte sÄ mycket för att enskilda instanser gÄr ner, utan bara slÀpper ut nya; de behöver inte distribueras pÄ den gamla adressen eftersom det finns en separat nivÄ för serviceupptÀckte och övervakning av maskiner i klustret. Vi lÀgger inte den uppgiften pÄ nÀtverket. NÀtverkets uppgift Àr att leverera paket frÄn punkt A till punkt B.
Vi har inte heller situationer dÀr adresser flyttas inom nÀtverket, och detta behöver spÄras. I mÄnga designer Àr det vanligtvis nödvÀndigt för att stödja VM-mobilitet. Vi anvÀnder inte mobilitet för virtuella maskiner i den interna infrastrukturen av stora Yandex, och dessutom anser vi att Àven om det görs, sÄ bör det inte ske med nÀtverksstöd. Om det verkligen Àr nödvÀndigt, mÄste det göras pÄ vÀrdnivÄ, och adresser som kan migrera bör sÀttas i overlays för att inte störa och göra för mÄnga dynamiska Àndringar i routing-systemet för sjÀlva underlaget (transportnÀtet).
Ytterligare en teknik som vi inte anvÀnder Àr multicast. Jag kan gÀrna förklara varför. Det underlÀttar livet avsevÀrt eftersom om nÄgon har arbetat med det och sett hur kontrollplanet för multicast ser ut - i alla installationer, förutom de enklaste, Àr det en stor huvudvÀrk. Dessutom Àr det svÄrt att hitta en vÀl fungerande öppen implementering, till exempel.
Och slutligen designar vi vÄra nÀtverk sÄ att det inte sker för mÄnga förÀndringar. Vi kan förvÀnta oss att flödet av externa hÀndelser i routing-systemet Àr lÄgt.

Vilka problem och begrĂ€nsningar mĂ„ste vi ta hĂ€nsyn till nĂ€r vi utvecklar ett datacenter? Kostnaden, sjĂ€lvklart. Skalbarheten, till vilken nivĂ„ vi vill vĂ€xa. Behovet av att expandera utan att stoppa tjĂ€nsten. Bandbredd, tillgĂ€nglighet. Synlighet över vad som hĂ€nder i nĂ€tverket, för övervakningssystem och driftteam. Stöd för automatisering â Ă„terigen, i den mĂ„n det Ă€r möjligt, eftersom olika uppgifter kan hanteras pĂ„ olika nivĂ„er, inklusive införande av ytterligare lager. Och oberoende frĂ„n leverantörer â Ă€ven om detta oberoende har varit lĂ€ttare eller svĂ„rare att uppnĂ„ beroende pĂ„ historiska perioder och vilket perspektiv man har. Om vi tar en skĂ€rning av chip i nĂ€tverksenheter, sĂ„ kan man fram till nyligen ganska villkorligt tala om oberoende frĂ„n leverantörer, om vi ville ha chip med hög bandbredd.

Vilken logisk topologi ska vi bygga vÄrt nÀtverk pÄ? Det kommer att vara en flerlagers Clos. Faktum Àr att det för tillfÀllet inte finns nÄgra verkliga alternativ. Och Clos-topologin Àr tillrÀckligt bra, Àven nÀr man jÀmför den med olika avancerade topologier som för tillfÀllet ligger mer inom akademiskt intresse, om vi har switchar med stora radix.

Hur fungerar en flerlagers Clos-nÀtverk ungefÀr, och hur kallas de olika elementen i det? Först och frÀmst en vindros för att orientera sig, var norr Àr, var söder, öst och vÀst. NÀtverk av den hÀr typen byggs vanligtvis av dem som har en vÀldigt stor trafik öst-vÀst. NÀr det gÀller de andra elementen, sÄ visas högst upp en virtuell switch, konstruerad av mindre switchar. Detta Àr huvudidén bakom den rekursiva konstruktionen av Clos-nÀtverk. Vi tar element med en viss radix och kopplar dem sÄ att det vi fÄr kan ses som en switch med en större radix. Om det behövs Ànnu mer kan processen upprepas.
I faller som med tvÄ nivÄers Clos, nÀr man tydligt kan sÀrskilja komponenter som i min skiss Àr vertikala, kallas de plattor. Skulle vi bygga ett Clos med tre nivÄer av spinnsvitchar (alla som inte Àr grÀnsvitchar och inte ToR-svitchar, och som endast anvÀnds för transit), skulle plattorna se mer komplexa ut, de med tvÄ nivÄer ser ut sÄ hÀr. Blocket med ToR- eller leaf-svitchar och de associerade första nivÄn spinnsvitchar kallade vi Pod. Spinnsvitcharna pÄ spinn-1-nivÄ högst upp i Pod kallas top of Pod, toppen av Pod. Svitcharna som ligger högst upp i hela fabriken Àr det översta lagret av fabriken, Top of fabric.

SjÀlvklart uppstÄr frÄgan: Clos-nÀt har byggts under en tid, sjÀlva idén kommer överhuvudtaget frÄn klassisk telefoni, TDM-nÀt. Kan det ha kommit nÄgot bÀttre, kan det göras bÀttre? Ja och nej. Teoretiskt ja, pÄ praktiken kommer det troligen inte att vara möjligt inom den nÀrmaste tiden. Eftersom det finns ett antal intressanta topologier, varav vissa till och med anvÀnds i produktion, till exempel anvÀnds Dragonfly i HPC-applikationer; det finns ocksÄ intressanta topologier som Xpander, FatClique, Jellyfish. Om man tittar pÄ förelÀsningar pÄ konferenser som SIGCOMM eller NSDI pÄ sistone kan man upptÀcka ett ganska stort antal arbeten om alternativa topologier som har bÀttre egenskaper (av olika slag) Àn Clos.
Men alla dessa topologier har en intressant egenskap. Det förhindrar deras implementering i datacenter nÀtverk som vi försöker bygga pÄ commodity-hÄrdvara och som kostar ganska rimliga pengar. I alla dessa alternativa topologier Àr tyvÀrr den största delen av bandbredden inte tillgÀnglig via de kortaste vÀgarna. DÀrför förlorar vi omedelbart möjligheten att anvÀnda traditionell kontrollplan.
Teoretiskt Àr lösningen pÄ problemet kÀnd. Det Àr exempelvis modifieringar av link state med anvÀndning av k-shortest path, men Ä andra sidan finns det inga sÄdana protokoll som har implementerats i produktion och som Àr allmÀnt tillgÀngliga pÄ utrustning.
Dessutom, eftersom merparten av kapaciteten inte Ă€r tillgĂ€nglig genom de kortaste vĂ€garna, behöver vi modifiera inte bara kontrollplanet för att vĂ€lja alla dessa vĂ€gar (och, för att vara tydlig, det Ă€r en betydligt större belastning pĂ„ kontrollplanet). Vi mĂ„ste ocksĂ„ modifiera vidarebefordringsplanet, och vanligtvis krĂ€vs minst tvĂ„ ytterligare funktioner. Detta inkluderar möjligheten att fatta alla beslut om vidarebefordran av paket pĂ„ en gĂ„ng, till exempel pĂ„ hosten. Faktiskt Ă€r detta kĂ€llrouting, som i litteraturen om sammankopplingsnĂ€t ibland kallas beslut om vidarebefordran all-at-once. Den andra funktionen Ă€r adaptiv routing â det Ă€r en funktion vi behöver pĂ„ nĂ€tverkselementen, vilket innebĂ€r att vi vĂ€ljer nĂ€sta hopp baserat pĂ„ information om den lĂ€gsta köbelastningen. Det kan ocksĂ„ finnas andra alternativ.
SÄledes Àr riktningen intressant, men tyvÀrr kan vi inte tillÀmpa det just nu.

Okej, vi stannade vid den logiska Clos-topologin. Hur ska vi skala den? LÄt oss titta pÄ hur den Àr uppbyggd och vad vi kan göra.

I Clos-nÀtverket finns det tvÄ huvudparametrar som vi kan variera och fÄ olika resultat: radikalisering av elementen och antalet nivÄer i nÀtverket. Jag har skissat hur bÄda pÄverkar storleken. Idealt kombinerar vi bÄda.

Det Àr tydligt att den slutliga bredden pÄ Clos-nÀtverket Àr produkten av alla nivÄer av spine-switchen i den södra radikalen, d.v.s. hur mÄnga lÀnkar vi har nerÄt och hur det förgrenas. SÄ hÀr skalar vi nÀtverksstorleken.

NÀr det gÀller kapaciteten, sÀrskilt pÄ ToR-switchar, finns det tvÄ skalningsalternativ. Antingen kan vi, utan att Àndra den allmÀnna topologin, anvÀnda snabbare lÀnkar, eller sÄ kan vi lÀgga till fler plan.
Om vi ser pÄ den utvidgade versionen av Clos-nÀtverket (i nedre högra hörnet) och gÄr tillbaka till den hÀr bilden av Clos-nÀtverket nedan...

... sÄ Àr det exakt samma topologi, men pÄ denna bild har den komprimerats mer kompakt och fabrikplanen Àr staplade pÄ varandra. Det Àr samma sak.

Hur ser skalningen av Clos-nÀtverket ut i siffror? HÀr ger jag data om vilken maximala bredd nÀtverket kan fÄ, hur mÄnga rack, ToR-switchar eller leaf-switchar vi kan fÄ beroende pÄ vilket radikal av switchar som anvÀnds för spine-nivÄerna och hur mÄnga nivÄer vi anvÀnder.
HÀr visas hur mÄnga rack vi kan ha, hur mÄnga servrar samt ungefÀr hur mycket de kan dra med berÀkning av 20 kW per rack. Jag nÀmnde tidigare att vi siktar pÄ en klusterstorlek av cirka 100 000 servrar.
Det Ă€r tydligt att det i hela denna konstruktion finns tvĂ„ och ett halvt intressanta alternativ. Det finns ett alternativ med tvĂ„ lager spine-switchar och 64-porters switchar, vilket Ă€r lite under det vi vill ha. Sedan finns det bra alternativ för 128-porters (med radix 128) spine-switchar med tvĂ„ nivĂ„er, eller switchar med radix 32 med tre nivĂ„er. I alla fall dĂ€r vi har högre radix och fler nivĂ„er kan vi skapa ett mycket stort nĂ€tverk, men om man ser pĂ„ det förvĂ€ntade konsumtionsbehovet handlar det vanligtvis om gigawatt. Vi kan lĂ€gga kablar, men sĂ„ mycket elektricitet pĂ„ en enskild plats kommer vi sĂ€llan att kunna fĂ„. Om man ser pĂ„ statistiken, det offentliga datan om datacenter â det finns mycket fĂ„ datacenter som har en berĂ€knad kapacitet över 150 MW. Det som gĂ„r över det â Ă€r vanligtvis datacenterkampus, flera större datacenter som ligger relativt nĂ€ra varandra.
Det finns ocksÄ en viktig parameter. Om ni tittar pÄ den vÀnstra kolumnen, dÀr anges anvÀndbar bandbredd. Det Àr inte svÄrt att se att en betydande del av portarna i en Clos-nÀtverksstruktur gÄr till att koppla samman switcharna med varandra. AnvÀndbar bandbredd, det Àr den bandbredd som vi kan ge utÄt, mot servrarna. Naturligtvis pratar jag om hypotetiska portar och just bandbredden. Vanligtvis Àr lÀnkarna inom nÀtverket snabbare Àn lÀnkarna mot servrarna, men per enhet av bandbredd, sÄ mycket vi kan leverera utÄt till vÄr serverutrustning, sÄ finns det fortfarande ytterligare en del bandbredd inom sjÀlva nÀtverket. Ju fler nivÄer vi gör, desto större blir de specifika kostnaderna för att tillhandahÄlla denna bandbredd utÄt.
Dessutom Ă€r Ă€ven denna extra bandbredd inte helt likadan. SĂ„ lĂ€nge avstĂ„nden Ă€r korta kan vi anvĂ€nda nĂ„got i stil med DAC (direct attach copper, det vill sĂ€ga twinax-kablar) eller multimode-optik som fortfarande har rimliga priser. SĂ„ snart vi gĂ„r över till lĂ€ngre strĂ€ckor â handlar det vanligtvis om single mode-optik, och kostnaden för denna extra bandbredd ökar avsevĂ€rt.
Och Ă„terigen, tillbaka till den föregĂ„ende bilden, om vi skapar ett Clos-nĂ€t utan omteckning Ă€r det inte svĂ„rt att se diagrammet och hur nĂ€tverket byggs â genom att lĂ€gga till varje nivĂ„ av spine-switchar upprepar vi hela den bandbredd som fanns lĂ€ngst ner. Plus en nivĂ„ â plus hela den bandbredden, ytterligare lika mycket som fanns pĂ„ den föregĂ„ende nivĂ„n, portar pĂ„ switcharna, ytterligare lika mĂ„nga transceivrar. DĂ€rför Ă€r det mycket önskvĂ€rt att minimera antalet nivĂ„er av spine-switchar.
UtifrÄn denna bild Àr det tydligt att vi verkligen vill bygga pÄ nÄgot som liknar switchar med radix 128.

HÀr Àr i princip allt detsamma som jag just har berÀttat, detta bild Àr snarare för eftertÀnksamhet senare.

Vilka alternativ har vi för att vÀlja sÄdana switchar? En mycket trevlig nyhet för oss Àr att sÄdana nÀt faktiskt nu kan byggas pÄ enskaps-switchar. Och det Àr fantastiskt, de har en massa trevliga egenskaper. Till exempel har de nÀstan ingen inre struktur. Det betyder att de Àr enklare att bryta. De bryts, hurra för det, men bryts tyvÀrr helt och hÄllet. I modulÀra enheter finns en mÀngd fel (mycket otrevliga), nÀr det frÄn grannarna och kontrollplanet verkar fungera, men, till exempel, en del av fabriken har gÄtt förlorad och det fungerar inte pÄ full kapacitet. Och trafiken balanseras baserat pÄ att den Àr helt funktionell, och vi kan fÄ överbelastning.
Eller till exempel uppstĂ„r problem med backplane, eftersom det inom den modulĂ€ra enheten ocksĂ„ finns höghastighets SerDes â det Ă€r verkligen komplicerat inuti. Eller sĂ„ synkroniseras eller synkroniseras inte tabellerna mellan forwarding-elementen. Generellt innehĂ„ller en vilket som helst produktivt modulĂ€rt enhet, som bestĂ„r av mĂ„nga element, inuti sig vanligtvis samma Clos-nĂ€t, men som Ă€r mycket svĂ„rt att diagnostisera. Ofta Ă€r det till och med svĂ„rt för leverantören att diagnostisera.
Och det finns mÄnga felscenarier dÀr enheten degraderas men inte helt försvinner frÄn topologin. Eftersom vi har ett stort nÀtverk, som aktivt anvÀnder lastbalansering mellan identiska enheter, Àr nÀtverket vÀldigt regelbundet, det vill sÀga en vÀg dÀr allt fungerar inte skiljer sig pÄ nÄgot sÀtt frÄn en annan vÀg, Àr det mer fördelaktigt för oss att bara förlora en del av enheterna frÄn topologin Àn att hamna i en situation dÀr nÄgra av dem verkar fungera, men inte.

En annan trevlig funktion hos enchip-enheter Àr att de utvecklas bÀttre och snabbare. De har ocksÄ vanligtvis bÀttre kapacitet. Om vi tar stora sammansatta konstruktioner som vi har, sÄ blir kapaciteten per rack-enhet för portar med samma hastighet nÀstan dubbelt sÄ bra som hos modulÀra enheter. Enheter som byggs runt en enda chip blir betydligt billigare Àn modulÀra och konsumerar mindre energi.
Men naturligtvis Àr det inte bara sÄ enkelt, det finns nackdelar ocksÄ. För det första har de nÀstan alltid en mindre radix Àn modulÀra enheter. Om vi kan fÄ en enhet byggd runt ett chip med 128 portar, kan vi redan nu fÄ modulÀra enheter med flera hundra portar utan nÄgra större problem.
Det Ă€r markant mindre storlek pĂ„ forwarding-tabeller och som regel allt som rör skalbarhet i dataplans. Grunda buffertar. Och som regel ganska begrĂ€nsad funktionalitet. Men det visar sig att om man kĂ€nner till dessa begrĂ€nsningar och ser till att kringgĂ„ dem eller helt enkelt tar hĂ€nsyn till dem i tid, sĂ„ Ă€r det inte sĂ„ farligt. Det faktum att radix Ă€r mindre, utgör inte lĂ€ngre ett problem med de nyligen framtagna enheterna med radix 128, vi kan bygga i tvĂ„ lager av spines. Och med mindre Ă€n tvĂ„ gĂ„r det Ă€ndĂ„ inte att bygga nĂ„got intressant i den storleken. Med ett lager fĂ„r man alltid mycket smĂ„ kluster. Ăven vĂ„ra tidigare designer och krav översteg dem fortfarande.
I sjĂ€lva verket, om det finns nĂ„gon tvekan om lösningen, finns det ett annat sĂ€tt att skala upp. Eftersom det sista (eller första), den lĂ€gsta nivĂ„ dĂ€r servrar ansluts â ToR-switchar eller leaf-switchar, behöver vi inte ansluta en hel rack till dem. DĂ€rför, om lösningen faller kort med ungefĂ€r det dubbla, kan vi övervĂ€ga att bara anvĂ€nda en switch med större radix pĂ„ den lĂ€gsta nivĂ„n och ansluta, till exempel, tvĂ„ eller tre rack till en switch. Det Ă€r ocksĂ„ ett alternativ, med sina egna kostnader, men det fungerar helt okej och kan visa sig vara en bra lösning nĂ€r man behöver öka kapaciteten ungefĂ€r dubbelt.

Sammanfattningsvis bygger vi med en topologi med tvÄ nivÄer av spine-switchar och Ätta lager av fabriker.

Vad hÀnder dÄ med fysiken? Mycket enkla berÀkningar. Om vi har tvÄ nivÄer av spine-switchar, innebÀr det att vi totalt har tre nivÄer av switchar och vi förvÀntar oss att nÀtverket kommer att ha tre kabelsegment: frÄn servrar till leaf-switchar, till spine 1, till spine 2. Alternativen vi kan anvÀnda Àr twinax, multimode, single mode. HÀr mÄste vi övervÀga vilken bandbredd som Àr tillgÀnglig, vad det kommer att kosta, vilka fysiska dimensioner, vilka spÀnningar vi kan gÄ igenom och hur vi kommer att uppgradera det.
NÀr det gÀller kostnader kan allt ordnas i en linje. Twinaxar Àr avsevÀrt billigare Àn aktiv optik, billigare Àn multimode-transceivrar, rÀknat per strÀcka frÄn slutet, nÄgot billigare Àn 100-gigabit switchportar. Och det, observera, kostar mindre Àn single mode optik, eftersom det i datahallar av olika skÀl Àr meningsfullt att anvÀnda CWDM dÀr single mode krÀvs, att arbeta med parallell single mode (PSM) Àr inte sÀrskilt bekvÀmt, det blir mycket stora buntar av fiber, och om vi hÄller oss till dessa teknologier fÄr vi ungefÀr en sÄdan prishierarki.
En ytterligare kommentar: tyvÀrr fungerar det inte sÄ bra att anvÀnda uppdelade 100 till 4x25 multimode-portar. PÄ grund av konstruktionsegenskaperna Àr SFP28 inte mycket billigare Àn QSFP28 för 100 Gbit. Och denna uppdelning fungerar inte sÀrskilt bra för multimode.
En annan begrÀnsning Àr att pÄ grund av storleken pÄ berÀkningskluster, och antalet servrar, blir vÄra datacenter fysiskt stora. Det betyder att vi mÄste göra minst ett spÀnn med singlemode. à terigen, pÄ grund av den fysiska storleken pÄ Pods gÄr det inte att anvÀnda tvÄ spÀnn med twinax (kopparkablar).
SÄledes, om man optimerar utifrÄn kostnad och tar hÀnsyn till geometrin av denna konstruktion, fÄr vi ett spÀnn med twinax, ett spÀnn med multimode och ett spÀnn med singlemode med anvÀndning av CWDM. Detta tar hÀnsyn till möjliga uppgraderingsvÀgar.

Det ser ungefÀr ut sÄ hÀr, vad som nyligen har varit, vart vi Àr pÄ vÀg och vad som Àr möjligt. Det Àr klart, Ätminstone hur vi ska gÄ mot 50-gigabitiga SerDes för bÄde multimode och singlemode. Dessutom, om man ser pÄ det som finns i singlemode-transceivrar nu och för framtiden för 400G, sÄ kan det ibland hÀnda att nÀr 50G SerDes kommer in pÄ den elektriska sidan, kan optiken redan hantera 100 Gbps per bana. SÄ det Àr mycket möjligt att istÀllet för att gÄ till 50 kommer vi att gÄ till 100-gigabitiga SerDes och 100 Gbps per bana, eftersom mÄnga leverantörer förvÀntar sig att deras tillgÀnglighet ska komma ganska snart. Perioden nÀr 50G SerDes var de snabbaste verkar inte bli sÀrskilt lÄng, eftersom de första exemplaren av 100G SerDes nÀstan kommer nÀsta Är. Och efter en tid efter detta kommer de förmodligen att kosta rimliga pengar.

En annan aspekt nÀr det gÀller val av fysik. I princip kan vi redan nu anvÀnda 400- eller 200-gigabitiga portar med hjÀlp av 50G SerDes. Men det visar sig att det inte Àr sÀrskilt meningsfullt, eftersom, som jag nÀmnt tidigare, vi vill ha en tillrÀckligt stor radix pÄ switcharna, inom rimliga grÀnser, förstÄs. Vi vill ha 128. Om vi har begrÀnsad kapacitet pÄ chipet och ökar lÀnkens hastighet, sÄ minskar radix naturligtvis, det finns inga mirakel.
Och vi kan öka den totala kapaciteten genom att lÀgga till plan, och det finns inga sÀrskilda kostnader, man kan öka antalet plan. Om vi förlorar radix mÄste vi införa en ytterligare nivÄ, sÄ vid nuvarande berÀkningar, med den maximala tillgÀngliga kapaciteten pÄ ett chip, visar det sig att det Àr effektivare att anvÀnda 100-gigabitiga portar, eftersom de möjliggör en större radix.

NĂ€sta frĂ„ga handlar om hur fysiska strukturer Ă€r organiserade, men nu ur perspektivet av kabelinfrastruktur. Det visar sig att det Ă€r organiserat pĂ„ ett ganska intressant sĂ€tt. Kabeldragning mellan leaf-switchar och spines för första nivĂ„n â dĂ€r finns det inte sĂ„ mĂ„nga lĂ€nkar, det Ă€r ganska enkelt. Men om vi tar en plan, sĂ„ vad som hĂ€nder inuti â dĂ€r mĂ„ste alla spines för första nivĂ„n kopplas ihop med alla spines för andra nivĂ„n.
Dessutom finns det vanligtvis vissa önskemÄl om hur detta ska se ut inuti datacentret. Till exempel ville vi gÀrna samla kablar i buntar och dra dem pÄ ett sÄdant sÀtt att en högdensitets patchpanel kopplades helt till en annan patchpanel, för att undvika en djungel av lÀngder. Vi lyckades lösa denna uppgift. Om man ser pÄ den logiska topologin frÄn början, sÄ kan man se att planen Àr oberoende, varje plan kan byggas för sig sjÀlvt. Men nÀr vi lÀgger till sÄdana buntningar och vill dra en hel patchpanel till en annan patchpanel, sÄ mÄste vi blanda olika planer inom en och samma bunt och införa en mellanliggande struktur i form av optiska cross-connects, för att ompacka dem frÄn hur de var monterade pÄ ett segment, till hur de kommer att monteras pÄ ett annat segment. Tack vare detta fÄr vi en trevlig egenskap: all komplex switchning utanför racken. NÀr vi behöver snurra nÄgot kraftigt, "vrida planerna" som det ibland kallas i Clos-nÀt, sÄ koncentreras allt inom ett rack. Vi har ingen kraftigt splittrad switchning, Àven ner till individuella lÀnkar, mellan racken.

SÄ hÀr ser det ut ur perspektivet av den logiska organisationen av kabelinfrastruktur. PÄ bilden till vÀnster representerar de fÀrgglada blocken block av spine-switchar för första nivÄn, Ätta stycken, och fyra kabelfbundar som gÄr frÄn dem och korsar varandra med buntar som kommer frÄn block av spine-2-switchar.
SmĂ„ kvadrater indikerar korsningar. Ăverst till vĂ€nster ges en uppdelning av varje sĂ„dan korsning, det Ă€r faktiskt en modul för cross-connect med 512 pĂ„ 512 portar, som paketerar kablar sĂ„ att de kommer helt till en rack dĂ€r endast en spine-2 yta finns. Och till höger Ă€r en nĂ„got mer detaljerad uppdelning av denna bild relaterad till flera Pods pĂ„ spine-1 nivĂ„, och hur det packas i cross-connect, samt hur det kommer till spine-2 nivĂ„n.

SÄ hÀr ser det ut. En Ànnu inte helt sammansatt spine-2 rack (till vÀnster) och en cross-connect rack. TyvÀrr syns det inte sÄ mycket dÀr. Hela denna konstruktion hÄller just nu pÄ att sÀttas upp i ett av vÄra stora datacenter som expanderar. Detta Àr ett arbete under gÄng, det kommer att se bÀttre ut och vara mer fyllt.

En viktig frÄga: vi valde en logisk topologi och byggde det fysiska. Vad hÀnder med control plane? Det Àr ganska vÀlkÀnt frÄn driftserfarenhet att det finns ett antal yttranden om att link state protokoll Àr bra, de Àr bekvÀma att arbeta med, men tyvÀrr skalar de dÄligt i en tÀtt kopplad topologi. Och det finns en huvudsaklig faktor som hindrar detta - hur flooding fungerar i link state protokoll. Om vi bara tar flooding-algoritmen och ser pÄ hur vÄrt nÀtverk Àr uppbyggt, kan vi se att det kommer att bli en mycket stor fanout i varje steg, och det kommer helt enkelt att översvÀmma control plane med uppdateringar. Specifikt sÄdana topologier med den traditionella flooding-algoritmen i link state protokoll blandar sig mycket dÄligt.
Valet - att anvÀnda BGP. Hur man korrekt preparerar det beskrivs i RFC 7938 om anvÀndning av BGP i stora datacentra. De grundlÀggande idéerna Àr enkla: minimalt antal prefix pÄ en vÀrd och överhuvudtaget minimalt antal prefix i nÀtverket, anvÀnda aggregation om möjligt, och dÀmpa path hunting. Vi vill ha en mycket försiktig, mycket kontrollerad spridning av uppdateringar, det som kallas valley free. Vi vill att uppdateringar, nÀr de gÄr genom nÀtverket, sprids exakt en gÄng. Om de hÀrstammar frÄn botten gÄr de uppÄt, de sprids inte mer Àn en gÄng. Det fÄr inte finnas nÄgra zigzagg. Zigzaggar Àr mycket dÄliga.
För att göra detta anvÀnder vi ett ganska enkelt schema för att anvÀnda grundlÀggande BGP-mekanismer. Det vill sÀga att vi har eBGP som fungerar pÄ lÀnk-lokal, och autonoma system tilldelas pÄ följande sÀtt: autonomt system pÄ ToR, autonomt system för hela blocket av spineswitchar i en Pod, och ett gemensamt autonomt system för hela Top of Fabric. Det Àr inte svÄrt att kolla och försÀkra sig om att Àven normalt BGP-beteende ger oss den spridning av uppdateringar som vi önskar.

SjÀlvklart mÄste vi designa adresseringen och aggregeringen av adresser sÄ att det Àr kompatibelt med hur routingen Àr uppbyggd, för att sÀkerstÀlla stabilitet i kontrollplanet. L3-adressering i transporten Àr kopplad till topologin, eftersom utan detta gÄr det inte att uppnÄ aggrering, utan individuella adresser kommer att trÀnga in i routingsystemet. Och en annan sak Àr att aggregeringen, tyvÀrr, blandas inte sÄ bra med multi-path, för nÀr vi har multi-path och aggregering Àr allt bra sÄ lÀnge hela nÀtverket fungerar, utan avbrott. TyvÀrr, sÄ fort det uppstÄr avbrott i nÀtverket och symmetrin i topologin gÄr förlorad kan vi hamna i ett lÀge dÀr den aggregerade vÀgen annonserades, men vi kan inte gÄ vidare dit vi behöver. DÀrför Àr det bÀst att aggera dÀr det inte finns nÄgot multi-path, i vÄrt fall Àr det ToR-switchar.

Faktum Àr att aggregering Àr möjlig, men med försiktighet. Om vi kan göra en kontrollerad disaggregering nÀr det uppstÄr avbrott i nÀtet. Men det Àr en ganska komplicerad uppgift, vi har till och med funderat pÄ om det Àr möjligt att skapa ytterligare automation, och Àndliga automater som korrekt ska styra BGP för att uppnÄ önskat beteende. TyvÀrr Àr hanteringen av hörnfall mycket otydlig och komplex, och genom att ansluta extern utrustning till BGP löser denna uppgift sig inte vÀl.
Mycket intressant arbete har gjorts i detta avseende inom ramen för RIFT-protokollet, som kommer att diskuteras i nÀsta föredrag.

En annan viktig sak Àr hur dataplanerna skalas i tÀta topologier, dÀr vi har ett stort antal alternativa vÀgar. HÀr anvÀnds flera extra databasstrukturer: ECMP-grupper, som i sin tur beskriver grupper av Next Hop.
I en normalt fungerande nÀtverk, utan avbrott, nÀr vi gÄr upp genom Clos-topologin, rÀcker det att anvÀnda endast en grupp, eftersom allt som inte Àr lokalt beskrivs av default, och vi kan gÄ uppÄt. NÀr vi gÄr nerÄt i söder, sÄ Àr alla vÀgar inte ECMP, utan enkelvÀgs vÀgar. Allt ser bra ut. Problemet Àr att den klassiska Clos-topologin har den egenskapen att om vi tittar pÄ toppen av fiber, sÄ har varje element, upp till vilket som helst element nedanför, en vÀg. Om det sker avbrott lÀngs den vÀgen, sÄ blir just det elementet högst upp i fiber ogiltigt för de specifika prefix som ligger bakom den trasiga vÀgen. Men för de andra Àr det giltigt, och vi mÄste bryta ner ECMP-grupperna och införa ett nytt tillstÄnd.
Hur ser skalbarheten av data plane ut pÄ moderna enheter? Om vi gör LPM (longest prefix match) fungerar allt ganska bra, över 100k prefix. NÀr vi pratar om Next Hop-grupper, sÄ Àr det betydligt sÀmre, 2-4 tusen. Om vi pratar om tabellen som innehÄller beskrivningar av Next Hops (eller adjacencies), sÄ ligger det nÄgonstans mellan 16k och 64k. Det kan bli ett problem. Och hÀr kommer vi till en intressant avstickare: vad hÀnde med MPLS i datacentren? I princip ville vi göra det.

TvÄ saker hÀnde. Vi skapade mikrosementering pÄ vÀrdarna, sÄ vi behövde inte göra det i nÀtverket. Stödet frÄn olika leverantörer var inte sÄ bra, sÀrskilt inte med öppna implementationer pÄ white boxes med MPLS. Dessutom fungerar MPLS, Ätminstone dess traditionella implementationer, tyvÀrr mycket dÄligt med ECMP. Och det Àr anledningen till detta.

SÄ hÀr ser strukturen för ECMP-forwarding för IP ut. Ett stort antal prefix kan anvÀnda samma grupp och samma block av Next Hops (eller adjacencies, i olika dokumentationer för olika enheter kan detta kallas olika). PoÀngen Àr att detta beskrivs som utgÄende port och vilket MAC-adress som ska skrivas om för att nÄ rÀtt Next Hop. För IP ser allt enkelt ut, det gÄr att anvÀnda för ett mycket stort antal prefix i en och samma grupp, ett och samma block av Next Hops.

Den klassiska MPLS-arkitekturen innebÀr att beroende pÄ utgÄende grÀnssnitt kan etiketten skrivas om till olika vÀrden. DÀrför behöver vi ha en grupp och en block av Next Hops för varje ingÄende etikett. Och tyvÀrr, det skalar inte.
Det Àr inte svÄrt att se att vi i vÄr konstruktion behövde runt 4000 ToR-switchar, med en maximal bredd pÄ 64 vÀgar ECMP, om vi gÄr frÄn spina-1 till spina-2. Vi fÄr knappt plats, pÄ grÀnsen, i en ECMP-gruppstabell, om endast en prefix med ToR gÄr igenom, och vi fÄr överhuvudtaget inte plats i tabellen Next Hops.

Allt Àr inte hopplöst, eftersom arkitekturer av typ Segment Routing innebÀr globala etiketter. Formellt sett kunde vi Äterigen sammanfoga alla dessa block av Next Hops. För detta behövs en operation av typ wildcard: ta en etikett och skriva över den med samma utan ett specifikt vÀrde. Men tyvÀrr Àr det inte sÀrskilt nÀrvarande i de tillgÀngliga implementationerna.
Och slutligen, vi behöver föra in extern trafik till datacentret. Hur gör vi det? Tidigare leddes trafiken in i Clos-nĂ€tet uppifrĂ„n. Det fanns grĂ€nsrouter som kopplades till alla enheter pĂ„ Top of fabric. Denna lösning fungerar ganska bra i smĂ„ och medelstora storlekar. TyvĂ€rr, för att leda in trafik pĂ„ detta sĂ€tt symmetriskt till hela nĂ€tverket, mĂ„ste vi nĂ„ alla element pĂ„ Top of fabric samtidigt, och nĂ€r det blir mer Ă€n hundra visar det sig att vi behöver en stor radix Ă€ven pĂ„ grĂ€nsroutrarna. Ăverhuvudtaget kostar detta pengar, eftersom grĂ€nsroutrarna Ă€r mer funktionella, portarna pĂ„ dem kommer att vara dyrare, och det blir en ganska otymplig konstruktion.
Ett annat alternativ Àr att leda in sÄdan trafik underifrÄn. Det Àr inte svÄrt att inse att Clos-topologin Àr byggd sÄ att den trafik som kommer in underifrÄn, alltsÄ frÄn ToR, jÀmnt fördelas över nivÄerna pÄ hela Top of fabric under tvÄ iterationer, och dÀrmed belastar hela nÀtverket. DÀrför introducerar vi en speciell typ av Pod, Edge Pod, som sÀkerstÀller extern anslutning.
Det finns ytterligare ett alternativ. Till exempel gör Facebook sÄ hÀr. Det kallas Fabric Aggregator eller HGRID. En extra spine-nivÄ införs för att koppla ihop flera datacenter. Denna konstruktion Àr möjlig om vi inte har extra funktioner eller byten av inkapsling i skarvarna. Om det finns sÄdana, blir det extra touch points, vilket gör det komplicerat. Generellt sett uppstÄr fler funktioner och nÄgon slags membran som separerar olika delar av datacentret. Det Àr inte vÀrt att göra detta membran stort, men om det Àr nödvÀndigt, kan det vara meningsfullt att övervÀga att flytta det, göra det sÄ brett som möjligt och flytta det till vÀrdarna. SÄ gör mÄnga molnoperatörer. De har overlays som börjar med vÀrdarna.

Vilka utvecklingsmöjligheter ser vi? Först och frĂ€mst â förbĂ€ttrad stöd för CI/CD-pipeline. Vi vill flyga som vi testar och testa som vi flyger. Det gĂ„r inte sĂ„ bra eftersom infrastrukturen Ă€r stor och det Ă€r omöjligt att duplicera den för tester. Vi mĂ„ste förstĂ„ hur man inför testningsmoment i den operativa infrastrukturen utan att krascha den.
BĂ€ttre verktyg och bĂ€ttre övervakning Ă€r nĂ€stan aldrig överflödiga. FrĂ„gan Ă€r balansen mellan insatser och avkastning. Om det Ă€r möjligt att lĂ€gga till med rimliga resurser â Ă€r det mycket bra.
Ăppna operativsystem för nĂ€tverksenheter. De bĂ€sta protokollen och de bĂ€sta rutineringssystemen, till exempel RIFT. Dessutom behövs forskning om tillĂ€mpning av de bĂ€sta congestion control-schemana och eventuellt införandet av, Ă„tminstone pĂ„ vissa punkter, stöd för RDMA inom klustret.
Om vi ser pĂ„ det med siktet instĂ€llt pĂ„ en mer avlĂ€gsen framtid, behövs avancerade topologier och möjligen nĂ€tverk med lĂ€gre overhead. Bland de senaste sakerna â nyligen publicerades uppgifter om fabriksteknologi för HPC Cray Slingshot, som Ă€r baserad pĂ„ commodity Ethernet, men med möjlighet att anvĂ€nda mycket kortare rubriker. Resultatet blir mindre overhead.

Allt bör göras sĂ„ enkelt som möjligt, men inte enklare. Komplexitet Ă€r en fiende till skalbarhet. Enkelhet och regelbundna strukturer Ă€r vĂ„ra vĂ€nner. Om det Ă€r möjligt att skala ut nĂ„gonstans â gör det. Och just nu Ă€r det verkligen spĂ€nnande att arbeta med nĂ€tverksteknologier. Mycket intressant hĂ€nder. Tack.
KĂ€lla: habr.com
