Oleme vĂ€lja töötanud and keskusete vĂ”rgu kujunduse, mis vĂ”imaldab rakendada arvutusklastreid, mille suurus ĂŒletab 100 000 serverit ja mille piiksuliin (bisection bandwidth) ĂŒletab ĂŒhe petabaiti sekundis.
Dmitri Afanasevi ettekandest saad teada uue disaini pĂ”hialustest, selle topoloogiate skaleerimisest, nende probleemidest ja lahendusvariantidest, suunamisfunktsioonide ning kaasaegsete vĂ”rguseadmete forwarding plane skaleerimise omadustest tihedalt ĂŒhendatud (densely connected) topoloogiates, kus esineb palju ECMP marsruute. Lisaks rÀÀkis Dima lĂŒhidalt vĂ€lise ĂŒhenduse, fĂŒĂŒsilise tasandi, kaabelduse sĂŒsteemi ja mahtuvuse edasise suurendamise viisidest.
â Tere pĂ€evast kĂ”igile! Minu nimi on Dmitri Afanasev, olen Yandexi vĂ”rgu arhitekt ja tegelen peamiselt and keskusete vĂ”rgu kujundamisega.

Minu ettekande teema on Yandexi uuendatud and keskusete vĂ”rk. See on suuresti evolutsioon meie seni olnud disainist, kuid samas on ka mĂ”ned uued elemendid. See on ĂŒlevaatlik esitlus, kuna pidime kokku panema palju teavet lĂŒhikesse aega. Alustame loogilise topoloogia valikust. JĂ€rgnevalt vaatame control plane'i ja data plane'i skaleerimisprobleeme ning valime, mis juhtub fĂŒĂŒsilisel tasandil, tutvume mĂ”nede seadmete omadustega. Veidi puudutame ka and keskusel toimuvat MPLS-i, millest me rÀÀkisime mĂ”ni aeg tagasi.

Nii et mis on Yandex koormuste ja teenuste vaatenurgast? Yandex on tĂŒĂŒpiline hĂŒper-skaalija. Kui vaadata kasutajate poole, toimub meil peamiselt kasutajate pĂ€ringute töötlemine. Samuti on meil erinevad kordusvoogude teenused ja andmete edastamine, kuna meil on ka salvestusteenused. Kui liikuda lĂ€hemale taustale, siis ilmnevad seal infrastruktuuri koormused ja teenused, nĂ€iteks jaotatud objekti salvestamisruumid, andmete replikatsioon ja loomulikult pĂŒsivad jĂ€rjekorrad. Ăks peamisi koormatĂŒĂŒpe on MapReduce ja sarnased sĂŒsteemid, voogedastus, masinĂ”pe jne.

Kuidas on ĂŒles ehitatud infrastruktuur, millel kĂ”ik see toimub? Me oleme ĂŒsna tĂŒĂŒpiline hĂŒperkerija, ehkki vĂ”ime-olla oleme veidi lĂ€hemal sellele spektri poole, kus on vĂ€iksemad hĂŒperkerijad. Kuid meil on kĂ”ik atribuudid. Me kasutame tavalist riistvara ja horisontaalset skaleerimist igal pool, kus see on vĂ”imalik. Meil on tĂ€ielikult olemas ressursside ĂŒhendumine: me ei tööta eraldi masinate, eraldi riiulitega, vaid ĂŒhendame nad suurde vahetatavate ressursside basseini koos lisateenustega, mis tegelevad planeerimise ja allokatsiooniga ning töötame kogu selle basseini kallal.
Nii tekib meil jĂ€rgmine tase â arvutiklastri operatsioonisĂŒsteem. On vĂ€ga oluline, et me kontrollime tĂ€ielikult kasutatavat tehnoloogia steki. Me kontrollime lĂ”pppunkte (hoste), vĂ”rku ja tarkvarasteki.
Meil on mitmeid suuri andmekeskusi Venemaal ja vĂ€lismaal. Need on ĂŒhendatud MPLS tehnoloogiat kasutava selgrooga. Meie sisemine infrastruktuur on praktiliselt tĂ€ielikult ĂŒles ehitatud IPv6-le, aga kuna me peame teenindama vĂ€liseid andmeid, mis tulevad peamiselt IPv4 kaudu, peame leidma viisi, kuidas edastada IPv4 kaudu saabuvad pĂ€ringud frontend-i.serverid, ja veidi kĂ€ima veel vĂ€lises IPv4 internetis - nĂ€iteks indekseerimise jaoks.
Viimased paar andmekeskuse vĂ”rgukujunduse iteratsiooni kasutavad mitmetasandilisi Clos-topoloogiaid ja neis rakendatakse ainult L3-d. Me oleme L2-st loobunud juba mĂ”nda aega tagasi ja hingasime kergendatult. LĂ”puks sisaldab meie infrastruktuur sadu tuhandeid arvutiseadmestikke (servereid). Klaster maksimaalse suurusega oli mĂ”ni aeg tagasi umbes 10 tuhat serverit. See on suures osas tingitud sellest, kuidas need klassi operatsioonisĂŒsteemid, planeerijad, ressursside allokatsioon jne saavad töötada. Kuna infrastruktuuri tarkvara osas on toimunud edusamme, on nĂŒĂŒd eesmĂ€rk, et klastris oleks umbes 100 tuhat serverit, ja meil on tekkinud ĂŒlesanne - osata ehitada vĂ”rgutehaseid, mis vĂ”imaldavad tĂ”husalt ressursse sellises klastris ĂŒhendada.

