Bioyino - mpizara metrika azo scalable

Koa manangona metrika ianao. Tahaka ny antsika. Manangona metrika koa izahay. Mazava ho azy fa ilaina amin'ny raharaham-barotra. Androany isika dia hiresaka momba ny rohy voalohany amin'ny rafitra fanaraha-maso - mpizara fanangonan-tsonia mifanaraka amin'ny statsd bioyino, nahoana no nanoratra azy io ary nahoana izahay no nandao ny brubeck.

Bioyino - mpizara metrika azo scalable

Avy amin'ny lahatsoratra teo aloha (1, 2) azonao fantarina fa mandra-pahatongan'ny fotoana nanangonay marika mampiasa Brubeck. Nosoratana amin'ny C. Raha jerena amin'ny kaody, dia tsotra toy ny plug (zava-dehibe izany rehefa te handray anjara ianao) ary, ny tena zava-dehibe, dia mitantana ny volantsika 2 tapitrisa metrika isan-tsegondra (MPS) amin'ny faratampony. tsy misy olana. Ny antontan-taratasy dia milaza ny fanohanana ny MPS 4 tapitrisa misy asterisk. Midika izany fa ho azonao ny tarehimarika voalaza raha toa ka manamboatra tsara ny tambajotra amin'ny Linux ianao. (Tsy fantatray hoe firy ny MPS azonao raha miala amin'ny tambajotra ianao). Na dia teo aza ireo tombony ireo, dia nanana fitarainana mafy izahay momba ny brubeck.

Fitakiana 1. Github, mpamorona ny tetikasa, dia nijanona tsy nanohana azy: namoaka patch sy fanamboarana, nanaiky ny anay ary (tsy ny anay ihany) PR. Tao anatin'ny volana vitsivitsy lasa izay (tany amin'ny Febroary-Martsa 2018), dia nitohy indray ny hetsika, saingy talohan'izay dia efa ho 2 taona ny fitoniana tanteraka. Ankoatra izay dia eo am-pamolavolana ny tetikasa ho an'ny filan'ny Gihub anatiny, izay mety ho lasa sakana lehibe amin'ny fampidirana endri-javatra vaovao.

Fitakiana 2. Ny fahamarinan'ny kajy. Brubeck dia manangona sanda 65536 amin'ny fitambarany. Amin'ny toe-javatra misy antsika, ho an'ny metrika sasany, mandritra ny vanim-potoana fanangonana (30 segondra), dia mety hisy sanda maro kokoa ho tonga (1 amin'ny fara tampony). Vokatr'ity santionany ity dia toa tsy misy ilana azy ny sanda ambony indrindra sy ambany indrindra. Ohatra, toy izao:

Bioyino - mpizara metrika azo scalable
Toy ny efa nisy

Bioyino - mpizara metrika azo scalable
Ahoana no tokony ho izy

Noho io antony io ihany, dia matetika diso kajy ny vola. Ampidiro eto ny bug miaraka amin'ny mitsingevana 32-bit, izay amin'ny ankapobeny dia mandefa ny mpizara amin'ny segfault rehefa mahazo metrika toa tsy manan-tsiny, ary lasa tsara ny zava-drehetra. Ny bug, raha ny marina, dia tsy raikitra.

Ary farany, Mitaky X. Amin'ny fotoana anoratana dia vonona izahay hanolotra izany amin'ireo fampiharana statsd 14 mahery na latsaka izay hitanay. Alao sary an-tsaina fa nisy fotodrafitrasa tokana nitombo be ka tsy ampy intsony ny fanekena 4 tapitrisa MPS. Na dia mbola tsy nitombo aza izany, fa ny metrika dia efa zava-dehibe aminao fa na dia fohy, 2-3 minitra ao anaty tabilao dia mety ho lasa manakiana ary miteraka fahaketrahana tsy azo resena eo amin'ireo mpitantana. Koa satria asa tsy misy fisaorana ny fitsaboana ny fahaketrahana, dia ilaina ny vahaolana ara-teknika.

Voalohany, fandeferana fahadisoana, ka ny olana tampoka eo amin'ny mpizara dia tsy miteraka psychiatric zombie apocalypse ao amin'ny birao. Faharoa, ny scaling dia afaka manaiky mihoatra ny 4 tapitrisa MPS, tsy mihady lalina ao anatin'ny tambazotran'ny Linux ary mihamitombo "amin'ny sakany" amin'ny habeny ilaina.

Koa satria nanana toerana hanaovana scaling izahay, dia nanapa-kevitra ny hanomboka amin'ny fandeferana diso izahay. Β« MOMBA ! Fandeferana diso! Tsotra izany, vitantsika izany, ” nieritreritra izahay ary nanangana mpizara 2, nanangana dika mitovy amin'ny brubeck tsirairay. Mba hanaovana izany, dia tsy maintsy mandika ny fifamoivoizana miaraka amin'ny metrika ho an'ny mpizara roa izahay ary manoratra ho an'izany mihitsy aza utility kely. Namaha ny olan'ny fandeferana fahadisoana tamin'izany izahay, saingy... tsy dia tsara loatra. Tamin'ny voalohany dia toa tsara daholo ny zava-drehetra: ny brubeck tsirairay dia manangona ny dikan-ny aggregation azy manokana, manoratra angona amin'ny Graphite indray mandeha isaky ny 30 segondra, manodina ny elanelam-potoana taloha (izany dia atao amin'ny lafiny Graphite). Raha tsy nahomby tampoka ny mpizara iray, dia manana iray foana izahay miaraka amin'ny dika mitovy amin'ny angona natambatra. Fa izao no olana: raha tsy nahomby ny mpizara, dia misy "saw" miseho amin'ny grafika. Izany dia noho ny tsy fisian'ny elanelana 30 segondra an'i brubeck, ary amin'ny fotoanan'ny fianjerana dia tsy voasolo ny iray amin'izy ireo. Rehefa manomboka ny mpizara faharoa dia toy izany koa no mitranga. Tena azo leferina, fa tiako kokoa! Ny olana amin'ny scalability ihany koa dia tsy afaka. Ny metrika rehetra dia mbola "manidina" mankany amin'ny mpizara tokana, ary noho izany dia voafetra amin'ny MPS 2-4 tapitrisa mitovy izahay, arakaraka ny haavon'ny tambajotra.

