Bioyino - faib, scalable metrics aggregator

Yog li koj sau metrics. Raws li peb. Peb kuj sau metrics. Tau kawg, tsim nyog rau kev lag luam. Hnub no peb yuav tham txog thawj qhov txuas ntawm peb qhov kev soj ntsuam xyuas - statsd-compatible aggregation server bioyino, vim li cas peb tau sau nws thiab vim li cas peb tso tseg brubeck.

Bioyino - faib, scalable metrics aggregator

Los ntawm peb cov ntawv dhau los (1, 2) koj tuaj yeem paub tias txog thaum qee lub sijhawm peb sau cov cim siv Brubeck. Nws yog sau nyob rau hauv C. Los ntawm ib tug code point ntawm view, nws yog ib qho yooj yim raws li ib tug plug (qhov no yog ib qho tseem ceeb thaum koj xav pab txhawb) thiab, qhov tseem ceeb tshaj plaws, nws tuav peb cov ntim ntawm 2 lab metrics ib ob (MPS) ntawm ncov. tsis muaj teeb meem. Cov ntaub ntawv hais txog kev txhawb nqa rau 4 lab MPS nrog lub hnub qub. Qhov no txhais tau tias koj yuav tau txais daim ntawv teev yog tias koj teeb tsa lub network kom raug ntawm Linux. (Peb tsis paub ntau npaum li cas MPS koj tuaj yeem tau txais yog tias koj tawm hauv lub network raws li yog). Txawm hais tias qhov zoo li no, peb muaj ntau qhov kev tsis txaus siab txog brubeck.

Kev thov 1. Github, tus tsim tawm ntawm qhov project, tau tso tseg kev txhawb nqa: luam tawm thaj ua rau thaj thiab kho, lees txais peb li thiab (tsis yog peb li) PR. Hauv ob peb lub hlis dhau los (qhov chaw txij Lub Ob Hlis-Lub Peb Hlis 2018), kev ua haujlwm tau rov pib dua, tab sis ua ntej muaj yuav luag 2 xyoos ntawm kev ua tiav tag nrho. Tsis tas li ntawd, qhov project tab tom tsim rau Internal Gihub xav tau, uas tuaj yeem dhau los ua qhov cuam tshuam loj rau kev qhia txog cov yam ntxwv tshiab.

Kev thov 2. Qhov tseeb ntawm kev suav. Brubeck sau tag nrho ntawm 65536 qhov tseem ceeb rau kev sib sau ua ke. Hauv peb cov ntaub ntawv, rau qee qhov kev ntsuas, thaum lub sijhawm sib sau ua ke (30 vib nas this), ntau qhov tseem ceeb tuaj yeem tuaj txog (1 ntawm lub ncov). Raws li qhov ua piv txwv no, qhov siab tshaj plaws thiab qhov tsawg kawg nkaus tshwm sim tsis muaj txiaj ntsig. Piv txwv li, zoo li no:

Bioyino - faib, scalable metrics aggregator
Raws li nws yog

Bioyino - faib, scalable metrics aggregator
Yuav tsum tau ua li cas

Vim tib yam, cov nyiaj feem ntau suav tsis raug. Ntxiv ntawm no cov kab laum nrog 32-ntsis ntab ntws, uas feem ntau xa cov neeg rau zaub mov mus rau segfault thaum tau txais ib qho kev ntsuas zoo li tsis muaj tseeb, thiab txhua yam ua tau zoo. Tus kab mob, los ntawm txoj kev, tsis tau kho.

Thiab thaum kawg Thov X. Thaum lub sijhawm sau ntawv, peb npaj tau nthuav tawm rau tag nrho 14 ntau lossis tsawg dua kev ua haujlwm statsd uas peb tuaj yeem nrhiav tau. Cia peb xav txog tias qee qhov kev tsim kho vaj tsev ib leeg tau loj hlob heev uas lees txais 4 lab MPS tsis txaus lawm. Los yog txawm tias nws tseem tsis tau loj hlob, tab sis cov kev ntsuas tseem ceeb heev rau koj tias txawm tias luv luv, 2-3 feeb dips hauv cov kab kos tuaj yeem dhau los ua qhov tseem ceeb thiab ua rau muaj kev ntxhov siab tsis txaus ntseeg ntawm cov thawj coj. Txij li thaum kho kev nyuaj siab yog ib txoj hauj lwm ua tsaug, kev daws teeb meem yog xav tau.