Mida me tahame andmekeskuse vĂ”rgust? Esiteks palju odavat ja piisavalt ĂŒhtlaselt jaotatud ribalaiust. Sest vĂ”rk on see aluspind, mille abil saame ressursse koondada. Uus sihtmoodustuse suurus on umbes 100 000 serverit ĂŒhes klastris.
Me soovime ka loomulikult skaleeritavat ja stabiilset juhtimisplaani, sest nii suurel infrastruktuuril tekib ĂŒsna palju peavalu isegi juhuslike sĂŒndmuste tĂ”ttu, ja me ei taha, et meile toob peavalu ka juhtimisplaan. Samal ajal tahame maksimeerida selle seisundit. Mida vĂ€hem on seisundit, seda paremini ja stabiilsemalt kĂ”ik töötab, seda lihtsam on diagnostika.
Loomulikult vajame automatiseerimist, sest sellise infrastruktuuri kÀsitsi haldamine on vÔimatu, ja see oli juba mÔni aeg tagasi vÔimatu. Me vajame, kui vÔimalik, operatiivsete tegevuste tuge ja CI/CD toetust, nii palju kui see on vÔimalik.
Selle suuruse tĂ”ttu andmekeskustes ja klastrites on tekkinud ÀÀrmiselt terav vajadus toetada jĂ€rkjĂ€rgulist arendamist ja laiendamist teenuse katkestamata. Kui tuhandete masinatega klastrite puhul, vĂ”ib-olla, lĂ€hedal kĂŒmnes tuhande masina juurde, oli neid veel vĂ”imalik vĂ€lja anda kui ĂŒhte operatsiooni â see tĂ€hendab, et me plaanime infrastruktuuri laiendamist ja mitu tuhat masinat lisatakse kui ĂŒks operatsioon, siis sadade tuhandete masinate klastri puhul ei teki see kohe, see ehitatakse teatud aja jooksul. Ja on soovitav, et kogu selle aja vĂ€ltel oleks see, mis juba on vĂ€lja antud, see infrastruktuur, mis on rakendatud, saadaval.
Ja ĂŒks nĂ”ue, mis meil oli ja kadus: see on multitenantsi toetamine, see tĂ€hendab virtualiseerimist vĂ”i vĂ”rgu segmentimist. NĂŒĂŒd ei pea me seda tegema vĂ”rgu tehase tasemel, sest segmentimine on lĂ€inud hostidele, ja see on meile oluliselt lihtsustanud skaleerimist. TĂ€nu IPv6-le ja suurele aadressiruumile ei pidanud me sisemises infrastruktuuris kasutama dubleeritud aadresse, kogu aadressimine oli ja on unikaalne. Ja kuna me oleme vĂ”rgu filtreerimise ja segmentimise viinud hostidele, ei pea me looma mingisuguseid virtuaalseid vĂ”rguĂŒksusi andmekeskuse vĂ”rkudesse.

Eriti oluline asi on see, et meil ei ole vaja. Kui mÔningaid funktsioone saab vÔrgust eemaldada, muudab see elu tunduvalt lihtsamaks ja tavaliselt suurendab see saadavalolevate seadmete ja tarkvara valikut, samuti lihtsustab see diagnoosi.
Nii et mis on see, millest me loobuda saame, millest me saime loobuda, mitte alati rÔÔmuga hetkel, kui see juhtus, kuid suurima kergendusega, kui protsess lÔpetati?
Esiteks loobumine L2-st. Meile ei ole vajalik ei reaalne ega emuleeritud L2. Seda ei kasutata ulatuslikult, kuna me kontrollime rakenduste pilti. Meie rakendused skaleeruvad horisontaalselt, need töötavad L3 adresseerimisega, nad ei ole eriti mures selle ĂŒle, et mĂ”ni ĂŒksik instants kustub, lihtsalt lĂŒkatakse vĂ€lja uus, mis ei pea liikuma vanal aadressil, kuna on olemas eraldi teenuse avastamise ja monitoring tasand, mis tegeleb klastri masinate jĂ€lgimisega. Me ei ĂŒleĂŒldse ei delegeteeri seda ĂŒlesannet vĂ”rgule. VĂ”rgu ĂŒlesanne on edastada pakette punktist A punkti B.
Samuti ei ole meil olukordi, kus aadresse tuleb vĂ”rgus liigutada ja seda jĂ€lgida. Paljudes disainides on see tavaliselt vajalik, et toetada VM-i mobiilsust. Me ei kasuta virtuaalmasinate mobiilsust Yandexi sisemises infrastruktuuris ja usume ka, et isegi kui see on vajalik, ei tohiks seda teha vĂ”rgutoe abil. Kui on hĂ€dasti vaja, tuleb seda teha hostide tasandil ja panna aadressid, mis vĂ”ivad migreeruda, overlay-desse, et mitte puudutada ja mitte teha liiga palju dĂŒnaamilisi muudatusi marsruutimisprotsessis, nimelt underlay (transportvĂ”rk).
Veel ĂŒks tehnoloogia, mida me ei kasuta, on multicast. Soovijatele vĂ”in rÀÀkida, miks see on nii. See kergendab elu mĂ€rkimisvÀÀrselt, kuna kui keegi on sellega kokku puutunud ja nĂ€inud, milline on multicast'i control plane â kĂ”igis paigaldustes, vĂ€lja arvatud lihtsaimad, on see suur peavalu. Veelgi enam, on raske leida hĂ€sti töötavat avatud rakendust, nĂ€iteks.
Ja lĂ”puks projekteerime meie vĂ”rgud nii, et neis ei toimuks liiga palju muudatusi. Saame loota, et vĂ€liste sĂŒndmuste voog marsruutimisĂŒsteemis on vĂ€ike.

Millised probleemid ja piirangud tuleb arvestada, kui arendame andmekeskuse vĂ”rku? Muidugi hind. Skaleeritavus, kuni kui kaugele me soovime kasvada. Vajadus laiendada ilma teenuse katkestamiseta. Laitsmine, kĂ€ttesaadavus. NĂ€htavus, mis toimub vĂ”rgus, sĂŒsteemide jĂ€lgimise jaoks, operatiivmeeskondade jaoks. Automatiseerimise tugi â jĂ€lle, niivĂ”rd, kuivĂ”rd see on vĂ”imalik, kuna erinevaid ĂŒlesandeid saab lahendada erinevatel tasanditel, sealhulgas tĂ€iendavate kihtide loomisega. Ja mitte-[vĂ”imalikult]-sĂ”ltumatus tarnijatest. Kuigi erinevate ajalooliste perioodide jooksul, sĂ”ltuvalt sellest, millise lĂ”ike vĂ”tame, on see sĂ”ltumatus olnud kergem vĂ”i raskem saavutada. Kui vĂ”tame vĂ”rguseadmete kiipide lĂ”ike, siis seni on vĂ”imalik rÀÀkida sĂ”ltumatusest tarnijatest, kui soovime ka kiipe, millel on suur lĂ€bilaskevĂ”ime, vĂ€ga tinglikult.

Millise loogilise topoloogia jĂ€rgi me oma vĂ”rgu ĂŒles ehitame? See saab olema mitmetasandiline Clos. Tegelikult ei ole hetkel reaalseid alternatiive. Ja Clos-topoloogia on piisavalt hea, isegi kui vĂ”rrelda seda erinevate arenenud topoloogiatega, mis praegu rohkem akadeemilise huvi sfÀÀri kuuluvad, kui meil on lĂŒlitid, millel on suur radiks.

