Bioyino - giapod-apod, scalable metrics aggregator

Mao nga mangolekta ka mga sukatan. Ingon namo. Gikolekta usab namo ang mga sukatan. Siyempre, gikinahanglan alang sa negosyo. Karon atong hisgutan ang pinakaunang link sa atong monitoring system - usa ka statsd-compatible aggregation server bioyino, nganong gisulat namo kini ug nganong gibiyaan namo ang brubeck.

Bioyino - giapod-apod, scalable metrics aggregator

Gikan sa among miaging mga artikulo (1, 2) mahimo nimong mahibal-an nga hangtod sa pila ka oras nakolekta namon ang mga marka gamit Brubeck. Gisulat kini sa C. Gikan sa punto sa panglantaw sa code, kini kay yano sama sa usa ka plug (kini importante kung gusto nimo nga moamot) ug, labaw sa tanan, kini ang nagdumala sa among mga volume nga 2 milyon nga metrics per second (MPS) sa kinatas-an walay problema. Ang dokumentasyon nag-ingon nga suporta alang sa 4 milyon nga MPS nga adunay asterisk. Kini nagpasabut nga makuha nimo ang gipahayag nga numero kung imong gi-configure ang network sa husto sa Linux. (Wala kami mahibal-an kung pila ka MPS ang imong makuha kung mobiya ka sa network kung unsa man). Bisan pa niini nga mga bentaha, kami adunay daghang mga seryoso nga reklamo bahin sa brubeck.

Pag-angkon 1. Ang Github, ang nag-develop sa proyekto, mihunong sa pagsuporta niini: pagpatik sa mga patch ug pag-ayo, pagdawat sa atoa ug (dili lang sa atoa) PR. Sa milabay nga pipila ka mga bulan (sa usa ka dapit gikan sa Pebrero-Marso 2018), ang kalihokan nagpadayon, apan sa wala pa kana adunay hapit 2 ka tuig nga hingpit nga kalmado. Dugang pa, ang proyekto gipalambo alang sa internal nga panginahanglan sa Gihub, nga mahimong usa ka seryoso nga babag sa pagpaila sa bag-ong mga bahin.

Pag-angkon 2. Pagkatukma sa mga kalkulasyon. Nakolekta ni Brubeck ang kinatibuk-an nga 65536 nga kantidad alang sa panagsama. Sa among kaso, alang sa pipila nga mga sukatan, sa panahon sa panagsama (30 segundos), daghang mga kantidad ang mahimong moabut (1 sa kinatas-an). Ingon usa ka sangputanan sa kini nga sampling, ang labing kadaghan ug labing gamay nga kantidad makita nga wala’y kapuslanan. Pananglitan, sama niini:

Bioyino - giapod-apod, scalable metrics aggregator
Ingon sa kaniadto

Bioyino - giapod-apod, scalable metrics aggregator
Unsaon man unta

Sa samang rason, ang mga kantidad kasagarang sayop ang pagkalkulo. Idugang dinhi ang usa ka bug nga adunay 32-bit float overflow, nga sa kasagaran nagpadala sa server sa segfault kung makadawat usa ka daw inosente nga sukatan, ug ang tanan nahimo nga maayo. Ang bug, sa paagi, wala pa naayo.

Ug sa katapusan Pag-angkon X. Sa panahon sa pagsulat, andam kami nga ipresentar kini sa tanan nga 14 ka daghan o dili kaayo nagtrabaho nga mga implementasyon sa istatistika nga among nakit-an. Hunahunaa nga adunay usa ka imprastraktura nga mitubo pag-ayo nga ang pagdawat sa 4 milyon nga MPS dili na igo. O bisan kung wala pa kini motubo, apan ang mga sukatan hinungdanon kaayo kanimo nga bisan ang mubo, 2-3 minuto nga paglusot sa mga tsart mahimo nang kritikal ug hinungdan sa mga pag-atake sa dili mabuntog nga depresyon sa mga managers. Tungod kay ang pagtambal sa depresyon usa ka walay pasalamat nga buluhaton, gikinahanglan ang teknikal nga mga solusyon.

Una, ang pagtugot sa sayup, aron ang usa ka kalit nga problema sa server dili hinungdan sa usa ka psychiatric zombie apocalypse sa opisina. Ikaduha, ang pag-scale aron makadawat og labaw sa 4 ka milyon nga MPS, nga walay pagkalot sa lawom sa Linux network stack ug kalmado nga nagtubo "sa gilapdon" sa gikinahanglan nga gidak-on.