Ua ntej, ua txhaum kev zam txim, kom qhov teeb meem tam sim ntawd ntawm lub server tsis ua rau muaj kev puas siab puas ntsws zombie apocalypse hauv chaw ua haujlwm. Qhov thib ob, kev ntsuas kom muaj peev xwm lees txais ntau dua 4 lab MPS, yam tsis tau khawb tob rau hauv Linux network pawg thiab maj mam loj hlob "hauv dav" rau qhov loj me.

Txij li thaum peb muaj chaw rau scaling, peb txiav txim siab los pib nrog kev zam txim. "Txog! Ua txhaum cai! Nws yooj yim, peb tuaj yeem ua tau, "peb xav thiab pib 2 servers, tsa ib daim qauv ntawm brubeck ntawm txhua tus. Txhawm rau ua qhov no, peb yuav tsum luam cov tsheb khiav nrog kev ntsuas rau ob lub servers thiab tseem sau rau qhov no khoom siv me me. Peb daws qhov teeb meem txhaum cai nrog qhov no, tab sis ... tsis zoo heev. Thaum xub thawj txhua yam zoo li zoo: txhua brubeck sau nws tus kheej version ntawm kev sib sau ua ke, sau cov ntaub ntawv rau Graphite ib zaug txhua 30 vib nas this, overwriting lub sijhawm qub (qhov no ua tiav ntawm Graphite sab). Yog hais tias ib tug neeg rau zaub mov dheev poob, peb ib txwm muaj ib tug thib ob nrog nws tus kheej daim ntawv luam ntawm cov ntaub ntawv aggreated. Tab sis ntawm no yog qhov teeb meem: yog tias tus neeg rau zaub mov tsis ua haujlwm, "pom" tshwm rau ntawm daim duab. Qhov no yog vim lub fact tias brubeck lub 30-thib ob lub sij hawm tsis synchronized, thiab thaum lub sij hawm ntawm kev sib tsoo ib tug ntawm lawv tsis overwritten. Thaum lub server thib ob pib, tib yam tshwm sim. Tolerable heev, tab sis kuv xav tau zoo dua! Qhov teeb meem ntawm scalability kuj tsis ploj mus. Tag nrho cov kev ntsuas tseem "ya" mus rau ib tus neeg rau zaub mov, thiab yog li ntawd peb raug txwv rau tib 2-4 lab MPS, nyob ntawm qib network.