Kuidas on umbkaudu ĂŒles ehitatud mitmetasandiline Clos-vĂ”rk ja kuidas nimetatakse selles erinevaid elemente? Esiteks, tuulerose, et orienteeruda, kus on pĂ”hja, kus lĂ”una, kus ida, kus lÀÀs. Selliseid vĂ”rke ehitavad tavaliselt need, kellel on vĂ€ga suur lĂ€bilaskevĂ”ime lÀÀnest itta. Mis puutub teistesse elementidesse, siis ĂŒlal on kujutatud virtuaalset lĂŒlitit, mis on kokku pandud vĂ€iksematest lĂŒlititest. See on Clos-vĂ”rkude rekursiivse ehitamise pĂ”hieesmĂ€rk. Me vĂ”tame elemendid, millel on mingisugune radiks ja ĂŒhendame need nii, et see, mis saadakse, oleks vĂ”imalik vaadelda kui suurema radiksiga lĂŒlitit. Kui on veelgi rohkem vaja, saab protseduuri korrata.
NĂ€iteks kaheastmeliste Closi puhul, kui komponente, mis mu skeemil on vertikaalsed, on selgelt eristatavad, tuntakse neid tasanditena. Kui me ehitaksime Clos-i kolme taseme spine-lĂŒlititega (kĂ”ik, mis ei ole ÀÀrmuslikud ega ToR-lĂŒlitid ja mida kasutatakse ainult transiidiks), nĂ€eks tasandite struktuur keerulisem vĂ€lja, kaheastmelised nĂ€evad just niimoodi vĂ€lja. ToR- vĂ”i leaf-lĂŒlitite blokki ja sellega seotud esimese taseme spine-lĂŒliteid nimetameme Pod-iks. Spine-lĂŒlitid tasemel spine-1 Pod-i ĂŒlaosas on top of Pod, Pod-i tipp. LĂŒlitid, mis asuvad kogu tehase ĂŒlaosas, on tehase ĂŒlemine kiht, Top of fabric.

KĂŒsimus on loomulikult: Clos-vĂ”rgud on juba mĂ”nda aega ehitatud, idee ise on pĂ€rit klassikalise telefonitehnoloogia ja TDM-vĂ”rkude ajaloost. Kas on midagi paremat tekkinud, kas on vĂ”imalik midagi paremini teha? Jah ja ei. Teoreetiliselt jah, praktikaliselt lĂ€hitulevikus kindlasti mitte. Sest on olemas hulk huvitavaid topoloogiaid, millest mĂ”ned on isegi tootmises kasutusel, nĂ€iteks Dragonfly, mida kasutatakse HPC-rakendustes; samuti on huvitavaid topoloogiaid nagu Xpander, FatClique, Jellyfish. Kui vaadata ettekanne konverentsidelt nagu SIGCOMM vĂ”i NSDI viimasel ajal, vĂ”ib avastada ĂŒsna palju töid alternatiivsete topoloogiate kohta, mis omavad paremaid omadusi (ĂŒht- vĂ”i teistmoodi) kui Clos.
Kuid kĂ”igil neil topoloogiatel on ĂŒks huvitav omadus. See takistab nende rakendamist andmekeskuse vĂ”rkudes, mida me pĂŒĂŒame ehitada tarbehardwareâil ja mis maksavad piisavalt mĂ”istlikult. KĂ”igis nendes alternatiivsetes topoloogiates on enamiku ribalaius, kahjuks, mitte lĂŒhemate teede kaudu kergesti kĂ€tte saadav. SeetĂ”ttu kaotame kohe vĂ”imaluse kasutada traditsioonilist control plane-i.
Teoreetiliselt on ĂŒlesande lahendamise meetod teada. NĂ€iteks link staatuse modifikatsioonid, mis kasutavad k-lĂŒhemaid teid, kuid taas, ei ole selliseid protokolle, mis oleksid tootmises rakendatud ja massiliselt kergesti kĂ€ttesaadavad varustuses.
Lisaks, kuna suurem osa mahust ei ole saadaval lĂŒhimate teede kaudu, peame modifitseerima mitte ainult juhtimistaset, et see valiks kĂ”ik need teed (ja muide, see on oluliselt suurem seisund juhtimistasemel). Peame samuti modifitseerima edastusplaani ning tavaliselt on vaja vĂ€hemalt kaht tĂ€iendavat funktsiooni. See on vĂ”imalus teha kĂ”ik edastusotsused korraga, nĂ€iteks hostis. Tegelikult on see source routing, mida mĂ”nikord nimetatakse kirjanduses interconnection networks puhul all-at-once forwarding decisions. Ja veel adaptive routing â see on funktsioon, mida vajame meie vĂ”rkelementides, mis tĂ€hendab nĂ€iteks, et valime jĂ€rgmise hĂŒppe, lĂ€htudes teabest kĂ”ige madalama jĂ€rjekorra koormuse kohta. NĂ€iteks on vĂ”imalikud muud variandid.
Nii et suund on huvitav, kuid kahjuks ei saa me seda praegu rakendada.

Okei, peatume loogilisel Clos-topoloogial. Kuidas me seda skaleerime? Vaatame, kuidas see on korraldatud ja mida saame teha.

Clos-vÔrgus on kaks peamist parameetrit, mille abil saame tulemusi varieerida: elementide radix ja korralduse taseme arv. Mul on skeemiliselt kujutatud, kuidas mÔlemad mÔjutavad suurust. Ideaalis kombineerime mÔlemad.

On nĂ€ha, et Clos-vĂ”rgu lĂ”plik laius on lĂ”unapoolsete spainlĂŒlitite radiksi kĂ”ikide tasemete korrutis, see, kui palju linke meil allapoole on ja kuidas see hargneb. Nii me skaleerime vĂ”rgu suurust.

Mis puudutab mahtu, eriti ToR-lĂŒlitites, on siin kaks skaleerimisvĂ”imalust. VĂ”ime kas sĂ€ilitada ĂŒldise topoloogia, kasutades suurema kiiruslĂŒlitusi, vĂ”i saame lisada rohkem tasandeid.
Kui vaadata avatud Clos-vĂ”rgu versiooni (all paremas nurgas) ja naasta selle Clos-vĂ”rgu pildi juurde allâŠ

