Also sammelt Dir Metriken. Wéi mir sinn. Mir sammelen och Metriken. Natierlech, néideg fir Betrib. Haut wäerte mir iwwer den éischte Link vun eisem Iwwerwaachungssystem schwätzen - e statsd-kompatibele Aggregatiounsserver
Vun eise fréieren Artikelen (
Fuerderung 1. Github, den Entwéckler vum Projet, huet opgehalen et z'ënnerstëtzen: Patches a Fixen ze verëffentlechen, eis an (net nëmmen eis) PR akzeptéieren. An de leschte Méint (irgendwo vu Februar-Mäerz 2018) ass d'Aktivitéit erëm opgaang, awer virdru war et bal 2 Joer komplett Rou. Zousätzlech gëtt de Projet entwéckelt
Fuerderung 2. Genauegkeet vun Berechnungen. Brubeck sammelt insgesamt 65536 Wäerter fir Aggregatioun. An eisem Fall, fir e puer Metriken, während der Aggregatiounsperiod (30 Sekonnen), kënne vill méi Wäerter ukommen (1 um Héichpunkt). Als Resultat vun dëser Echantillon schéngen déi maximal a Minimum Wäerter nëtzlos. Zum Beispill, wéi dëst:
Wéi et war
Wéi et sollt sinn
Aus deemselwechte Grond ginn d'Bomme generell falsch berechent. Füügt hei e Bug mat engem 32-Bit Float-Iwwerfluss, deen allgemeng de Server op Segfault schéckt wann hien eng scheinbar onschëlleg Metrik kritt, an alles gëtt super. De Feeler ass iwwregens net fixéiert ginn.
An, endlech, Fuerderung X. Zu der Zäit vum Schreiwen si mir prett et un all 14 méi oder manner Aarbechtsstatistiken Implementatiounen ze presentéieren déi mir konnten fannen. Loosst eis virstellen datt eng eenzeg Infrastruktur sou vill gewuess ass datt 4 Millioune MPS net méi duergeet. Oder och wann et nach net gewuess ass, awer d'Metriken si scho sou wichteg fir Iech, datt souguer kuerz, 2-3 Minutte Dips an den Charts scho kritesch kënne ginn an d'Baut vun oniwwersiichtlecher Depressioun tëscht Manager verursaachen. Well d'Behandlung vun Depressioun eng dankbar Aufgab ass, sinn technesch Léisunge gebraucht.
Éischtens, Feeler Toleranz, sou datt e plötzleche Problem um Server keng psychiatresch Zombie Apokalypse am Büro verursaacht. Zweetens, Skaléieren fir méi wéi 4 Millioune MPS ze akzeptéieren, ouni déif an de Linux Netzwierkstack ze gräifen a roueg "an der Breet" op déi erfuerderlech Gréisst ze wuessen.
Well mir Plaz fir Skaléieren haten, hu mir decidéiert mat Feeler Toleranz unzefänken. "IWWER! Feeler Toleranz! Et ass einfach, mir kënnen et maachen ", hu mir geduecht an 2 Server lancéiert, eng Kopie vu Brubeck op jidderee erhéicht. Fir dëst ze maachen, hu mir de Traffic mat Metriken op béid Serveren kopéiert a souguer fir dëst schreiwen
Wann Dir e bëssen iwwer de Problem denkt a gläichzäiteg Schnéi mat enger Schaufel gräift, da kënnt déi folgend offensichtlech Iddi am Kapp: Dir braucht e Statsd deen am verdeelt Modus funktionéiere kann. Dat ass, een deen d'Synchroniséierung tëscht Noden an der Zäit a Metrik implementéiert. "Natierlech existéiert esou eng Léisung méiglecherweis scho," hu mir gesot a sinn op Google gaang .... A si hunn näischt fonnt. Nodeems Dir d'Dokumentatioun fir verschidde Statistiken duerchgaang ass (
An dann hu mir eis un d'"Spillsaach" Statsd - bioyino erënnert, déi um Just for Fun Hackathon geschriwwe gouf (den Numm vum Projet gouf vum Skript virum Ufank vum Hackathon generéiert) a realiséiert datt mir dréngend eis eege Statistiken brauchen. Fir wat?
- well et ze wéineg statsd Klonen op der Welt sinn,
- well et méiglech ass déi gewënscht oder no un der gewënschter Feeler Toleranz a Skalierbarkeet ze bidden (inklusiv Synchroniséierung vun aggregéierte Metriken tëscht Serveren an d'Léisung vum Problem vu Konflikter ze schécken),
- well et méiglech ass Metriken méi genee ze berechnen wéi Brubeck mécht,
- well Dir kënnt selwer méi detailléiert Statistike sammelen, déi brubeck eis praktesch net geliwwert huet,
- well ech hat eng Chance meng eegen hyperperformance verdeelt Skala Labo Applikatioun ze programméieren, déi wäert net komplett d'Architektur vun engem aneren ähnlechen hyperfor widderhuelen ... gutt, dat ass et.
Op wat ze schreiwen? Natierlech, zu Rust. Firwat?
- well et schonn eng Prototyp Léisung gouf,
- well den Auteur vum Artikel deemools Rust scho kannt huet an et gär huet eppes dran ze schreiwen fir d'Produktioun mat der Geleeënheet et an Open-Source ze setzen,
- well Sprooche mat GC fir eis net gëeegent sinn wéinst der Natur vum kritt Traffic (bal Echtzäit) a GC Pausen si praktesch inakzeptabel,
- well Dir braucht maximal Leeschtung vergläichbar mat C
- well Rust stellt eis mat ängschtlech concurrency, a wa mir ugefaang et an C / C ze schreiwen ++, mir hätten an nach méi Schwachstelle raked, Puffer Iwwerschwemmungen, Course Konditiounen an aner grujeleg Wierder wéi Brubeck.
Et gouf och en Argument géint Rust. D'Firma hat keng Erfarung fir Projeten am Rust ze kreéieren, an elo plangen mir et och net am Haaptprojet ze benotzen. Dofir gouf et sérieux Ängscht, datt näischt géif klappen, mä mir hu beschloss eng Chance ze huelen a probéiert.
Zäit ass vergaang ...
Endlech, no e puer gescheitert Versich, war déi éischt Aarbecht Versioun prett. Wat ass geschitt? Dëst ass wat geschitt ass.
All Node kritt säin eegene Set vu Metriken a accumuléiert se, an aggregéiert keng Metriken fir déi Aarte wou hire komplette Set fir endgülteg Aggregatioun erfuerderlech ass. D'Node si matenee verbonne mat enger Aart vu verdeelt Sperrprotokoll, wat Iech erlaabt ënnert hinnen deen eenzegen ze wielen (hei hu mir gekrasch) dee wäert ass, Metriken un de Grousse ze schécken. Dëse Problem gëtt am Moment geléist duerch
UDP Päck mat Metriken sinn onbalancéiert tëscht Noden op Netzwierkausrüstung duerch eng einfach Round Robin. Natierlech parséiert d'Netzwierk Hardware net den Inhalt vu Paketen a kann dofir vill méi wéi 4M Pakete pro Sekonn zéien, fir net Metriken ze ernimmen iwwer déi et guer näischt weess. Wa mir berücksichtegen datt d'Metriken net eng Kéier an all Paket kommen, da gesi mir keng Leeschtungsproblemer op dëser Plaz vir. Wann e Server Crash, de Reseau Apparat séier (bannent 1-2 Sekonnen) detektéieren dëser Tatsaach an läscht der ofgebrach Server aus Rotatioun. Als Resultat vun dësem kënne passiv (dh net-Leader) Knäppercher praktesch ausschalten an ausgeschalt ginn ouni Zeechnungen op den Charts ze bemierken. De Maximum dee mir verléieren ass Deel vun de Metriken déi an der leschter Sekonn erakomm sinn. E plötzlechen Verloscht / Shutdown / Switch vun engem Leader wäert nach ëmmer eng kleng Anomalie kreéieren (den 30 Sekonnen Intervall ass nach ëmmer aus der Synchroniséierung), awer wann et Kommunikatioun tëscht Noden ass, kënnen dës Probleemer miniméiert ginn, zum Beispill andeems Dir Synchroniséierungspäck ausschéckt .
E bëssen iwwer d'intern Struktur. D'Applikatioun ass natierlech multithreaded, awer d'Threadingarchitektur ass anescht wéi déi zu Brubeck benotzt. D'Threads zu Brubeck sinn déiselwecht - jidderee vun hinnen ass verantwortlech fir d'Informatiounssammlung an d'Aggregatioun. Am Bioyino sinn d'Aarbechter an zwou Gruppen opgedeelt: déi verantwortlech fir d'Netzwierk an déi verantwortlech fir d'Aggregatioun. Dës Divisioun erlaabt Iech d'Applikatioun méi flexibel ze verwalten ofhängeg vun der Aart vu Metriken: wou intensiv Aggregatioun erfuerderlech ass, kënnt Dir Aggregatoren addéieren, wou et vill Netzverkéier ass, kënnt Dir d'Zuel vun de Netzwierkfloss addéieren. Am Moment schaffen mir op eise Serveren an 8 Netzwierker a 4 Aggregatiounsfloss.
De zielen (verantwortlech fir d'Aggregatioun) Deel ass zimmlech langweileg. Bufferen, déi duerch Netzwierkfloss gefëllt sinn, ginn ënner Zielfréi verdeelt, wou se duerno parséiert a aggregéiert ginn. Op Ufro gi Metriken fir d'Schécken an aner Noden uginn. All dëst, inklusiv d'Schécken vun Daten tëscht Noden a mam Consul schaffen, gëtt asynchron duerchgefouert, am Kader lafen
Vill méi Probleemer wärend der Entwécklung goufen verursaacht vum Netzdeel verantwortlech fir Metriken ze kréien. D'Haaptziel fir d'Netzflëss an getrennten Entitéiten ze trennen war de Wonsch d'Zäit ze reduzéieren déi e Floss verbréngt Net fir Daten aus der Socket ze liesen. Optiounen, déi asynchron UDP a regelméisseg Recvmsg benotzen, sinn séier verschwonnen: déi éischt verbraucht ze vill Benotzerraum CPU fir Eventveraarbechtung, déi zweet erfuerdert ze vill Kontextschalter. Dofir gëtt et elo benotzt
Remarque
An de Standardastellungen ass d'Puffergréisst zimmlech grouss gesat. Wann Dir op eemol décidéiert de Server selwer ze probéieren, kënnt Dir op d'Tatsaach begéinen datt se no enger klenger Zuel vu Metriken geschéckt ginn, se net a Graphite ukommen, bleiwen am Netzstroumbuffer. Fir mat enger klenger Zuel vu Metriken ze schaffen, musst Dir Bufsize an Task-Quee-Gréisst op méi kleng Wäerter an der Configuratioun setzen.
Endlech e puer Charts fir Chartliebhaber.
Statistiken iwwer d'Zuel vun erakommen Metriken fir all Server: méi wéi 2 Millioune MPS.
Ee vun den Noden auszeschalten an erakommen Metriken ëmverdeelen.
Statistiken iwwer erausginn Metriken: nëmmen een Node schéckt ëmmer - de Razzia Chef.
Statistike vun der Operatioun vun all Node, berücksichtegt Feeler a verschiddene Systemmoduler.
Detailer vun erakommen Metriken (metresch Nimm si verstoppt).
Wat plangen mir dann mat all deem ze maachen? Natierlech, Code schreiwen, Verdammt ...! De Projet war ursprénglech geplangt fir Open-Source ze sinn a wäert dat während hirem Liewen bleiwen. Eis direkt Pläng enthalen de Wiessel op eis eege Versioun vu Raft, d'Verännerung vum Peer-Protokoll op e méi portablen, d'Aféierung vun zousätzlech intern Statistiken, nei Aarte vu Metriken, Bugfixes an aner Verbesserungen.
Natierlech ass jidderee wëllkomm fir bei der Entwécklung vum Projet ze hëllefen: PR schafen, Themen, wa méiglech reagéiere mir, verbesseren, etc.
Mat deem gesot, dat ass alles Leit, kaaft eis Elefanten!
Source: will.com