Tupperware: Facebook's Kubernetes-moardner?

Effisjint en betrouber behear fan klusters op elke skaal mei Tupperware

Tupperware: Facebook's Kubernetes-moardner?

Hjoed op Systems @Scale konferinsje wy hawwe Tupperware yntrodusearre, ús klusterbehearsysteem dat konteners orkestreart oer miljoenen servers dy't hast al ús tsjinsten útfiere. Wy hawwe Tupperware foar it earst ynset yn 2011, en sûnt dy tiid is ús ynfrastruktuer groeid fan 1 datacenter oan hiel 15 geo-ferspraat datasintra. Al dy tiid stie Tupperware net stil en ûntwikkele by ús. Wy sille jo sjen litte hoe't Tupperware earste-klasse klusterbehear leveret, ynklusyf handige stipe foar steatlike tsjinsten, ien kontrôlepaniel foar alle datasintra, en de mooglikheid om kapasiteit tusken tsjinsten yn realtime te fersprieden. Wy sille ek de lessen diele dy't wy hawwe leard as ús ynfrastruktuer evoluearret.

Tupperware fiert ferskate taken. Applikaasje-ûntwikkelders brûke it om applikaasjes te leverjen en te behearjen. It pakket de applikaasjekoade en ôfhinklikens yn in ôfbylding en leveret it oan servers as konteners. Containers leverje isolaasje tusken applikaasjes op deselde server, sadat ûntwikkelders omgean mei de applikaasjelogika en gjin soargen hoege te meitsjen oer it finen fan servers of it behearen fan updates. Tupperware kontrolearret ek de prestaasjes fan 'e tsjinner, en as it in mislearring fynt, ferfiert it konteners fan 'e problematyske tsjinner.

Yngenieurs foar kapasiteitsplanning brûke Tupperware om serverkapasiteit te allocearjen oan teams basearre op budzjet en beheiningen. Se brûke it ek om servergebrûk te ferbetterjen. Data-sintra-operators wende har nei Tupperware om konteners goed te fersprieden oer datasintra en konteners te stopjen of te ferpleatsen by ûnderhâld. Hjirmei fereasket it ûnderhâld fan servers, netwurken en apparatuer minimale minsklike yntervinsje.

Tupperware arsjitektuer

Tupperware: Facebook's Kubernetes-moardner?

Tupperware PRN-arsjitektuer is ien fan 'e regio's fan ús datasintra. De regio bestiet út ferskate datacentergebouwen (PRN1 en PRN2) yn 'e buert. Wy binne fan plan ien kontrôlepaniel te meitsjen dat alle servers yn ien regio beheart.

Applikaasje-ûntwikkelders leverje tsjinsten yn 'e foarm fan Tupperware-banen. In baan bestiet út meardere konteners, en se allegearre typysk rinne deselde applikaasje koade.