... on see tĂ€pselt sama topoloogia, kuid sellel slaidil on see kokkusurutud kompaktselt ja tehasetasandid on ĂŒksteise peale asetatud. See on sama asi.

Kuidas nĂ€eb vĂ€lja Clos-vĂ”rgu skaleerimine numbrites? Siin on mul andmed selle kohta, kui lai vĂ”ib vĂ”rgu maksimaalselt olla, kui palju seadmeid, ToR-lĂŒliteid vĂ”i leaf-lĂŒliteid, kui nad ei asu kappidest, saame vastavalt sellel, milline on meie spine-tasandite jaoks kasutatavate seadmete radiks ja kui palju tasandeid me kasutame.
Siin on toodud, kui palju meil vÔib olla serveririiuleid, palju servereid ja ligikaudu kui palju see kÔik vÔiks tarbida, arvestades 20 kW riiuli kohta. Natuke varem mainisin, et meie siht on 100 000 serveri suurune klaster.
On nĂ€ha, et kogu selles konstruktsioonis on huvitavad kaks ja pool varianti. On variandid kahe kihiga spine-switch'ide ja 64-portiliste switch'idega, mis jÀÀb pisut alla oodatule. Siis on fantastiliselt sobivad variandid 128-portiliste (radix 128) spine-switch'ide jaoks kahe kihiga vĂ”i radix 32 switch'id kolme kihiga. Ja igal juhul, kus on kĂ”rgem radix ja rohkem kihte, on vĂ”imalik luua vĂ€ga suur vĂ”rk, kuid kui vaadata oodatavat tarbimist, on seal tavaliselt gigavattide jagu. Kaabli saab paigaldada, kuid nii palju elektrit ĂŒhel alal on tĂ”enĂ€oliselt keeruline saada. Kui vaadata statistikat, on andmed andmekeskuste kohta vĂ€ga vĂ€he andmekeskusi, mille hinnanguline vĂ”imsus ĂŒletab 150 MW. Suuremad on tavaliselt andmekeskuste kompleksid, kus on mitu suurt andmekeskust, mis asuvad ĂŒksteisele ĂŒsna lĂ€hedal.
On veel ĂŒks oluline parameeter. Kui vaatate vasakut sammust, on seal toodud kasutatav ribalaius. Pole raske mĂ€rgata, et Clos-vĂ”rgus mĂ€rkimisvÀÀrne osa porte lĂ€heb lĂŒlitite omavaheliseks ĂŒhendamiseks. Kasutatav ribalaius, see, mis saab vĂ€lja anda suunas serverite poole, on see, mida me saame jagada. Loomulikult rÀÀgin ma tinglikest portidest ja just ribalaiusest. Ăldiselt on vĂ”rgus sisesed lingid kiirem, kui lingid serverite suunas, kuid igale ribalaiusele, mida saame meie serverivarustuse suunas anda, kulub veel osa ribalaiusest, mis jÀÀb vĂ”rgus endas. Mida rohkem tasandeid me teeme, seda suuremad on erakulud, et see ribalaius vĂ€lja anda.
Lisaks sellele, isegi see lisaribalaus ei ole tĂ€iesti ĂŒhtlane. Seni, kuni vahemaad on lĂŒhikesed, saame kasutada midagi DAC (direct attach copper, st twinax-kaablid) vĂ”i multimode optikat, mis maksab veel enam-vĂ€hem mĂ”istlikke hindasid. Kui me liigume pikemate vahemaade juurde â tavaliselt on see single mode optika ja selle lisaribalae hind tĂ”useb mĂ€rgatavalt.
Ja taas, kui me pöördume tagasi eelmiseks slaidiks, siis kui me teeme Clos-vĂ”rgu ilma ĂŒmberregistreerimiseta, siis on lihtne vaadata skeemi, vaadata, kuidas vĂ”rk ĂŒles ehitatakse â iga spaina-lĂŒliti taseme lisamisega kordame kogu seda ribad, mis oli all. Pluss tase â pluss kĂ”ik need samad ribad, veel sama palju, kui oli eelmisel tasemel, porte lĂŒlitites, veel sama palju ĂŒlemikuid. SeetĂ”ttu on soovitav minimaalselt vĂ€hendada spine-lĂŒlitite arvu.
Selle pildi pĂ”hjal on nĂ€ha, et me tahaksime ehitada midagi, mis sarnaneb 128-radix lĂŒlititega.

Siin on pÔhimÔtteliselt kÔik sama, mida ma praegu rÀÀkisin, see slaid on pigem hilisemaks arutamiseks.

Millised valikud meil on, mida me saame selliste lĂŒlitite valimiseks valida? Meie jaoks on vĂ€ga meeldiv uudis, et nĂŒĂŒd on lĂ”puks vĂ”imalik selliseid vĂ”rke ehitada ĂŒhekiibiliste lĂŒlitite pĂ”hjal. Ja see on vĂ€ga tore, neil on palju meeldivaid omadusi. NĂ€iteks on neil peaaegu puudulik sisemine struktuur. See tĂ€hendab, et nad on lihtsamad purunema. Nad purunevad, kus ilma selleta, kuid Ă”nneks purunevad nad tĂ€ielikult. Moodulise seadmega on palju erinevaid rikkeid (vĂ€ga ebameeldivad), kui kĂŒlgne pursue ja control plane tundub töötavat, kuid nĂ€iteks on osad tehasest kadunud, ja see töötab mitte tĂ€isvĂ”imsusel. Ja liiklus tasakaalustatakse selle pĂ”hjal, et see on tĂ€iesti funktsionaalne, ning me vĂ”ime saada ĂŒlekoormuse.
VĂ”i nĂ€iteks tekivad probleemid backplane'iga, kuna ka moodulise seadme sees on kĂ”rge kiirus SerDes'id â see on tĂ”eliselt keeruline seestpoolt. VĂ”i sĂŒnkroniseeritakse vĂ”i ei sĂŒnkroniseerita tabelid edastamise elementide vahel. ĂhesĂ”naga, ĂŒkskĂ”ik milline tootlik mooduliseer vĂ”rgu seade, mis koosneb suurest hulgast elementidest, sisaldab endas reeglina seda sama Clos-vĂ”rku, mida on aga vĂ€ga raske diagnoosida. Sageli on isegi tootjale endale keeruline diagnoosida.
Ja sellel on palju vigu, mille korral seade degradeerub, kuid ei kao tĂ€ielikult topoloogiast. Kuna meil on suur vĂ”rk, kasutatakse aktiivselt tasakaalustamist identsete elementide vahel, ning vĂ”rk on vĂ€ga regulaarne, mis tĂ€hendab, et ĂŒks tee, kus kĂ”ik toimib, ei erine kuidagi teisest teest. SeetĂ”ttu on meile kasulikum kaotada lihtsalt osa seadmeid topoloogiast, kui sattuda olukorda, kus mĂ”ned neist nĂ€iliselt töötavad, kuid tegelikult ei tööta.

