TÄtad jÅ«s apkopojat metriku. KÄdi esam. MÄs arÄ« apkopojam metriku. Protams, nepiecieÅ”ams biznesam. Å odien mÄs runÄsim par mÅ«su uzraudzÄ«bas sistÄmas paÅ”u pirmo saiti - ar statsd saderÄ«gu apkopoÅ”anas serveri
No mÅ«su iepriekÅ”Äjiem rakstiem (
1. pretenzija. Github, projekta izstrÄdÄtÄjs, pÄrtrauca to atbalstÄ«t: publicÄt ielÄpus un labojumus, pieÅemt mÅ«sÄjos un (ne tikai mÅ«su) PR. PÄdÄjos mÄneÅ”os (kaut kur no 2018. gada februÄra-marta) darbÄ«ba ir atsÄkusies, bet pirms tam gandrÄ«z 2 gadi pilnÄ«gs miers. TurklÄt projekts tiek izstrÄdÄts
2. pretenzija. AprÄÄ·inu precizitÄte. Brubeck apkopoÅ”anai kopumÄ apkopo 65536 30 vÄrtÄ«bas. MÅ«su gadÄ«jumÄ dažiem rÄdÄ«tÄjiem apkopoÅ”anas periodÄ (1 sekundes) var iegÅ«t daudz vairÄk vÄrtÄ«bu (527 392 XNUMX maksimumÄ). Å Ä«s paraugu ÅemÅ”anas rezultÄtÄ maksimÄlÄs un minimÄlÄs vÄrtÄ«bas Ŕķiet bezjÄdzÄ«gas. PiemÄram, Å”Ädi:
KÄ tas bija
KÄ tam vajadzÄja bÅ«t
TÄ paÅ”a iemesla dÄļ summas parasti tiek aprÄÄ·inÄtas nepareizi. Pievienojiet Å”eit kļūdu ar 32 bitu peldoÅ”o pÄrplÅ«di, kas parasti nosÅ«ta serveri uz segfault, saÅemot Ŕķietami nevainÄ«gu metriku, un viss kļūst lieliski. Kļūda, starp citu, nav novÄrsta.
Un, visbeidzot, PieprasÄ«t X. RakstÄ«Å”anas laikÄ mÄs esam gatavi to prezentÄt visÄm 14 vairÄk vai mazÄk strÄdÄjoÅ”ajÄm statsd implementÄcijÄm, kuras mums izdevÄs atrast. IedomÄsimies, ka kÄda atseviŔķa infrastruktÅ«ra ir tik ļoti izaugusi, ka ar 4 miljonu MPS pieÅemÅ”anu vairs nepietiek. Vai arÄ« tad, ja tas vÄl nav pieaudzis, bet rÄdÄ«tÄji jums jau ir tik svarÄ«gi, ka pat Ä«si, 2-3 minÅ«Å”u kritumi topos jau var kļūt kritiski un izraisÄ«t nepÄrvaramas depresijas lÄkmes vadÄ«tÄju vidÅ«. TÄ kÄ depresijas ÄrstÄÅ”ana ir nepateicÄ«gs uzdevums, ir nepiecieÅ”ami tehniski risinÄjumi.
PirmkÄrt, kļūdu tolerance, lai pÄkÅ”Åa servera problÄma neizraisÄ«tu psihiatrisku zombiju apokalipsi birojÄ. OtrkÄrt, mÄrogoÅ”ana, lai varÄtu pieÅemt vairÄk nekÄ 4 miljonus MPS, neiedziļinoties Linux tÄ«kla stekÄ un mierÄ«gi augot āplatumÄā lÄ«dz vajadzÄ«gajam izmÄram.
TÄ kÄ mums bija vietas mÄrogoÅ”ana, mÄs nolÄmÄm sÄkt ar kļūdu toleranci. "PAR! Kļūdu tolerance! Tas ir vienkÄrÅ”i, mÄs to varam,ā mÄs nodomÄjÄm un iedarbinÄjÄm divus serverus, katrÄ izveidojot brubeck kopiju. Lai to izdarÄ«tu, mums bija jÄkopÄ trafiks ar metriku uz abiem serveriem un pat jÄraksta
Ja jÅ«s nedaudz padomÄjat par problÄmu un vienlaikus ar lÄpstu izrok sniegu, jums var ienÄkt prÄtÄ Å”Äda acÄ«mredzama ideja: jums ir nepiecieÅ”ams statsd, kas var darboties sadalÄ«tÄ režīmÄ. Tas ir, tÄds, kas ievieÅ” sinhronizÄciju starp mezgliem laikÄ un metrikÄ. āProtams, Å”Äds risinÄjums, iespÄjams, jau pastÄv,ā mÄs teicÄm un devÄmies uz Googleā¦. Un viÅi neko neatrada. PÄc dažÄdu statistikas datu dokumentÄcijas izskatÄ«Å”anas (
Un tad atcerÄjÄmies par ārotaļlietuā statsd - bioyino, kas tika rakstÄ«ts Just for Fun hakatonÄ (projekta nosaukumu Ä£enerÄja scenÄrijs pirms hakatona sÄkuma) un sapratÄm, ka mums steidzami ir nepiecieÅ”ams savs statsd. Par ko?
- jo pasaulÄ ir pÄrÄk maz statsd klonu,
- jo ir iespÄjams nodroÅ”inÄt vÄlamo vai tuvu vÄlamajai kļūdu toleranci un mÄrogojamÄ«bu (ieskaitot apkopoto metrikas sinhronizÄciju starp serveriem un sÅ«tÄ«Å”anas konfliktu risinÄÅ”anu),
- jo ir iespÄjams aprÄÄ·inÄt metriku precÄ«zÄk nekÄ Brubeck,
- jo jÅ«s pats varat savÄkt detalizÄtÄku statistiku, ko brubeks mums praktiski nesniedza,
- jo man bija iespÄja ieprogrammÄt savu hyperperformance distributed scale lab lietojumprogrammu, kas pilnÄ«bÄ neatkÄrtos cita lÄ«dzÄ«ga hiperfora arhitektÅ«ru... nu, lÅ«k.
Uz ko rakstÄ«t? Protams, RustÄ. KÄpÄc?
- jo jau bija risinÄjuma prototips,
- jo raksta autors jau toreiz pazina Rustu un ļoti gribÄja tajÄ kaut ko ierakstÄ«t ražoÅ”anai ar iespÄju ievietot to atvÄrtÄ pirmkoda formÄtÄ,
- jo valodas ar GC mums nav piemÄrotas saÅemtÄs trafika rakstura dÄļ (gandrÄ«z reÄllaikÄ), un GC pauzes ir praktiski nepieÅemamas,
- jo jums ir nepiecieÅ”ama maksimÄla veiktspÄja, kas ir salÄ«dzinÄma ar C
- jo Rust nodroÅ”ina mums bezbailÄ«gu vienlaicÄ«gumu, un, ja mÄs to sÄktu rakstÄ«t C/C++, mÄs bÅ«tu iekrÄjuÅ”i vÄl vairÄk ievainojamÄ«bu, bufera pÄrpildes, sacensÄ«bu apstÄkļus un citus biedÄjoÅ”us vÄrdus nekÄ brubeck.
Bija arÄ« arguments pret Rustu. UzÅÄmumam nebija pieredzes projektu veidoÅ”anÄ RustÄ, un tagad mÄs arÄ« neplÄnojam to izmantot galvenajÄ projektÄ. TÄpÄc bija nopietnas bažas, ka nekas neizdosies, taÄu nolÄmÄm riskÄt un mÄÄ£inÄjÄm.
Laiks pagÄja...
Beidzot pÄc vairÄkiem neveiksmÄ«giem mÄÄ£inÄjumiem pirmÄ darba versija bija gatava. Kas notika? TÄ tas notika.
Katrs mezgls saÅem savu metrikas kopu un uzkrÄj tos, kÄ arÄ« neapkopo metriku tiem veidiem, kuru pilna kopa ir nepiecieÅ”ama galÄ«gai apkopoÅ”anai. Mezgli ir savienoti viens ar otru ar kaut kÄdu izplatÄ«tu bloÄ·ÄÅ”anas protokolu, kas ļauj no tiem atlasÄ«t vienÄ«go (Å”eit mÄs raudÄjÄm), kas ir cienÄ«gs sÅ«tÄ«t metriku Lielajam. Å o problÄmu paÅ”laik risina
UDP paketes ar metriku tiek nelÄ«dzsvarotas starp tÄ«kla aprÄ«kojuma mezgliem, izmantojot vienkÄrÅ”u Round Robin. Protams, tÄ«kla aparatÅ«ra neparsÄ pakeÅ”u saturu un tÄpÄc var izvilkt daudz vairÄk par 4M pakeÅ”u sekundÄ, nemaz nerunÄjot par rÄdÄ«tÄjiem, par kuriem tÄ vispÄr neko nezina. Ja Åemam vÄrÄ, ka katrÄ paketÄ rÄdÄ«tÄji nenÄk pa vienam, tad Å”ajÄ vietÄ nekÄdas veiktspÄjas problÄmas neparedzam. Ja serveris avarÄ, tÄ«kla ierÄ«ce Ätri (1-2 sekunžu laikÄ) konstatÄ Å”o faktu un noÅem avarÄjuÅ”o serveri no rotÄcijas. TÄ rezultÄtÄ pasÄ«vos (t.i., ne-lÄ«dera) mezglus var ieslÄgt un izslÄgt praktiski, nepamanot diagrammu samazinÄjumus. MaksimÄlais, ko mÄs zaudÄjam, ir daļa no rÄdÄ«tÄjiem, kas tika ievadÄ«ti pÄdÄjÄ sekundÄ. PÄkÅ”Ås lÄ«dera zaudÄjums/izslÄgÅ”ana/pÄrslÄgÅ”ana joprojÄm radÄ«s nelielu anomÄliju (30 sekunžu intervÄls joprojÄm nav sinhronizÄts), taÄu, ja starp mezgliem notiek saziÅa, Ŕīs problÄmas var samazinÄt, piemÄram, izsÅ«tot sinhronizÄcijas paketes. .
Mazliet par iekÅ”Äjo struktÅ«ru. Lietojumprogramma, protams, ir daudzpavedienu, taÄu vÄ«tÅu arhitektÅ«ra atŔķiras no brubeckÄ izmantotÄs. Pavedieni brubekÄ ir vienÄdi ā katrs atbild gan par informÄcijas vÄkÅ”anu, gan apkopoÅ”anu. Bioyino darba ÅÄmÄji tiek iedalÄ«ti divÄs grupÄs: tie, kas ir atbildÄ«gi par tÄ«klu, un tie, kas ir atbildÄ«gi par apkopoÅ”anu. Å is sadalÄ«jums ļauj elastÄ«gÄk pÄrvaldÄ«t aplikÄciju atkarÄ«bÄ no metrikas veida: kur nepiecieÅ”ama intensÄ«va apkopoÅ”ana, var pievienot agregatorus, kur ir liela tÄ«kla trafika, var pievienot tÄ«kla plÅ«smu skaitu. Å obrÄ«d uz mÅ«su serveriem strÄdÄjam 8 tÄ«kla un 4 agregÄcijas plÅ«smÄs.
SkaitÄ«Å”anas daļa (atbildÄ«ga par apkopoÅ”anu) ir diezgan garlaicÄ«ga. TÄ«kla plÅ«smÄm aizpildÄ«tie buferi tiek sadalÄ«ti starp skaitÄ«Å”anas plÅ«smÄm, kur tÄs pÄc tam tiek parsÄtas un apkopotas. PÄc pieprasÄ«juma tiek dota metrika nosÅ«tÄ«Å”anai uz citiem mezgliem. Tas viss, ieskaitot datu sÅ«tÄ«Å”anu starp mezgliem un darbu ar Consul, tiek veikts asinhroni, darbojas sistÄmÄ
Daudz vairÄk problÄmu izstrÄdes laikÄ radÄ«ja tÄ«kla daļa, kas ir atbildÄ«ga par metriku saÅemÅ”anu. Galvenais mÄrÄ·is, sadalot tÄ«kla plÅ«smas atseviŔķÄs vienÄ«bÄs, bija vÄlme samazinÄt plÅ«smas pavadÄ«to laiku nÄ lai nolasÄ«tu datus no ligzdas. Opcijas, kas izmanto asinhrono UDP un parasto recvmsg, Ätri pazuda: pirmais patÄrÄ pÄrÄk daudz lietotÄja vietas CPU notikumu apstrÄdei, otrais prasa pÄrÄk daudz konteksta slÄdžu. TÄpÄc tagad tas tiek izmantots
Piezīme
NoklusÄjuma iestatÄ«jumos bufera izmÄrs ir iestatÄ«ts diezgan liels. Ja pÄkÅ”Åi nolemjat izmÄÄ£inÄt serveri pats, jÅ«s varat saskarties ar faktu, ka pÄc neliela skaita metrikas nosÅ«tÄ«Å”anas tie nenonÄks Graphite, paliekot tÄ«kla straumes buferÄ«. Lai strÄdÄtu ar nelielu skaitu metrikas, konfigurÄcijÄ ir jÄiestata bufsize un uzdevumu rindas lielums uz mazÄkÄm vÄrtÄ«bÄm.
Visbeidzot, dažas diagrammas diagrammu mīļotÄjiem.
Statistika par katra servera ienÄkoÅ”o metrikas skaitu: vairÄk nekÄ 2 miljoni MPS.
Viena no mezgliem atspÄjoÅ”ana un ienÄkoÅ”o metrikas pÄrdalÄ«Å”ana.
Statistika par izejoÅ”ajiem rÄdÄ«tÄjiem: vienmÄr sÅ«ta tikai viens mezgls - raid boss.
Katra mezgla darbÄ«bas statistika, Åemot vÄrÄ kļūdas dažÄdos sistÄmas moduļos.
DetalizÄta informÄcija par ienÄkoÅ”ajiem rÄdÄ«tÄjiem (metriku nosaukumi ir paslÄpti).
Ko mÄs ar Å”o visu plÄnojam darÄ«t tÄlÄk? Protams, raksti kodu, sasodÄ«ts...! SÄkotnÄji tika plÄnots, ka projekts bÅ«s atvÄrtÄ koda avots, un tÄds tas paliks visu tÄ darbÄ«bas laiku. MÅ«su tuvÄkajos plÄnos ietilpst pÄreja uz mÅ«su paÅ”u Raft versiju, vienÄdranga protokola maiÅa uz pÄrnÄsÄjamÄku, papildu iekÅ”ÄjÄs statistikas ievieÅ”ana, jauna veida metrika, kļūdu labojumi un citi uzlabojumi.
Protams, ikviens laipni aicinÄts palÄ«dzÄt projekta izstrÄdÄ: veidot PR, Issues, ja iespÄjams reaÄ£Äsim, uzlabosim utt.
TÄ sakot, tas arÄ« viss, ļaudis, pÄrciet mÅ«su ziloÅus!
Avots: www.habr.com