Tupperware is ferantwurdlik foar it leverjen fan konteners en it behearen fan har libbenssyklus. It bestiet út ferskate komponinten:

  • De Tupperware-frontend leveret API's foar de brûkersynterface, CLI, en oare automatisearringsynstruminten wêrmei jo kinne ynteraksje mei Tupperware. Se ferbergje de hiele ynterne struktuer fan Tupperware-baaneigners.
  • Tupperware Scheduler is in kontrôlepaniel ferantwurdlik foar it behearen fan 'e kontener- en wurklibbenssyklus. It wurdt ynset op regionaal en wrâldwide nivo, wêr't de regionale planner servers yn ien regio beheart en de globale planner servers út ferskate regio's beheart. De planner is ferdield yn shards, en elke shard beheart in set fan banen.
  • De scheduler-proxy fan Tupperware ferberget de ynterne sharding en leveret in handich, ferienige kontrôlepaniel foar Tupperware-brûkers.
  • De Tupperware-allokator jout konteners ta oan servers. De planner behannelet it stopjen, begjinnen, aktualisearjen en failover fan konteners. Op it stuit kin ien allocator de hiele regio beheare sûnder op te splitsen yn shards. (Let op it ferskil yn terminology. Bygelyks, de planner yn Tupperware komt oerien mei de kontrôle paniel yn Kubernetes, en de Tupperware-allokator wurdt in planner neamd yn Kubernetes.)
  • De boarnebroker bewarret de boarne fan wierheid foar de server- en tsjinsteveneminten. Wy rinne ien boarne makelder foar eltse data sintrum, en it bewarret alle ynformaasje oer de tsjinners yn dat data sintrum. De boarnebroker en it kapasiteitsbehearsysteem, as boarnefoarsjenningssysteem, beslute dynamysk hokker planderlevering kontrolearret hokker tsjinner. De tsjinst foar sûnenskontrôle kontrolearret servers en bewarret gegevens oer har sûnens yn 'e boarnebroker. As in server problemen hat of ûnderhâld nedich is, fertelt de boarnebroker de allocator en planner om de konteners te stopjen of te ferpleatsen nei oare servers.
  • De Tupperware Agent is in daemon dy't rint op elke tsjinner dy't de foarsjenning en ferwidering fan konteners behannelet. Applikaasjes rinne yn in kontener, wat har mear isolaasje en reprodusearberens jout. Op ferline jier Systems @Scale konferinsje Wy hawwe al beskreaun hoe't yndividuele Tupperware-konteners wurde makke mei ôfbyldings, btrfs, cgroupv2 en systemd.

Underskate skaaimerken fan Tupperware

Tupperware is op in protte manieren fergelykber mei oare klusterbehearsystemen lykas Kubernetes en Mesos, mar der binne ek ferskillen:

  • Ynboude stipe foar steatlike tsjinsten.
  • In inkele kontrôlepaniel foar servers yn ferskate datasintra om de levering fan konteners te automatisearjen op basis fan yntinsje, ûntbining fan klusters en ûnderhâld.
  • Dúdlike ferdieling fan it kontrôlepaniel foar zoomjen.
  • Elastyske komputer lit jo macht fersprieden tusken tsjinsten yn realtime.

Wy hawwe dizze koele funksjes ûntwikkele om in ferskaat oan steatleaze en steatlike applikaasjes te stypjen oer in enoarme wrâldwide dielde serverfloat.

Ynboude stipe foar steatlike tsjinsten.

Tupperware betsjinnet in ferskaat oan krityske steatlike tsjinsten dy't persistente produktgegevens opslaan foar Facebook, Instagram, Messenger en WhatsApp. Dit kinne grutte winkels wêze fan kaai-wearde-pearen (bgl. ZippyDB) en tafersjoch op gegevensrepositories (bygelyks, ODS Gorilla и Scuba). It behâlden fan steatlike tsjinsten is net maklik, om't it systeem der foar soargje moat dat de oanfier fan konteners grutskalige steuringen ferneare kin, ynklusyf netwurk- of stroomûnderbrekkingen. En wylst konvinsjonele techniken, lykas it fersprieden fan konteners oer foutdomeinen, goed wurkje foar steatleaze tsjinsten, hawwe steatlike tsjinsten ekstra stipe nedich.

Bygelyks, as in tsjinner flater makket ien database replika net beskikber, moatte jo ynskeakelje automatysk ûnderhâld dat sil bywurkje de kearnen op 50 tsjinners út in pool fan 10? Hinget ôf fan 'e situaasje. As ien fan dizze 50 tsjinners hat in oare replika fan deselde databank, it is better om te wachtsjen en net ferlieze 2 replika's tagelyk. Om dynamysk besluten te meitsjen oer systeemûnderhâld en prestaasjes, hawwe wy ynformaasje nedich oer ynterne gegevensreplikaasje en de pleatsingslogika fan elke steatlike tsjinst.