JĂ€rgmine meeldiv omadus ĂŒheskiibiga seadmetel on see, et need arenevad paremini ja kiiremini. Samuti on neil tavaliselt parem mahutavus. Kui vĂ”tta suuremad koostatud konstruktsioonid, mis meil on, siis mahutavus rackiĂŒhiku kohta sama kiirusel on peaaegu kaks korda parem, kui moodulitega seadmetel. Ăheskiibiga seadmed on mĂ€rgatavalt odavamad kui moodulid ja tarbivad vĂ€hem energiat.
Aga loomulikult pole see kĂ”ik ilma probleemideta, on ka miinuseid. Esiteks on tavaliselt vĂ€iksem radiks kui moodulitel. Kui me saame ĂŒheskiibilise seadme, mis on ehitatud 128 pordi jaoks, siis moodulise seadme puhul saame nĂŒĂŒd ilma eriliste probleemideta mitu sada porti.
See tĂ€hendab mĂ€rgatavalt vĂ€iksemat edastuslahenduste ja tavaliselt kĂ”ik, mis puudutab andmeplaadi skaleeritavust. Madalad vahemĂ€lud. Ja tavaliselt ĂŒsna piiratud funktsionaalsus. Kuid selgub, et kui teada neid piiranguid ja Ă”igeaegselt hoolitseda nende ĂŒletamise vĂ”i lihtsalt silmas pidamise eest, ei ole see nii hirmutav. Radiks, mis on vĂ€iksem, ei ole uute seadmete puhul, mille radiks on 128, enam probleem, saame ehitada kahte rihma kihti. Ja vĂ€iksema kui kahe taseme korral ei saa me ikka midagi huvitavat meie suuruses ehitada. Ăhe tasemega tekivad vĂ€ga vĂ€ikesed klastrid. Isegi meie eelnevad kujundused ja nĂ”uded ĂŒletasid neid endiselt.
Tegelikult, kui lahendus on kuskil piiri peal, on veel ĂŒks vĂ”imalus skaleerimiseks. Kuna viimane (vĂ”i esimene) madalaim tase, kuhu serverid ĂŒhendatakse, on ToR-lĂŒlitid vĂ”i leaf-lĂŒlitid, ei pea me neid ĂŒhendama ĂŒhe serveririiuliga. SeetĂ”ttu, kui lahendus jÀÀb kuskil kaks korda alla, vĂ”iks mĂ”elda, et kasutada lihtsalt lĂŒlitit, millel on madalamal tasemel suurem radiks ja ĂŒhendada, nĂ€iteks, kaks-kolm riiulit ĂŒhe lĂŒlitiga. See on samuti variant, millel on oma kulud, kuid see töötab hĂ€sti ja vĂ”ib osutuda heaks lahenduseks, kui on vaja suurendada kuskil kaks korda suurust.

KokkuvÔttes ehitame kahe tasandi spinerite topoloogiaga, koos kaheksakihilise tehasega.

Mis saab fĂŒĂŒsikast? VĂ€ga lihtsad arvutused. Kui meil on kaks tasandit spinereid, siis on meil kokku kolm tasandit lĂŒliteid ning me ootame, et vĂ”rku tuleb kolm kaablisegmenti: serveritest leaf-lĂŒlititesse, spiin 1 ja spiin 2. Kasutatavad variandid on twinax, multimode, single mode. Siin tuleb arvestada, milline ribalaius on saadaval, kui palju see maksab, millised on fĂŒĂŒsilised mÔÔdud, millised kaugused me saame katta ning kuidas me uuendame.
Hinnas on kĂ”ik vĂ”imalik ritta seada. Twinaxid maksavad mĂ€rgatavalt vĂ€hem kui aktiivne optika, odavamad kui multimode'i edastajad, kui lĂ€htuda kaugusest, ja pisut odavamad kui 100-gigabittine lĂŒliti port. Ja tĂ€helepanu, see maksab vĂ€hem kui single mode optika, sest kohtades, kus on vaja single mode'i, on andmekeskustes mitmel pĂ”hjusel mĂ”istlik kasutada CWDM-i ning paralleelse single mode'iga (PSM) töötamine pole eriti mugav, tekivad vĂ€ga suured kiudude pakid ning kui jÀÀda nende tehnoloogiate juurde, on hindade hierarhia umbes selline.
Veel ĂŒks mĂ€rkuse: kahjuks ei tööta 100 4x25 multimode'i portideæè§Ł kasutamine hĂ€sti. SFP28 edastajate konstruktsiooni eripĂ€ra tĂ”ttu on see mitte palju odavam kui 100 Gbit QSFP28. Ja selleæè§Ł multimode'i jaoks ei tööta eriti hĂ€sti.
Ăks piirang on see, et meie andmekeskused on fĂŒĂŒsiliselt suured serverite arvu ja arvutuste klastrite suuruse tĂ”ttu. See tĂ€hendab, et vĂ€hemalt ĂŒks vahe peab olema ĂŒhe moodiga. JĂ€llegi, Pods'i fĂŒĂŒsilise suuruse tĂ”ttu ei saa kahta vahet lĂ€bi twinax-kaablite teha.
Kui optimeerida hinna kohaselt ja arvestades selle konstruktsiooni geomeetriat, saame ĂŒhe twinax vahe, ĂŒhe multimood vahe ja ĂŒhe ĂŒhemoode vahe kasutades CWDM-i. See arvestab vĂ”imalikke uuenduste teid.

Umbes nii nĂ€eb vĂ€lja see, mis oli hiljuti, kuhu me suundume ja mis on vĂ”imalik. On selge, et vĂ€hemalt on suund 50-gigabitiste SerDes-ide poole, nii multimoodile kui ka ĂŒhemoodele. Veelgi enam, kui vaadata, mis on praegu ĂŒhemoode transiivide maailmas ja tulevikus 400G puhul, siis sageli kui tulevad 50G SerDesid elektrilise poolelt, siis optilisse vĂ”ivad juba minna 100 Gbps ribal. Seega on tĂ€iesti vĂ”imalik, et 50-le ĂŒlemineku asemel toimub ĂŒleminek 100-gigabitistele SerDes-idele ja 100 Gbps ribal, sest paljude mĂŒĂŒjate sĂ”nul oodatakse nende saadavust ĂŒsna pea. Aeg, mil 50G SerDes olid kĂ”ige kiirem, tundub, et ei jÀÀ kauaks, sest 100G SerDes-i esimesed mudelid on peagi tulemas.