Yog tias koj xav me ntsis txog qhov teeb meem thiab tib lub sijhawm khawb daus nrog duav, ces cov tswv yim pom tseeb hauv qab no tuaj yeem xav txog: koj xav tau statsd uas tuaj yeem ua haujlwm hauv hom faib. Ntawd yog, ib qho uas siv synchronization ntawm nodes hauv lub sijhawm thiab kev ntsuas. "Tau kawg, qhov kev daws teeb meem no tej zaum twb muaj lawm," peb hais thiab mus rau Google…. Thiab lawv nrhiav tsis muaj dab tsi. Tom qab mus dhau cov ntaub ntawv rau txawv statsd (https://github.com/etsy/statsd/wiki#server-implementations Raws li lub Kaum Ob Hlis 11.12.2017, XNUMX), peb pom tsis muaj dab tsi kiag li. Thaj, tsis yog cov neeg tsim khoom lossis cov neeg siv cov kev daws teeb meem no tseem tsis tau ntsib SO ntau qhov ntsuas, txwv tsis pub lawv yuav twv yuav raug hu ib yam dab tsi.

Thiab tom qab ntawd peb nco qab txog "cov khoom ua si" statsd - bioyino, uas tau sau ntawm Just for Fun hackathon (lub npe ntawm qhov project tau tsim los ntawm tsab ntawv ua ntej pib hackathon) thiab pom tau tias peb xav tau ceev ceev peb tus kheej statsd. Rau dab tsi?

  • vim tias muaj tsawg dhau statsd clones hauv ntiaj teb,
  • vim tias nws muaj peev xwm muab qhov xav tau lossis ze rau qhov xav tau kev ua txhaum cai thiab scalability (suav nrog synchronizing aggregated metrics ntawm servers thiab daws qhov teeb meem ntawm kev xa tsis sib haum),
  • vim nws muaj peev xwm xam cov metrics kom raug ntau dua li brubeck,
  • vim tias koj tuaj yeem sau cov ntaub ntawv ntxaws ntxaws ntawm koj tus kheej, uas brubeck xyaum tsis tau muab rau peb,
  • vim kuv muaj caij nyoog los program kuv tus kheej hyperperformance faib scale lab daim ntawv thov, uas yuav tsis tag rov qab cov architecture ntawm lwm yam zoo sib xws hyperfor ... zoo, yog nws.

Yuav sau dab tsi? Tau kawg, hauv Rust. Vim li cas?

  • vim twb muaj ib txoj kev daws teeb meem,
  • vim hais tias tus sau ntawm tsab xov xwm twb paub Rust nyob rau hauv lub sij hawm ntawd thiab tau mob siab rau sau ib yam dab tsi nyob rau hauv nws rau ntau lawm nrog lub sij hawm los muab tso rau hauv qhib-qhov chaw,
  • vim hais tias cov lus nrog GC tsis haum rau peb vim qhov xwm ntawm cov tsheb tau txais (yuav luag ntawm lub sijhawm tiag tiag) thiab GC nres yog qhov ua tsis tau,
  • vim koj xav tau kev ua tau zoo tshaj plaws piv rau C
  • vim hais tias Rust muab peb nrog kev ntshai tsis sib haum xeeb, thiab yog tias peb pib sau nws hauv C / C ++, peb yuav tau raked nyob rau hauv ntau qhov tsis zoo, tsis muaj dej ntws, haiv neeg thiab lwm yam lus txaus ntshai tshaj li brubeck.

Kuj tseem muaj kev sib cav tawm tsam Rust. Lub tuam txhab tsis muaj kev paub txog kev tsim cov haujlwm hauv Rust, thiab tam sim no peb kuj tsis npaj siv nws hauv qhov project loj. Yog li ntawd, muaj kev ntshai heev uas tsis muaj dab tsi yuav ua tau, tab sis peb txiav txim siab los siv sijhawm thiab sim ua.

Lub sij hawm dhau mus...

Thaum kawg, tom qab ntau qhov kev sim ua tsis tiav, thawj zaug ua haujlwm tau npaj tiav. Dab tsi tshwm sim? Qhov no yog qhov tshwm sim.

Bioyino - faib, scalable metrics aggregator

Txhua lub node tau txais nws tus kheej cov txheej txheem ntsuas thiab sau lawv, thiab tsis suav cov ntsuas ntsuas rau cov hom uas lawv cov txheej txheem tag nrho yog xav tau rau kev sib sau zaum kawg. Cov nodes tau txuas rau ib leeg los ntawm qee yam kev faib xauv raws tu qauv, uas tso cai rau koj xaiv ntawm lawv ib leeg (ntawm no peb quaj) uas tsim nyog xa cov metrics rau Great One. Qhov teeb meem no tam sim no tau daws los ntawm Consul, tab sis nyob rau hauv lub neej yav tom ntej tus sau lub ambitions mus rau tus kheej kev siv Raft, qhov twg tus tsim nyog tshaj plaws yuav, ntawm chav kawm, yog tus thawj coj pom zoo. Ntxiv rau qhov kev pom zoo, cov nodes feem ntau (ib zaug ib ob los ntawm lub neej ntawd) xa mus rau lawv cov neeg nyob ze cov seem ntawm cov ntsuas ua ntej uas lawv tau tswj kom sau rau hauv thib ob. Nws hloov tawm tias qhov ntsuas thiab qhov ua txhaum cai raug khaws cia - txhua qhov ntawm qhov tseem tuav tag nrho cov kev ntsuas, tab sis cov kev ntsuas tau raug xa mus rau tag nrho, ntawm TCP thiab encoded rau hauv binary raws tu qauv, yog li tus nqi duplication raug txo qis piv rau UDP. Txawm hais tias muaj tus lej loj ntawm cov kev ntsuas tuaj, cov khoom tsim tau yuav tsum tau nco me ntsis thiab txawm tias tsawg dua CPU. Rau peb cov mertics compressible heev, qhov no tsuas yog ob peb kaum ntawm megabytes ntawm cov ntaub ntawv. Raws li ib qho ntxiv lawm, peb tsis tau txais cov ntaub ntawv tsis tsim nyog rov sau dua hauv Graphite, ib yam li burbeck.

UDP pob ntawv nrog kev ntsuas tsis sib npaug ntawm cov ntawm cov khoom siv hauv network los ntawm Round Robin yooj yim. Tau kawg, lub network kho vajtse tsis txheeb xyuas cov ntsiab lus ntawm cov pob ntawv thiab yog li tuaj yeem rub ntau dua 4M pob ntawv ib ob, tsis hais txog kev ntsuas uas nws tsis paub dab tsi hlo li. Yog tias peb xav txog tias cov kev ntsuas tsis tuaj ib zaug hauv txhua pob ntawv, ces peb tsis pom muaj teeb meem kev ua haujlwm hauv qhov chaw no. Yog hais tias ib tug neeg rau zaub mov poob, lub network ntaus ntawv sai sai (hauv 1-2 vib nas this) kuaj pom qhov tseeb no thiab tshem tawm cov neeg rau zaub mov poob ntawm kev sib hloov. Raws li qhov tshwm sim ntawm qhov no, passive (piv txwv li, tsis yog tus thawj coj) cov nodes tuaj yeem qhib thiab tawm siv tau yam tsis muaj kev ceeb toom ntawm cov kab kos. Qhov siab tshaj plaws peb poob yog ib feem ntawm cov metrics uas tuaj nyob rau hauv thib ob kawg. Tam sim ntawd poob / kaw / hloov ntawm tus thawj coj tseem yuav tsim qhov tsis txaus ntseeg me me (30 lub sijhawm thib ob tseem tsis sib xws), tab sis yog tias muaj kev sib txuas lus ntawm cov nodes, cov teeb meem no tuaj yeem txo qis, piv txwv li, xa tawm cov pob ntawv synchronization. .

Ib me ntsis txog cov qauv sab hauv. Daim ntawv thov yog, ntawm chav kawm, multithreaded, tab sis threading architecture txawv ntawm qhov uas siv nyob rau hauv brubeck. Cov xov hauv brubeck yog tib yam - txhua tus ntawm lawv yog lub luag haujlwm rau kev sau cov ntaub ntawv thiab kev sib sau ua ke. Hauv bioyino, cov neeg ua haujlwm tau muab faib ua ob pawg: cov neeg ua haujlwm rau lub network thiab cov neeg ua haujlwm sib sau ua ke. Qhov kev faib tawm no tso cai rau koj los tswj cov ntawv thov yooj yim dua nyob ntawm seb hom kev ntsuas: qhov twg yuav tsum muaj kev sib sau ua ke, koj tuaj yeem ntxiv cov aggregators, qhov twg muaj ntau lub network khiav, koj tuaj yeem ntxiv cov xov tooj ntawm tes. Tam sim no, ntawm peb cov servers peb ua haujlwm hauv 8 network thiab 4 kev sib sau ua ke.

Qhov suav (lub luag haujlwm rau kev sib sau) ib feem yog qhov tho txawv heev. Buffers uas tau sau los ntawm lub network ntws tau muab faib ua cov suav suav, qhov uas lawv tau txheeb xyuas thiab sib sau ua ke. Thaum thov, metrics raug muab xa mus rau lwm cov nodes. Tag nrho cov no, suav nrog xa cov ntaub ntawv ntawm cov nodes thiab ua haujlwm nrog Consul, tau ua asynchronously, khiav ntawm lub moj khaum Tokyo.

Muaj ntau yam teeb meem thaum lub sij hawm kev loj hlob yog tshwm sim los ntawm lub network ib feem ntawm lub luag hauj lwm rau tau txais metrics. Lub hom phiaj tseem ceeb ntawm kev sib cais network ntws mus rau hauv cov chaw sib cais yog lub siab xav txo lub sijhawm uas cov dej ntws siv tsis nyeem cov ntaub ntawv los ntawm lub qhov (socket). Cov kev xaiv siv asynchronous UDP thiab ib txwm recvmsg sai sai ploj mus: thawj zaug siv ntau qhov chaw siv CPU rau kev ua haujlwm, qhov thib ob xav tau ntau lub ntsiab lus hloov pauv. Yog li tam sim no nws yog siv recvmmsg ua nrog loj buffers (thiab buffers, gentlemen tub ceev xwm, tsis muaj dab tsi rau koj!). Kev them nyiaj yug rau UDP tsis tu ncua yog tshwj tseg rau cov teeb meem teeb meem uas tsis xav tau recvmmsg. Hauv ntau hom lus, nws muaj peev xwm ua tiav qhov tseem ceeb: feem ntau ntawm lub sijhawm, lub network xov rakes OS queue - nyeem cov ntaub ntawv los ntawm lub qhov (socket) thiab hloov mus rau qhov chaw tsis siv neeg, tsuas yog qee zaus hloov mus muab cov ntaub ntawv tsis txaus rau. sib sau ua ke. Cov kab nyob rau hauv lub qhov (socket) xyaum tsis sib sau ua ke, tus naj npawb ntawm cov pob ntawv poob zoo tsis loj hlob.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Nyob rau hauv lub neej ntawd nqis, qhov tsis loj yog teem kom loj heev. Yog tias koj dheev txiav txim siab sim tus neeg rau zaub mov koj tus kheej, koj yuav ntsib qhov tseeb tias tom qab xa cov lej me me, lawv yuav tsis tuaj txog hauv Graphite, tshuav nyob rau hauv lub network kwj tsis. Txhawm rau ua haujlwm nrog tus lej me me, koj yuav tsum teeb tsa bufsize thiab ua haujlwm-queue-loj rau cov nqi me me hauv qhov teeb tsa.

Thaum kawg, qee cov kab kos rau daim duab lovers.

Kev txheeb cais ntawm tus lej ntawm cov kev ntsuas tuaj rau txhua tus neeg rau zaub mov: ntau dua 2 lab MPS.

Bioyino - faib, scalable metrics aggregator

Disabling ib qho ntawm cov nodes thiab redistributing cov metrics tuaj.

Bioyino - faib, scalable metrics aggregator

Kev txheeb cais ntawm kev ntsuas tawm: tsuas yog ib qho ntawm ib txwm xa - tus thawj coj tua.

Bioyino - faib, scalable metrics aggregator

Kev txheeb cais ntawm kev ua haujlwm ntawm txhua qhov node, suav nrog kev ua yuam kev hauv ntau qhov system modules.

Bioyino - faib, scalable metrics aggregator

Kev nthuav dav ntawm cov metrics tuaj (cov npe metric tau muab zais).

Bioyino - faib, scalable metrics aggregator

Peb npaj yuav ua li cas nrog tag nrho cov no tom ntej? Tau kawg, sau code, damn...! Qhov project yog thawj zaug npaj los qhib-qhov chaw thiab yuav nyob twj ywm li ntawd thoob plaws hauv nws lub neej. Peb cov phiaj xwm tam sim no suav nrog kev hloov mus rau peb tus kheej version ntawm Raft, hloov cov txheej txheem ntawm cov phooj ywg mus rau qhov nqa tau yooj yim dua, qhia ntxiv cov txheeb cais sab hauv, hom kev ntsuas tshiab, kho kab laum thiab lwm yam kev txhim kho.

Tau kawg, txhua leej txhua tus yog txais tos los pab rau txoj kev loj hlob ntawm qhov project: tsim PR, Teeb meem, yog tias ua tau, peb yuav teb, txhim kho, thiab lwm yam.

Nrog hais tias, qhov ntawd yog txhua tus neeg, yuav peb cov ntxhw!



Tau qhov twg los: www.hab.com

Ntxiv ib saib