De TaskControl-ynterface lit steatlike tsjinsten beynfloedzje besluten dy't ynfloed hawwe op de beskikberens fan gegevens. Mei help fan dizze ynterface, de planner warskôget eksterne applikaasjes oer container operaasjes (herstart, update, migraasje, ûnderhâld). In steatlike tsjinst ymplemintearret in kontrôler dy't Tupperware fertelt as it feilich is om elke operaasje út te fieren, en dizze operaasjes kinne tydlik wurde wiksele of fertrage. Yn it foarbyld hjirboppe koe de databankkontrôler Tupperware fertelle om 49 fan 'e 50 tsjinners te aktualisearjen, mar lit in spesifike tsjinner (X) foar no allinnich litte. As gefolch, as de kernel-fernijingsperioade foarby giet en de databank noch net by steat is om de problematyske replika te herstellen, sil Tupperware de X-tsjinner noch bywurkje.

Tupperware: Facebook's Kubernetes-moardner?

In protte steatlike tsjinsten yn Tupperware brûke TaskControl net direkt, mar fia ShardManager, in mienskiplik platfoarm foar it meitsjen fan steatlike tsjinsten op Facebook. Mei Tupperware kinne ûntwikkelders har yntinsje oantsjutte foar krekt hoe't konteners moatte wurde ferdield oer datasintra. Mei ShardManager spesifisearje ûntwikkelders har yntinsje foar hoe't data-shards moatte wurde ferdield oer konteners. ShardManager is bewust fan it pleatsen fan gegevens en replikaasje fan har applikaasjes en kommunisearret mei Tupperware fia de TaskControl-ynterface om konteneroperaasjes te plannen sûnder direkte belutsenens fan applikaasjes. Dizze yntegraasje simplifies it behear fan steatlike tsjinsten sterk, mar TaskControl is by steat om mear. Bygelyks, ús wiidweidige webtier is steatleas en brûkt TaskControl om it taryf fan fernijings foar konteners dynamysk oan te passen. Úteinlik de webtier is yn steat om meardere softwarereleases fluch te foltôgjen per dei sûnder kompromittearjen fan beskikberens.

Behear fan servers yn datasintra

Doe't Tupperware foar it earst lansearre yn 2011, waard elke serverkluster beheard troch in aparte planner. Doe wie in Facebook-kluster in groep serverracks ferbûn mei ien netwurkswitch, en it datasintrum hie ferskate klusters. De planner koe allinich tsjinners yn ien kluster beheare, wat betsjuttet dat de baan net ferspraat koe oer meardere klusters. Us ynfrastruktuer groeide, wy skreau hieltyd mear klusters ôf. Sûnt Tupperware koe net ferpleatse de baan fan de ôfskaft kluster nei oare klusters sûnder feroarings, it easke in soad muoite en soarchfâldige koördinaasje tusken applikaasje ûntwikkelers en data sintrum operators. Dit proses resultearre yn fergriemde boarnen doe't servers moannen idle wiene fanwegen ûntmantelingsprosedueres.

Wy hawwe in boarne-makelaar makke om it probleem fan kluster ûntmanteling op te lossen en oare soarten ûnderhâldstaken te koördinearjen. De boarnebroker hâldt alle fysike ynformaasje yn ferbân mei in server en beslút dynamysk hokker planner elke server kontrolearret. Dynamysk keppeljen fan servers oan planners lit de planner servers beheare yn ferskate datasintra. Sûnt in Tupperware-taak is net langer beheind ta ien kluster, kinne Tupperware-brûkers oanjaan hoe't konteners moatte wurde ferdield oer flaterdomeinen. Bygelyks, in ûntwikkelder kin ferklearje syn yntinsje (sizze: "rinne myn baan op 2 fault domeinen yn de PRN regio") sûnder spesifisearje spesifike beskikberens sônes. Tupperware sels sil geskikte tsjinners fine om dizze bedoeling út te fieren, sels as it kluster of tsjinst útskeakele is.