Veel ĂŒks nĂŒanss fĂŒĂŒsika valiku osas. PĂ”himĂ”tteliselt saame juba praegu kasutada 400- vĂ”i 200-gigabitisi porte 50G SerDes-ide abil. Kuid selgub, et selles pole erilist mĂ”tet, sest nagu ma varem rÀÀkisin, tahame me lĂŒlitites piisavalt suurt radikast, loomulikult mĂ”istlikus ulatuses. Me soovime 128. Ja kui meie kiibi maht on piiratud ja me suurendame linki kiirus, siis radikas loomulikult vĂ€heneb.
Kuid me saame ĂŒldist mahtu suurendada tasapindade arvu kaudu, ja sellega pole erilisi kulusid, saab lisada tasapindade arvu. Ja kui me kaotame radika, tuleb lisada tĂ€iendav tase. Seega, praeguste arvutuste tĂ”ttu, praeguse maksimaalse kergesti kĂ€tte saadava mahu ĂŒhe kiibi kohta, selgub, et tĂ”husam on kasutada 100-gigabitisi porte, sest need vĂ”imaldavad saavutada suuremat radikat.

JĂ€rgmine kĂŒsimus on, kuidas on korraldatud fĂŒĂŒsika, kuid juba kaabelinfrastuktuuri vaatenurgast. Selgub, et see on korraldatud ĂŒsna lĂ”busalt. Kaablite ĂŒhendamine leaf-lĂŒlitite ja esimese taseme spine'ide vahel pole nii palju linke, seal on kĂ”ik suhteliselt lihtne. Kuid kui me vaatame ĂŒhte taset, siissee, mis toimub sees, tuleb kĂ”iki esimese taseme spine'e ĂŒhendada kĂ”igi teise taseme spine'idega.
Pluss, tavaliselt on teatud soovid selle kohta, kuidas see peaks vĂ€lja nĂ€gema andmekeskuses. NĂ€iteks soovisime vĂ€ga kaablid bundeldada ja tĂ”mmata neid nii, et ĂŒks kĂ”rge tihedusega patch-paneel lĂ€heks tĂ€ielikult ĂŒhte patch-paneeli, et ei tekiks pikkuste zood. Meil Ă”nnestus see probleem lahendada. Kui algselt vaadata loogilist topoloogiat, siis on nĂ€ha, et tasemed on iseseisvad, iga taset saab ehitada eraldi. But kui me lisame sellise bundeldamise ja tahame tĂ”mmata tĂ€ieliku patch-paneeli ĂŒhte patch-paneeli, siis tuleb ĂŒhe bundli sees segada erinevaid tasemeid ja tutvustada vaheĂŒksust optiliste ristĂŒhendustega, et pakkida need ĂŒmber selliselt, nagu nad olid kogutud ĂŒhes segmendis, selliselt, nagu nad kogutakse teises segmendis. Selle tĂ”ttu saame meeldiva omaduse: kogu keeruline kommuteerimine ei lĂ€he rack'ide piiridest vĂ€lja. Kui on vaja midagi vĂ€ga tugevalt punuda, "tasa tasemed ĂŒmber pöörata", nagu neid mĂ”nikord Clos-vĂ”rkudes nimetatakse, on see kĂ”ik keskendunud ĂŒhte racki. Meil ei ole tugevalt lahti vĂ”etud, kuni individuaalsete linkideni, kommuteerimisi rack'ide vahel.

Nii see vĂ€lja nĂ€eb kaabelinfrastuktuuri loogilise korralduse vaatenurgast. Pildil vasakul tĂ€histavad erinevat vĂ€rvi plokid esimese taseme spine-lĂŒlitite plokke, neid on kaheksa, ja nendest lĂ€htuvad neli kaablite bundli, mis lĂ€hevad ja ristuvad bundlitega, mis tulevad spine-2 lĂŒlitite plokkidelt.
VĂ€ikesed ruudud tĂ€histavad ristumiskohti. Ăleval vasakul on iga sellise ristumiskoha skeem, mis on tegelikult 512x512 sadamatega ristĂŒhenduse moodul, mis pakib kaablid nii, et need jĂ”uavad tĂ€ielikult ĂŒhte kapisse, kus on ainult ĂŒks spine-2 tasand. Paremal on selle pildi skeem, mis on pisut detailsem seoses mitme Pods'iga spine-1 tasemel ja kuidas see pakitakse ristĂŒhenduses ning kuidas see jĂ”uab spine-2 tasemele.

Nii see vĂ€lja nĂ€eb. Mitte tĂ€ielikult kokku pandud spine-2 kapp (vasakul) ja ristĂŒhenduse kapp. Kahjuks ei ole seal vĂ€ga palju nĂ€htaval. Kogu see konstruktsioon paisatakse praegu ĂŒhe meie suurima andmekeskuse juurde, mis laiendab oma ala. See on protsess, mis on pooleli, see nĂ€eb vĂ€lja kaunim ja tĂ€idetakse paremini.