Tungod kay kami adunay lugar alang sa pag-scale, nakahukom kami nga magsugod sa pagtugot sa sayup. "MAHITUNGOD SA! Pagtugot sa sayup! Yano ra, mahimo namon kini, ”naghunahuna kami ug naglansad sa 2 nga mga server, nagpataas usa ka kopya sa brubeck sa matag usa. Aron mahimo kini, kinahanglan namon nga kopyahon ang trapiko nga adunay mga sukatan sa parehas nga mga server ug bisan pagsulat alang niini gamay nga gamit. Nasulbad namo ang problema sa fault tolerance niini, pero... dili kaayo maayo. Sa sinugdan ang tanan ingon og maayo: ang matag brubeck nagkolekta sa kaugalingon nga bersyon sa aggregation, nagsulat sa datos sa Graphite kausa sa matag 30 segundos, gi-overwriting ang daan nga interval (gibuhat kini sa kilid sa Graphite). Kung ang usa ka server kalit nga mapakyas, kanunay kami adunay ikaduha nga adunay kaugalingon nga kopya sa giipon nga datos. Apan ania ang problema: kung mapakyas ang server, usa ka "saw" ang makita sa mga graph. Kini tungod sa kamatuoran nga ang 30-segundos nga mga agwat sa brubeck wala ma-synchronize, ug sa panahon sa pagkahagsa usa niini wala ma-overwrite. Kung magsugod ang ikaduha nga server, ang parehas nga butang ang mahitabo. Medyo maagwanta, apan gusto ko nga mas maayo! Ang problema sa scalability wala usab mawala. Ang tanan nga mga sukatan sa gihapon "molupad" sa usa ka server, ug busa kami limitado sa parehas nga 2-4 milyon nga MPS, depende sa lebel sa network.