Skaalber om it heule wrâldwide systeem te stypjen

Histoarysk is ús ynfrastruktuer ferdield yn hûnderten tawijde serverpools foar yndividuele teams. Troch fersnippering en gebrek oan noarmen, wy hiene hege operasjonele kosten, en idle tsjinners wiene dreger in gebrûk wer. Op de konferinsje fan ferline jier Systems @Skaal wy presintearre ynfrastruktuer as in tsjinst (IaaS), dy't ús ynfrastruktuer ferienigje moatte yn in grut inkele serverpark. Mar in inkele serverpark hat syn eigen swierrichheden. It moat foldwaan oan bepaalde easken:

  • Scalability. Us ynfrastruktuer groeide doe't wy datasintra tafoege yn elke regio. Servers binne lytser en enerzjysuniger wurden, sadat der yn elke regio folle mear binne. Dêrtroch kin in inkele planner per regio it oantal konteners net omgean dat kin wurde útfierd op hûnderttûzenen servers yn elke regio.
  • Reliabiliteit Sels as de planner safolle opskaald wurde kin, betsjut de grutte omfang fan 'e planner dat d'r in hegere risiko is foar flaters en in heule kontenersregio ûnbehannelber wurde kin.
  • Marzje foar flaters. Yn it gefal fan in enoarme ynfrastruktuerfout (bygelyks de servers dy't de planner útfiere, falle net fanwege in netwurkfal of stroomûnderbrekking), moatte de negative gefolgen mar in part fan 'e servers yn 'e regio beynfloedzje.
  • It gemak fan gebrûk. It kin lykje dat jo moatte rinne ferskate ûnôfhinklike planners foar ien regio. Mar út in gemaksperspektyf makket ien inkeld yngongspunt yn it dielde swimbad fan in regio it makliker om kapasiteit en banen te behearjen.

Wy ferdielde de planner yn shards om de problemen op te lossen fan it behâld fan in grut dielde swimbad. Eltse scheduler shard beheart syn eigen set fan banen yn 'e regio, en dit ferleget it risiko ferbûn mei de scheduler. As it dielde swimbad groeit, kinne wy ​​mear skemar-shards tafoegje. Foar Tupperware-brûkers sjogge shards en plannerproxy's as ien kontrôlepaniel. Se hoege net te wurkjen mei in bulte skerpen dy't taken orkestreare. Scheduler-shards binne fûneminteel oars fan 'e klusterplanners dy't wy earder brûkten, doe't it kontrôlepaniel waard ferdield sûnder statysk de dielde pool fan servers te dielen neffens de netwurktopology.

Ferbetterje de effisjinsje fan gebrûk mei Elastic Computing

Hoe grutter ús ynfrastruktuer, hoe wichtiger it is om ús servers effisjint te brûken om ynfrastruktuerkosten te optimalisearjen en de lading te ferminderjen. D'r binne twa manieren om de effisjinsje fan servergebrûk te fergrutsjen:

  • Elastysk komputer - skaalje online tsjinsten yn stille oeren ôf en brûk befrijde servers foar offline wurkdruk, lykas masine learen en MapReduce-banen.
  • Overloading - Pleats online tsjinsten en batch-workloads op deselde servers sadat batch-workloads mei lege prioriteit rinne.

De knelpunt yn ús datasintra is macht gebrûk. Dêrom leaver wy lytse, enerzjysunige tsjinners dy't tegearre jouwe mear ferwurkjen macht. Spitigernôch, op lytse servers mei in bytsje CPU en ûnthâld, oerladen is minder effektyf. Fansels kinne wy ​​pleatse ferskate konteners fan lytse tsjinsten op ien lyts enerzjysunige tsjinner dy't konsumearje bytsje prosessor middels en ûnthâld, mar grutte tsjinsten sille hawwe lege prestaasjes yn dizze situaasje. Dêrom advisearje wy ûntwikkelders fan ús grutte tsjinsten om se te optimalisearjen sadat se hiele servers brûke.


Yn prinsipe ferbetterje wy gebrûkseffisjinsje mei elastyske komputer. In protte fan ús wichtige tsjinsten, lykas de nijsfeed, berjochtenfunksje, en front-end webtier, ferskille ôfhinklik fan 'e tiid fan' e dei. Wy skaalje online tsjinsten mei opsetsin ôf yn stille oeren en brûke befrijde servers foar offline wurkdruk, lykas masine learen en MapReduce-banen.

Tupperware: Facebook's Kubernetes-moardner?

Wy witte út ûnderfining dat it it bêste is om folsleine servers te leverjen as ienheden fan elastyske kapasiteit, om't grutte tsjinsten sawol grutte donateurs as grutte konsuminten fan elastyske kapasiteit binne, en binne optimalisearre om folsleine servers te brûken. As de tsjinner wurdt frijlitten fan online tsjinst yn rêstige oeren, de boarne makelder lease de tsjinner oan de planner te fieren offline workloads derop. As de online tsjinst in pykbelêsting ûnderfynt, ropt de boarnemakelaar fluch de liende tsjinner op en bringt it, tegearre mei de planner, werom nei de online tsjinst.

Lessen leard en plannen foar de takomst

Yn 'e ôfrûne 8 jier hawwe wy Tupperware ûntwikkele om by te hâlden mei de rappe groei fan Facebook. Wy diele wat wy hawwe leard en hoopje dat it oaren sil helpe om rap groeiende ynfrastruktuer te behearjen:

  • Stel in fleksibele ferbining op tusken it kontrôlepaniel en de tsjinners dy't it beheart. Dizze fleksibiliteit lit it kontrôlepaniel servers yn ferskate datasintra beheare, helpt by it automatisearjen fan de ûntbining en ûnderhâld fan klusters, en makket dynamyske kapasiteitsallokaasje mooglik mei help fan elastyske komputer.
  • Mei ien kontrôlepaniel yn 'e regio wurdt it handiger om te wurkjen mei taken en makliker om in grutte dielde serverfloat te behearjen. Tink derom dat de kontrôle paniel ûnderhâldt in inkele punt fan yngong, sels as syn ynterne struktuer wurdt skieden om redenen fan skaalfergrutting of skuld tolerânsje.
  • Mei help fan in plugin-model kin it kontrôlepaniel eksterne applikaasjes ynformearje oer kommende konteneroperaasjes. Boppedat kinne steatlike tsjinsten de plugin-ynterface brûke om kontenerbehear oan te passen. Mei dit plugin-model biedt it kontrôlepaniel ienfâld, wylst se effisjint in protte ferskillende steatlike tsjinsten tsjinje.
  • Wy leauwe dat elastysk komputerjen, wêr't wy folsleine tsjinners fan donortsjinsten nimme foar batchbanen, masinelearen en oare net-driuwende tsjinsten, de optimale manier is om de effisjinsje fan lytse, enerzjysunige tsjinners te ferbetterjen.

Wy begjinne krekt te ymplementearjen single globale dielde tsjinner float. Op it stuit binne sawat 20% fan ús servers yn in dielde pool. Om 100% te berikken, moatte in protte problemen oanpakt wurde, ynklusyf it behâld fan in dielde opslachpool, automatisearjen fan ûnderhâld, behearen fan cross-tenant-easken, ferbetterjen fan servergebrûk, en ferbetterjen fan stipe foar wurkloads foar masine learen. Wy kinne net wachtsje om dizze útdagings oan te nimmen en ús suksessen te dielen.

Boarne: www.habr.com

Keapje betroubere hosting foar siden mei DDoS-beskerming, VPS VDS-tsjinners 🔥 Keapje betroubere websidehosting mei DDoS-beskerming, VPS VDS-tsjinners | ProHoster