Oluline kĂŒsimus: valiti loogiline topoloogia, ehitati fĂŒĂŒsika. Mis saab control plane'ist? Kasutuskogemusest on hĂ€sti teada, et on mĂ”ned esitlused, et link state protokollid on head, nendega on meeldiv töötada, kuid kahjuks ei skaala need tihedalt seotud topoloogias hĂ€sti. Ja on ĂŒks peamine tegur, mis sellele takistuseks saab â see, kuidas flooding link state protokollides töötab. Kui vĂ”tta flooding algoritm ja vaadata, kuidas meie vĂ”rk on ĂŒles ehitatud, siis on iga sammu juures vĂ€ga suur fanout ja see ĂŒle ujutab control plane'i uuendustega. Konkreetsetes topoloogiates ja traditsioonilise flooding algoritmiga link state protokollides seguneb see vĂ€ga halvasti.
Valik â kasutada BGP-d. Kuidas seda Ă”igesti ette valmistada, on kirjas RFC 7938-s BGP kasutamise kohta suurtes andmekeskustes. PĂ”hiideed on lihtsad: minimaalne eelliste arv hostil ja ĂŒldiselt minimaalne eelliste arv vĂ”rgus, kasutada agregatsiooni, kui see on vĂ”imalik, ja summutada path hunting. Soovime vĂ€ga hoolikat, vĂ€ga kontrollitud uuenduste levikut, seda, mida nimetatakse valley free. Tahame, et uuendused, liikudes mööda vĂ”rgustikku, leviksid tĂ€pselt ĂŒks kord. Kui need pĂ€rinevad alt, liiguvad nad ĂŒles, levinevad mitte rohkem kui ĂŒks kord. Ei tohi olla zigs- ja zags-mustreid. Zigzagid on vĂ€ga halvad.
Selleks kasutame piisavalt lihtsat skeemi, et rakendada BGP pĂ”himehhanisme. See tĂ€hendab, et meil on kasutusel eBGP, mis töötab link local, ja autonoomsed sĂŒsteemid on mÀÀratud jĂ€rgmiselt: autonoomne sĂŒsteem ToR-l, autonoomne sĂŒsteem kogu spain-1-lĂŒlitite ploki jaoks ĂŒhe Pod-i sees ja ĂŒldine autonoomne sĂŒsteem kogu Top of Fabrici jaoks. Pole raske vaadata ja veenduda, et isegi BGP normaalne kĂ€itumine annab meile selle uuenduste leviku, mida me soovime.

Loomulikult tuleb projekteerida adresseerimine ja aadresside agregatsioon nii, et see oleks kooskĂ”las marsruutimise ĂŒlesehitusega, et tagada control plane stabiilsus. L3 adresseerimine transportimise ajal on seotud topoloogiaga, sest ilma selleta ei saavutata agregatsiooni, ilma selleta ĂŒksteised aadressid pÀÀsevad marsruutimisĂŒsteemi. Ja veel ĂŒks asi â agregatsioon, paraku, ei segune vĂ€ga hĂ€sti multi-path'iga, sest kui meil on multi-path ja agregatsioon, on kĂ”ik hĂ€sti, kui kogu vĂ”rk töötab, kus ei ole tĂ”rkeid. Paraku, kui vĂ”rku ilmuvad tĂ”rked ja topoloogia sĂŒmmeetria kaob, vĂ”ime sattuda punkti, kus aggregaat, millest anunseeritud on, ei ole edasi liikuda sinna, kuhu me tahame. SeetĂ”ttu on parem agregatsioon teostada seal, kus edasi ei ole multi-path, meie puhul ToR-lĂŒlitites.

Tegelikult on agregatsiooni teostamine vĂ”imalik, kuid ettevaatlikult. Kui suudame luua kontrollitud de-agregatsiooni vĂ”rgu tĂ”rgete ilmnemisel. Kuid see on piisavalt keeruline ĂŒlesanne, oleme isegi arvutanud, kas see on teostatav, kas on vĂ”imalik lisada lisamehhanisme, ja lĂ”ppautomaatide sĂŒsteem, mis tĂ”ukab BGP-d Ă”igesse kĂ€itumisse. Kahjuks on nurgajuhtumite kĂ€sitlemine vĂ€ga ebaselge ja keeruline, ning BGP-le vĂ€liste lisade seadistamine ei lahenda seda probleemi hĂ€sti.
Selles osas on RIFT protokolli raames vÀga huvitav töö tehtud, millest rÀÀgitakse jÀrgmises ettekandes.

Veel ĂŒks oluline asi on see, kuidas andmeplaanid skaleeruvad tihedate topoloogiate korral, kus on palju alternatiivseid teid. Selleks kasutatakse mitmeid tĂ€iendavaid andmestruktuure: ECMP rĂŒhmad, mis omakorda kirjeldavad Next Hop rĂŒhmad.
Tavaliselt toimivas vĂ”rgus, ilma tĂ”rgeteta, kui liigume ĂŒlespoole Clos-topoloogias, on piisav kasutada ainult ĂŒhte gruppi, kuna kĂ”ik, mis ei ole lokaalne, kirjeldatakse vaikimisi, vĂ”ime liikuda ĂŒles. Kui liigume ĂŒlemiselt allapoole lĂ”una suunas, siis kĂ”ik teed ei ole ECMP, need on ĂŒhe tee teed. KĂ”ik on hĂ€sti. Probleem on aga see, ja Clos-topoloogia klassikaline eripĂ€ra on see, et kui vaatame Top of fabric, on igal elemendil, mis asub all, ĂŒks tee. Kui selle tee mööda toimuvad tĂ”rked, siis see konkreetne element ĂŒlemises osas muutub kehtetuks just nende prefiksite jaoks, mis asuvad katki minnes. Kuid teiste jaoks on see kehtiv ja meid on sunnitud purustama ECMP gruppe ja tutvustama uut olekut.
Kuidas nĂ€eb vĂ€lja andmeplaadi skaleeritavus tĂ€napĂ€evastes seadmetes? Kui teeme LPM (pikima prefiksi vaste), siis on kĂ”ik piisavalt hĂ€sti, ĂŒle 100 tuhande prefiksi. Kui rÀÀgime Next Hop gruppidest, siis on olukord halvem, 2-4 tuhat. Kui rÀÀgime tabelist, mis sisaldab Next Hops (vĂ”i adjacencies) kirjeldust, siis see on kuskil 16k kuni 64k. Ja see vĂ”ib muutuda probleemiks. Ja siin jĂ”uame huvitava kĂ”rvalepĂ”ikeni: mis juhtus MPLS-iga andmekeskustes? PĂ”himĂ”tteliselt soovisime seda rakendada.

Juhtus kaks asja. Me rakendasime mikrosegmentatsiooni hostides, seega ei olnud meil vaja seda teha vĂ”rgus. Erinevate tootjate toetusega polnud kĂ”ik vĂ€ga head, veel vĂ€hem avatud rakendustega valgetes kastides, mis kasutavad MPLS-i. Lisaks on MPLS, vĂ€hemalt selle traditsioonilised rakendused, kahjuks vĂ€ga halvasti ECMP-ga ĂŒhtlustatud. Ja see on pĂ”hjus.