Raha mieritreritra kely momba ny olana ianao ary mihady lanezy miaraka amin'ny angady, dia mety ho tonga ao an-tsainao ity hevitra mazava ity: mila statsd izay afaka miasa amin'ny fomba fizarana. Izany hoe, iray izay mampihatra ny fampifanarahana eo amin'ny nodes amin'ny fotoana sy ny metrika. "Mazava ho azy fa efa misy ny vahaolana toy izany," hoy izahay ary nankany amin'ny Google…. Ary tsy nahita na inona na inona izy. Rehefa avy nandalo ny antontan-taratasy ho an'ny statistika samihafa (https://github.com/etsy/statsd/wiki#server-implementations tamin'ny 11.12.2017 Desambra XNUMX), tsy nahita na inona na inona mihitsy izahay. Raha ny fahitana azy, na ny mpamorona na ny mpampiasa an'ireo vahaolana ireo dia mbola tsy nahita metrika maro be, raha tsy izany dia ho tonga amin'ny zavatra izy ireo.

Ary avy eo dia nahatsiaro ny statsd "kilalao" - bioyino, izay nosoratana tao amin'ny Just for Fun hackathon (ny anaran'ny tetikasa dia noforonin'ny script talohan'ny nanombohan'ny hackathon) ary nahatsapa fa mila maika ny statsd manokana izahay. Hatao inona?

  • satria vitsy loatra ny clones statsd eto amin'izao tontolo izao,
  • satria azo atao ny manome ny tiana na akaiky ny fandeferana sy ny scalability irina (ao anatin'izany ny fampifanarahana ny metrika mitambatra eo amin'ny mpizara sy ny famahana ny olan'ny fandefasana fifandirana),
  • satria azo atao ny manao kajy marina kokoa noho ny nataon'i brubeck,
  • satria afaka manangona antontan'isa amin'ny antsipiriany bebe kokoa ianao, izay tsy nomen'i brubeck anay,
  • satria nanana fahafahana aho nanao fandaharana manokana hyperperformance distributed scale laboratoara, izay tsy hamerina tanteraka ny maritrano ny hyperfor hafa mitovy ... eny, izany no izy.

Inona no hanoratana? Mazava ho azy, ao amin'ny Rust. Nahoana?

  • satria efa nisy vahaolana prototype,
  • satria ny mpanoratra ny lahatsoratra dia efa nahafantatra an'i Rust tamin'izany fotoana izany ary naniry mafy ny hanoratra zavatra ao anatiny ho famokarana miaraka amin'ny fahafahana mametraka izany amin'ny loharano misokatra,
  • satria ny fiteny misy GC dia tsy mety amintsika noho ny toetran'ny fifamoivoizana voaray (saika amin'ny fotoana tena izy) ary saika tsy azo ekena ny fiatoana GC,
  • satria mila fampisehoana ambony indrindra azo oharina amin'ny C ianao
  • satria ny Rust dia manome antsika fifanandrifian-javatra tsy misy tahotra, ary raha nanomboka nanoratra azy tamin'ny C/C ++ isika, dia ho niharan'ny vulnerability bebe kokoa, ny fihoaran'ny buffer, ny toetry ny hazakazaka ary ny teny mampatahotra hafa noho ny brubeck.

Nisy koa ny fifamaliana tamin’i Rust. Ny orinasa dia tsy manana traikefa amin'ny famoronana tetikasa ao Rust, ary ankehitriny dia tsy mikasa ny hampiasa izany amin'ny tetikasa lehibe ihany koa izahay. Noho izany, nisy ny tahotra mafy fa tsy hisy na inona na inona hitranga, saingy nanapa-kevitra ny haka vintana izahay ary nanandrana.

Nandeha ny fotoana...

Farany, taorian'ny fanandramana maro tsy nahomby, dia vonona ny dikan-teny voalohany miasa. Inona no nitranga? Izany no nitranga.

Bioyino - mpizara metrika azo scalable

Ny node tsirairay dia mandray ny fitambaran'ny metrika azy manokana ary manangona azy ireo, ary tsy manangona metrika ho an'ireo karazana ilana ny fitambarany manontolo amin'ny fanangonana farany. Ny nodes dia mifamatotra amin'ny karazana protocol hidin-trano zaraina, izay ahafahanao misafidy eo amin'izy ireo ny hany tokana (eto izahay nitomany) izay mendrika ny handefasana metrika ho an'ilay Lehibe. Ity olana ity dia voavaha amin'izao fotoana izao Kaonsily, fa amin'ny hoavy dia miitatra amin'ny fanirian'ny mpanoratra IHANY fanatanterahana Raft, izay ny mendrika indrindra, mazava ho azy, ho node mpitarika marimaritra iraisana. Ho fanampin'ny marimaritra iraisana, matetika ny nodes (indray mandeha isan-tsegondra amin'ny alΓ lan'ny default) dia mandefa any amin'ny mpifanolo-bodirindrina aminy ireo ampahany amin'ny metrika voaangona mialoha izay vitan'izy ireo nangonina tamin'io segondra io. Hita fa voatahiry ny scaling sy ny fandeferana diso - ny node tsirairay dia mbola mitazona metrika feno, fa ny metrika dia alefa efa natambatra, amin'ny alΓ lan'ny TCP ary voakodia ho protocol binary, ka ny vidin'ny duplication dia mihena be raha oharina amin'ny UDP. Na dia eo aza ny isan'ny metrika miditra, ny fanangonana dia mitaky fitadidiana kely ary CPU kely kokoa. Ho an'ny mertics tena azo fehezina, dia megabytes vitsivitsy monja izany. Amin'ny maha-bonus fanampiny, dia tsy mahazo angon-drakitra tsy ilaina amin'ny Graphite izahay, toy ny tamin'ny burbeck.

Ny fonosana UDP miaraka amin'ny metrika dia tsy mifandanja eo amin'ny nodes amin'ny fitaovan'ny tambajotra amin'ny alΓ lan'ny Round Robin tsotra. Mazava ho azy fa tsy manara-maso ny votoatin'ny fonosana ny fitaovana tambajotra ary noho izany dia afaka misintona fonosana mihoatra ny 4M isan-tsegondra, tsy lazaina intsony ny metrika izay tsy fantany akory. Raha raisinay fa tsy tonga indray mandeha isaky ny fonosana ny metrika, dia tsy mahita olana amin'ny fampisehoana amin'ity toerana ity izahay. Raha mianjera ny mpizara iray, dia hitan'ny fitaovana tambajotra haingana (ao anatin'ny 1-2 segondra) io zava-misy io ary esorina amin'ny fihodinana ilay mpizara nianjera. Vokatr'izany, ny node passive (izany hoe, tsy mpitarika) dia azo alefa sy vonoina saika tsy misy mahita ny fisintonana amin'ny tabilao. Ny ambony indrindra very dia ampahany amin'ny metrika tonga tamin'ny segondra farany. Ny fatiantoka tampoka / fanakatonana / famidin'ny mpitarika dia mbola hiteraka anomaliana kely (mbola tsy mifanaraka ny elanelana 30 segondra), fa raha misy fifandraisana eo amin'ny nodes dia azo ahena ireo olana ireo, ohatra, amin'ny fandefasana fonosana synchronization .

Kely momba ny rafitra anatiny. Ny fampiharana dia, mazava ho azy, multithreaded, fa ny rafitra kofehy dia tsy mitovy amin'ny ampiasaina amin'ny brubeck. Mitovy ny kofehy amin'ny brubeck - ny tsirairay amin'izy ireo dia tompon'andraikitra amin'ny fanangonana vaovao sy ny fanangonana. Ao amin'ny bioyino, mizara roa ny mpiasa: ireo tompon'andraikitra amin'ny tambajotra ary ireo tompon'andraikitra amin'ny fanangonana. Ity fizarana ity dia ahafahanao mitantana mora kokoa ny fampiharana miankina amin'ny karazana metrika: izay ilaina ny fanangonana mafonja, azonao atao ny manampy aggregators, izay misy fifamoivoizana amin'ny tambajotra, azonao atao ny manampy ny isan'ny tambajotra. Amin'izao fotoana izao, amin'ny mpizara anay dia miasa amin'ny tambajotra 8 izahay ary mikoriana 4.

Ny ampahany amin'ny fanisana (tompon'andraikitra amin'ny fanangonana) dia mankaleo. Ny buffers feno amin'ny fikorianan'ny tambajotra dia zaraina amin'ny fanisana tondra-drano, izay amboarina sy atambatra avy eo. Amin'ny fangatahana dia omena ny metrika handefasana any amin'ny nodes hafa. Izany rehetra izany, anisan'izany ny fandefasana angon-drakitra eo anelanelan'ny nodes sy ny fiaraha-miasa amin'ny Consul, dia atao asynchronously, mandeha amin'ny framework Tokio.

Olana maro kokoa nandritra ny fampandrosoana no nateraky ny ampahany amin'ny tambajotra tompon'andraikitra amin'ny fandraisana metrika. Ny tanjona lehibe amin'ny fanasarahana ny tambajotra mikoriana amin'ny sampana misaraka dia ny faniriana hampihena ny fotoana lanin'ny fikorianan'ny iray tsy hamaky angona avy amin'ny socket. Nanjavona haingana ny safidy mampiasa UDP asynchronous sy recvmsg mahazatra: ny voalohany dia mandany CPU be mpampiasa-espace be loatra amin'ny fanodinana hetsika, ny faharoa dia mitaky fifandimbiasana contexte be loatra. Noho izany dia ampiasaina izao recvmmsg miaraka amin'ny buffer lehibe (ary ny buffers, tompokolahy manamboninahitra, dia tsinontsinona anao!). Ny fanohanana ny UDP mahazatra dia natokana ho an'ny tranga maivana izay tsy ilaina ny recvmmsg. Amin'ny fomba multimessage dia azo atao ny manatratra ny zava-dehibe indrindra: ny ankamaroan'ny fotoana, ny kofehy amin'ny tamba-jotra dia manodina ny filaharana OS - mamaky angon-drakitra avy amin'ny socket ary mamindra izany any amin'ny buffer userspace, indraindray ihany no mamadika ny fanomezana ny buffer feno. aggregators. Saika tsy miangona ny filaharana ao amin'ny socket, saika tsy mitombo ny isan'ny fonosana latsaka.

fanamarihana

Amin'ny toe-javatra mahazatra, ny haben'ny buffer dia napetraka ho lehibe. Raha manapa-kevitra tampoka ny hanandrana ny lohamilina ianao, dia mety ho hitanao fa aorian'ny fandefasana metrika kely dia tsy ho tonga ao amin'ny Graphite izy ireo, mijanona ao amin'ny buffer stream stream. Raha hiasa miaraka amin'ny metrika vitsivitsy ianao dia mila mametraka ny bufsize sy ny haben'ny filaharana amin'ny sanda kely kokoa ao amin'ny config.

Farany, tabilao sasany ho an'ireo tia tabilao.

Statistika momba ny isan'ny metrika ho avy isaky ny mpizara: mihoatra ny 2 tapitrisa MPS.

Bioyino - mpizara metrika azo scalable

Fanesorana ny iray amin'ireo node ary avereno mizara ny metrika ho avy.

Bioyino - mpizara metrika azo scalable

Statistika momba ny metrika mivoaka: node iray ihany no mandefa foana - ny lehiben'ny fanafihana.

Bioyino - mpizara metrika azo scalable

Ny antontan'isa momba ny fiasan'ny node tsirairay, amin'ny fiheverana ny lesoka amin'ny modules rafitra isan-karazany.

Bioyino - mpizara metrika azo scalable

Ny antsipiriany momba ny metrika ho avy (nafenina ny anarana metrika).

Bioyino - mpizara metrika azo scalable

Inona no kasaina hatao amin’izany rehetra izany manaraka? Mazava ho azy, manorata kaody, ozona ...! Ny tetikasa dia nokasaina ho open-source tany am-boalohany ary hitoetra ho toy izany mandritra ny androm-piainany. Ny drafitra avy hatrany dia ny fifindrana amin'ny dikan-tsarimihetsika manokana an'ny Raft, ny fanovana ny protocol peer ho mora kokoa, ny fampidirana antontan'isa anatiny fanampiny, karazana metrika vaovao, fanamboarana bug ary fanatsarana hafa.

Mazava ho azy fa mandray ny anjara birikiny amin’ny fampandrosoana ny tetikasa ny rehetra: mamorona PR, Resaka, raha azo atao dia hamaly izahay, hanatsara, sns.

Raha izany no voalaza dia izay ihany ry reto, vidio ny elefantantsika!



Source: www.habr.com

Add a comment