Kung maghunahuna ka gamay bahin sa problema ug sa parehas nga pagkalot sa niyebe gamit ang usa ka pala, nan ang mosunud nga klaro nga ideya mahimo’g mahunahuna: kinahanglan nimo ang usa ka statsd nga mahimo’g molihok sa giapod-apod nga mode. Kana mao, ang usa nga nagpatuman sa pag-synchronize tali sa mga node sa oras ug mga sukatan. "Siyempre, ang ingon nga solusyon tingali naglungtad na," ingon namon ug miadto sa Google…. Ug wala silay nakaplagan. Human sa pag-agi sa dokumentasyon alang sa lain-laing statsd (https://github.com/etsy/statsd/wiki#server-implementations kaniadtong Disyembre 11.12.2017, XNUMX), wala gyud kami nakit-an. Dayag nga, bisan ang mga nag-develop o ang mga tiggamit niini nga mga solusyon wala pa nakatagbo sa daghang mga sukatan, kung dili sila siguradong adunay usa ka butang.

Ug unya nahinumdom kami bahin sa "dulaan" statsd - bioyino, nga gisulat sa Just for Fun hackathon (ang ngalan sa proyekto gihimo sa script sa wala pa magsugod ang hackathon) ug nahibal-an nga kinahanglan namon ang among kaugalingon nga statsd. Para unsa?

  • tungod kay gamay ra kaayo ang statsd clone sa kalibutan,
  • tungod kay posible nga mahatag ang gitinguha o duol sa gitinguha nga pagtugot sa sayup ug scalability (lakip ang pag-synchronize sa mga aggregated metrics tali sa mga server ug pagsulbad sa problema sa pagpadala sa mga panagbangi),
  • tungod kay posible nga makalkula ang mga sukatan nga mas tukma kaysa sa brubeck,
  • tungod kay mahimo nimong kolektahon ang mas detalyado nga mga istatistika sa imong kaugalingon, nga halos wala gihatag sa brubeck kanamo,
  • tungod kay ako adunay usa ka higayon sa pagprograma sa akong kaugalingon nga hyperperformance-apod-apod nga scale lab aplikasyon, nga dili sa bug-os nga pag-usab sa arkitektura sa laing susama nga hyperfor ... maayo, mao na.

Unsay isulat? Siyempre, sa Rust. Ngano man?

  • tungod kay aduna nay prototype nga solusyon,
  • tungod kay ang tagsulat sa artikulo nakaila na sa Rust niadtong panahona ug naghinam-hinam sa pagsulat niini alang sa produksyon nga adunay oportunidad nga ibutang kini sa open-source,
  • tungod kay ang mga pinulongan nga adunay GC dili angay alang kanamo tungod sa kinaiya sa trapiko nga nadawat (halos realtime) ug ang mga paghunong sa GC halos dili madawat,
  • tungod kay kinahanglan nimo ang labing taas nga pasundayag nga ikatandi sa C
  • tungod kay ang Rust naghatag kanato sa walay kahadlok nga panag-uban, ug kung gisugdan nato kini pagsulat sa C/C ++, mas daghan pa unta ang atong makuha nga mga kahuyangan, buffer overflows, mga kondisyon sa lumba ug uban pang makahahadlok nga mga pulong kay sa brubeck.

Adunay usab panaglalis batok kang Rust. Ang kompanya wala’y kasinatian sa paghimo og mga proyekto sa Rust, ug karon wala usab kami nagplano nga gamiton kini sa panguna nga proyekto. Busa, adunay grabe nga mga kahadlok nga wala’y mahimo, apan kami nakahukom sa pagkuha sa usa ka higayon ug pagsulay.

Nilabay ang panahon...

Sa katapusan, pagkahuman sa daghang napakyas nga pagsulay, andam na ang una nga nagtrabaho nga bersyon. Unsay nahitabo? Mao ni ang nahitabo.

Bioyino - giapod-apod, scalable metrics aggregator

Ang matag node makadawat sa kaugalingon nga set sa metrics ug magtigum niini, ug dili mag-agregate sa metrics para sa mga tipo diin ang ilang full set gikinahanglan para sa final aggregation. Ang mga node konektado sa usag usa pinaagi sa usa ka matang sa gipang-apod-apod nga lock protocol, nga nagtugot kanimo sa pagpili taliwala kanila ang usa lamang (dinhi kami mihilak) nga takus sa pagpadala sa mga sukatan sa Dakong Usa. Kini nga problema karon gisulbad sa Konsul, apan sa umaabot ang mga ambisyon sa tagsulat moabot sa kaugalingon pagpatuman Ang balsa, diin ang labing takus, siyempre, mao ang node sa lider sa konsensus. Dugang pa sa consensus, ang mga node kanunay (kausa matag segundo nga default) ipadala sa ilang mga silingan ang mga bahin sa pre-aggregated metrics nga ilang nakolekta sa ikaduha. Kini nahimo nga ang scaling ug fault tolerance gipreserbar - ang matag node nagkupot gihapon sa usa ka bug-os nga hugpong sa mga sukatan, apan ang mga sukatan gipadala na nga naipon, pinaagi sa TCP ug gi-encode ngadto sa binary protocol, mao nga ang mga gasto sa pagdoble mas mubu kon itandi sa UDP. Bisan pa sa medyo dako nga gidaghanon sa umaabot nga mga sukatan, ang pagtipon nanginahanglan gamay kaayo nga memorya ug bisan gamay nga CPU. Alang sa among kaayo nga compressible mertis, kini pipila ra ka napulo ka megabytes nga datos. Isip usa ka dugang nga bonus, wala kami'y makuha nga wala kinahanglana nga pagsulat pag-usab sa datos sa Graphite, sama sa kaso sa burbeck.

Ang mga pakete sa UDP nga adunay mga sukatan dili balanse tali sa mga node sa kagamitan sa network pinaagi sa usa ka yano nga Round Robin. Siyempre, ang hardware sa network wala mag-parse sa mga sulod sa mga pakete ug busa makabira og labaw pa sa 4M nga mga pakete kada segundo, wala pay labot ang mga metrics nga wala'y nahibal-an. Kung atong isipon nga ang mga sukatan dili moabut sa usa ka higayon sa matag pakete, nan wala kita makakita og bisan unsang mga problema sa pasundayag niining dapita. Kung ang usa ka server nahagsa, ang network device dali (sulod sa 1-2 segundos) nakamatikod niini nga kamatuoran ug nagtangtang sa nahagsa nga server gikan sa rotation. Ingon usa ka sangputanan niini, ang mga passive (ie, dili lider) nga mga node mahimong i-on ug i-off sa halos wala’y namatikdan nga mga drawdown sa mga tsart. Ang kinatas-an nga mawala kanato kabahin sa mga sukdanan nga niabot sa kataposang segundo. Ang kalit nga pagkawala / pagsira / switch sa usa ka lider makahimo gihapon og gamay nga anomaliya (ang 30 segundos nga agwat wala gihapon ma-sync), apan kung adunay komunikasyon tali sa mga node, kini nga mga problema mahimong maminusan, pananglitan, pinaagi sa pagpadala sa mga pakete sa pag-synchronize .

Usa ka gamay bahin sa internal nga istruktura. Ang aplikasyon, siyempre, multithreaded, apan ang threading architecture lahi sa gigamit sa brubeck. Ang mga hilo sa brubeck managsama - ang matag usa kanila responsable sa pagkolekta ug pagtipon sa impormasyon. Sa bioyino, ang mga trabahante gibahin sa duha ka grupo: kadtong responsable sa network ug kadtong responsable sa pagtipon. Gitugotan ka niini nga dibisyon nga mas dali nga madumala ang aplikasyon depende sa tipo sa mga sukatan: kung diin gikinahanglan ang intensive aggregation, mahimo nimong idugang ang mga aggregator, diin adunay daghang trapiko sa network, mahimo nimong idugang ang gidaghanon sa mga agos sa network. Sa pagkakaron, sa among mga server nagtrabaho kami sa 8 nga network ug 4 nga aggregation flow.

Ang pag-ihap (responsable sa pagtipon) nga bahin medyo makalaay. Ang mga buffer nga napuno sa mga agos sa network giapod-apod sa mga pag-ihap sa mga agos, diin kini pagkahuman gi-parse ug giipon. Kung gihangyo, ang mga sukatan gihatag alang sa pagpadala sa ubang mga node. Ang tanan niini, lakip ang pagpadala sa datos tali sa mga node ug pagtrabaho kauban ang Consul, gihimo nga asynchronously, nga nagdagan sa balangkas tokio.

Daghan pa nga mga problema sa panahon sa pag-uswag ang gipahinabo sa bahin sa network nga responsable sa pagdawat mga sukatan. Ang nag-unang tumong sa pagbulag sa mga agos sa network ngadto sa lain nga mga entidad mao ang tinguha sa pagpakunhod sa oras nga gigugol sa usa ka dagan dili sa pagbasa sa data gikan sa socket. Ang mga opsyon gamit ang asynchronous nga UDP ug regular nga recvmsg dali nga nahanaw: ang una nagkonsumo og sobra nga user-space nga CPU alang sa pagproseso sa panghitabo, ang ikaduha nagkinahanglan og daghang mga switch sa konteksto. Busa kini gigamit karon recvmmsg nga adunay dagkong mga buffer (ug mga buffer, mga ginoo nga opisyal, wala’y hinungdan kanimo!). Ang suporta alang sa regular nga UDP gitagana alang sa gaan nga mga kaso diin ang recvmmsg wala kinahanglana. Sa multimessage mode, posible nga makab-ot ang nag-unang butang: ang kadaghanan sa panahon, ang network thread nag-rake sa OS queue - nagbasa sa datos gikan sa socket ug gibalhin kini ngadto sa userspace buffer, panagsa ra nga nagbalhin sa paghatag sa puno nga buffer sa mga aggregator. Ang pila sa socket halos dili matipon, ang gidaghanon sa nahulog nga mga pakete halos dili motubo.

Примечание

Sa mga default setting, ang buffer size kay dako kaayo. Kung kalit ka nga modesisyon nga sulayan ang server sa imong kaugalingon, mahimo nimong masugatan ang kamatuoran nga pagkahuman sa pagpadala usa ka gamay nga gidaghanon sa mga sukatan, dili sila moabut sa Graphite, nga nahabilin sa buffer sa stream sa network. Aron magtrabaho uban ang gamay nga gidaghanon sa mga sukatan, kinahanglan nimo nga itakda ang bufsize ug task-queue-size sa gagmay nga mga kantidad sa config.

Sa katapusan, pipila ka mga tsart alang sa mga mahigugmaon sa tsart.

Mga estadistika sa gidaghanon sa umaabot nga mga sukatan alang sa matag server: labaw pa sa 2 milyon nga MPS.

Bioyino - giapod-apod, scalable metrics aggregator

Pag-disable sa usa sa mga node ug pag-apod-apod pag-usab sa umaabot nga mga sukatan.

Bioyino - giapod-apod, scalable metrics aggregator

Mga estadistika sa mga nanggawas nga sukatan: usa ra ka node ang kanunay nga ipadala - ang raid boss.

Bioyino - giapod-apod, scalable metrics aggregator

Mga estadistika sa operasyon sa matag node, nga gikonsiderar ang mga sayup sa lainlaing mga module sa sistema.

Bioyino - giapod-apod, scalable metrics aggregator

Pagdetalye sa umaabot nga mga sukatan (gitago ang mga ngalan sa metric).

Bioyino - giapod-apod, scalable metrics aggregator

Unsa may atong plano nga buhaton niining tanan sunod? Siyempre, pagsulat og code, damn...! Ang proyekto orihinal nga giplano nga mahimong open-source ug magpabilin nga ingon niini sa tibuok kinabuhi niini. Ang among hinanali nga mga plano naglakip sa pagbalhin sa among kaugalingong bersyon sa Raft, pag-usab sa peer protocol ngadto sa mas madaladala, pagpaila sa dugang internal nga estadistika, bag-ong matang sa metrics, pag-ayo sa bug ug uban pang mga kalamboan.

Siyempre, ang tanan giabi-abi nga motabang sa pagpalambo sa proyekto: paghimo og PR, Mga Isyu, kung mahimo kami motubag, mouswag, ug uban pa.

Sa giingon na, kana lang mga tawo, pagpalit sa among mga elepante!



Source: www.habr.com

Idugang sa usa ka comment