N niimoodi nĂ€eb vĂ€lja ECMP edastamise struktuur IP jaoks. Suur hulk prefikseid vĂ”ib kasutada ĂŒhte ja sama gruppi ning sama Next Hops bloki (vĂ”i adjacencies, erinevates dokumentatsioonides vĂ”ivad need erinevalt nimetada). Idee on selles, et seda kirjeldatakse kui vĂ€ljundporti ja sellele, kuidas MAC-aadressi ĂŒmber kirjutada, et jĂ”uda Ă”ige Next Hop'i juurde. IP jaoks on kĂ”ik lihtne, saab kasutada vĂ€ga suurt hulka prefikseid sama grupi, sama Next Hops ploki peal.

Klassikaline MPLSi arhitektuur eeldab â sĂ”ltuvalt vĂ€ljundliidest, vĂ”ib silt ĂŒmber kirjutada erinevatele vÀÀrtustele. SeetĂ”ttu peame hoidma igas grupis ja iga Next Hops bloki jaoks iga sisendmĂ€rgi kohta. Ja see, kahjuks, ei skaleeru.
Ei ole raske nĂ€ha, et meie konstruktsioonis vajasime umbes 4000 ToR-lĂŒlitit, maksimaalne laius â 64 teed ECMP-le, kui liikuda spina-1-st spina-2 suunas. Me vaevu mahume ĂŒhte ECMP-gruppide tabelisse, kui ainult ĂŒks prefiks ToR-ist lahkub, ja ei mahtu ĂŒldse Next Hopide tabelisse.

KĂ”ik ei ole lootusetu, kuna Segment Routing tĂŒĂŒpi arhitektuurid eeldavad globaalseid silte. Formaalselt vĂ”iks kĂ”ik need Next Hopide plokid taas koondada. Selleks on vajalik operatsioon tĂŒĂŒpi wild card: vĂ”tta silt ja kirjutada sama silt ilma konkreetse vÀÀrtuseta. Kuid kahjuks ei ole see saadaval olevates rakendustes kuigi hĂ€sti esindatud.
Ja lĂ”puks, peame tooma andmekeskusesse vĂ€lise liikluse. Kuidas seda teha? Varem viidi liiklus Clos-vĂ”rku ĂŒlevalt. See tĂ€hendab, et olid piiratud marsruuterid, mis ĂŒhendasid kĂ”ik seadmed Top of fabric-iga. See lahendus töötab ĂŒsna hĂ€sti vĂ€ikestes ja keskmise suurusega seadmetes. Kahjuks, et viia liiklust selliselt sĂŒmmeetriliselt kogu vĂ”rku, tuleb jĂ”uda korraga kĂ”ikidele Top of fabric elementidele, ja kui neid on rohkem kui sada, selgub, et vajame suuri radikaale ka piiratud marsruuterites. Ăldiselt maksab see raha, kuna piiratud marsruuterid on funktsionaalsemad, nende portide hind on kĂ”rgem ja see osutub mitte just ilusaks konstruktsiooniks.
Teine variant on tuua sellist liiklust alt. Ei ole raske veenduda, et Clos-topoloogia on ĂŒles ehitatud nii, et alt tulev liiklus, st ToR-ilt, jaguneb ĂŒhtlaselt tasemete vahel kogu Top of fabrici ulatuses kahe iteratsiooni jooksul, laadides kogu vĂ”rku. SeetĂ”ttu tutvustame spetsiaalset tĂŒĂŒpi Pod-i, Edge Pod-i, mis tagab vĂ€list ĂŒhenduvust.
On veel vĂ”imalusi. NĂ€iteks teeb nii Facebook, kellel on see tuntud kui Fabric Aggregator vĂ”i HGRID. Lisatakse tĂ€iendav spinaal, et ĂŒhendada mitu andmekeskust. Selline struktuur on vĂ”imalik, kui meil pole liidestes tĂ€iendavaid funktsioone vĂ”i kapseldumise muutusi. Kui need on olemas, siis on need tĂ€iendavad touch points, mis teeb asja keeruliseks. Ăldiselt tekib rohkem funktsioone ja mingisugune membraan, mis eraldab erinevaid andmekeskuse osi. Suurt membraani pole vaja teha, aga kui see on mingil pĂ”hjusel vĂ€ga vajalik, on mĂ”istlik kaaluda selle ĂŒleviimist, teha see vĂ”imalikult laiek ja viia hostidesse. Niimoodi toimivad nĂ€iteks paljud pilveteenuse operaatorid, kellel on overlay-d, mis algavad hostidest.

Milliseid arengu vĂ”imalusi me nĂ€eme? Esiteks â CI/CD torustiku toe parandamine. Me soovime lennata nii, nagu me testime, ja testida nii, nagu me lendame. See ei Ă”nnestu vĂ€ga hĂ€sti, kuna infrastruktuur on suur ja selle kopeerimine testimiseks on vĂ”imatu. Tuleb mĂ”ista, kuidas tuua testimise elemendid tootmisinfrastruktuuri, samal ajal seda kokku kukkumata.
Parim instrumentatsioon, parim jĂ€lgimine ei ole peaaegu kunagi liig. Kogu kĂŒsimus on pingutuste ja tasu tasakaalus. Kui mĂ”istlike jĂ”ududega on vĂ”imalik midagi juurde lisada â on see suurepĂ€rane.
AvaoperatsioonisĂŒsteemid vĂ”rgu seadmete jaoks. Parimad protokollid ja parimad marsruutimisĂŒsteemid, nagu RIFT. Samuti on vajalikud uuringud parimate ummistuse kontrollimise skeemide rakendamise kohta ja vĂ”ib-olla RDMA toe sisselaskmine vĂ€hemalt mĂ”nes punktis klastrite piires.
Kui vaadata kaugema tuleviku poole, on vajalikud tĂ€iustatud topoloogiad ja vĂ”ib-olla vĂ”rgud, mis kasutavad vĂ€iksemat overhead'i. Uudsetest asjadest â hiljuti ilmusid publikatsioonid HPC Cray Slingshot tehnoloogia kohta, mis pĂ”hineb odaval Ethernetil, kuid millel on vĂ”imalus kasutada palju lĂŒhemaid pealkirju. Tulemuseks on overhead'i vĂ€henemine.

KĂ”ik tuleks teha nii lihtsaks kui vĂ”imalik, kuid mitte lihtsamaks. Keerukus on skaleeritavuse vaenlane. Lihtsus ja regulaarne struktuur on meie sĂ”brad. Kui kuskil on vĂ”imalik teha scale out â tehke seda. Ja ĂŒldiselt on praegu tore tegeleda vĂ”rgutehnoloogiatega. Toimub palju huvitavat. AitĂ€h.
Allikas: habr.com
