Bioyino - distribiye, agrégateur mezi évolutive

Se konsa, ou kolekte mesures. Kòm nou ye. Nou menm tou nou kolekte mezi. Natirèlman, nesesè pou biznis. Jodi a nou pral pale sou premye lyen nan sistèm siveyans nou an - yon sèvè agrégasyon statsd-konpatib. bioyino, poukisa nou te ekri li ak poukisa nou abandone brubeck.

Bioyino - distribiye, agrégateur mezi évolutive

Soti nan atik anvan nou yo (1, 2) ou ka jwenn ke jiska kèk tan nou kolekte mak lè l sèvi avèk Brubeck. Li ekri an C. Soti nan yon pwen de vi kòd, li se senp tankou yon ploge (sa a enpòtan lè ou vle kontribye) epi, sa ki pi enpòtan, li okipe volim nou yo nan 2 milyon mèt pa segonn (MPS) nan pik. san okenn pwoblèm. Dokiman an endike sipò pou 4 milyon MPS ak yon asterisk. Sa vle di ke ou pral jwenn figi a deklare si ou konfigirasyon rezo a kòrèkteman sou Linux. (Nou pa konnen konbyen MPS ou ka jwenn si ou kite rezo a jan li ye a). Malgre avantaj sa yo, nou te gen plizyè plent grav sou brubeck.

Reklamasyon 1. Github, pwomotè pwojè a, sispann sipòte li: pibliye plak ak koreksyon, aksepte PR nou yo ak (pa sèlman nou an). Nan kèk mwa ki sot pase yo (yon kote soti nan fevriye-mas 2018), aktivite te rekòmanse, men anvan sa te gen prèske 2 ane nan kalm konplè. Anplis de sa, pwojè a ap devlope pou bezwen entèn Gihub, ki ka vin yon obstak grav nan entwodiksyon de nouvo karakteristik.

Reklamasyon 2. Presizyon nan kalkil yo. Brubeck kolekte yon total de 65536 valè pou agrégation. Nan ka nou an, pou kèk mezi, pandan peryòd agrégation (30 segonn), anpil plis valè ka rive (1 nan pik la). Kòm yon rezilta nan echantiyon sa a, valè maksimòm ak minimòm yo parèt initil. Pou egzanp, tankou sa a:

Bioyino - distribiye, agrégateur mezi évolutive
Kòm li te ye

Bioyino - distribiye, agrégateur mezi évolutive
Ki jan li ta dwe ye

Pou menm rezon an, kantite lajan yo jeneralman kalkile mal. Ajoute isit la yon ensèk ak yon debòde flote 32-bit, ki jeneralman voye sèvè a nan segfault lè li resevwa yon metrik w pèdi inosan, ak tout bagay vin gwo. Ensèk la, nan chemen an, pa te fikse.

, E finalman, Reklamasyon X. Nan moman sa a nan ekri a, nou pare pou prezante li bay tout 14 plis oswa mwens travay statsd aplikasyon ke nou te kapab jwenn. Ann imajine ke kèk enfrastrikti sèl te grandi anpil ke aksepte 4 milyon MPS pa ase ankò. Oswa menm si li poko grandi, men mezi yo deja tèlman enpòtan pou ou ke menm kout, 2-3 minit plonje nan tablo yo ka deja vin kritik epi lakòz depresyon enfranchisabl nan mitan administratè yo. Depi trete depresyon se yon travay engra, solisyon teknik yo bezwen.

Premyèman, tolerans fòt, se konsa ke yon pwoblèm toudenkou sou sèvè a pa lakòz yon Apocalypse zonbi sikyatrik nan biwo a. Dezyèmman, dekale pou kapab aksepte plis pase 4 milyon MPS, san yo pa fouye byen fon nan pil rezo Linux la ak kalm grandi "nan lajè" nan gwosè yo mande yo.

Depi nou te gen plas pou dekale, nou te deside kòmanse ak tolerans fòt. "SOU! Fòt tolerans! Li senp, nou ka fè li," nou te panse ak lanse 2 sèvè, ogmante yon kopi brubeck sou chak. Pou fè sa, nou te oblije kopye trafik ak mezi nan tou de serveurs e menm ekri pou sa a ti sèvis piblik. Nou rezoud pwoblèm nan tolerans fay ak sa a, men ... pa trè byen. Okòmansman, tout bagay te sanble gwo: chak brubeck kolekte vèsyon pwòp li yo nan agrégation, ekri done sou Graphite yon fwa chak 30 segonn, ranplase ansyen entèval la (sa a se fè sou bò Graphite). Si yon sèl sèvè toudenkou echwe, nou toujou gen yon dezyèm youn ak pwòp kopi done yo total. Men, isit la nan pwoblèm nan: si sèvè a echwe, yon "saw" parèt sou graf yo. Sa a se akòz lefèt ke entèval 30 segonn Brubeck yo pa senkronize, ak nan moman yon aksidan youn nan yo pa ranplase. Lè dezyèm sèvè a kòmanse, menm bagay la rive. Byen tolerab, men mwen vle pi bon! Pwoblèm nan évolutivité tou pa ale. Tout paramèt toujou "vole" nan yon sèl sèvè, ak Se poutèt sa nou limite a menm 2-4 milyon MPS, tou depann de nivo rezo a.

Si ou panse yon ti kras sou pwoblèm nan epi an menm tan an fouye nèj ak yon pèl, Lè sa a, lide sa a evidan ka vin nan tèt ou: ou bezwen yon statsd ki ka travay nan mòd distribiye. Sa vle di, youn ki aplike senkronizasyon ant nœuds nan tan ak mezi. "Natirèlman, yon solisyon konsa pwobableman deja egziste," nou te di epi yo te ale nan Google .... Epi yo pa jwenn anyen. Apre w fin ale nan dokiman an pou diferan statsd (https://github.com/etsy/statsd/wiki#server-implementations depi 11.12.2017 desanm XNUMX), nou pa jwenn absoliman anyen. Aparamman, ni devlopè yo ni itilizatè yo nan solisyon sa yo poko rankontre anpil mezi, otreman yo ta definitivman vini ak yon bagay.

Lè sa a, nou sonje sou "jwèt" statsd - bioyino, ki te ekri nan Just for Fun Hackathon (non pwojè a te pwodwi pa script la anvan kòmansman Hackathon an) epi reyalize ke nou ijan bezwen pwòp statsd nou an. Pou kisa?

  • paske gen twòp klonaj statsd nan mond lan,
  • paske li posib pou bay tolerans fay ak évolutivité vle oswa tou pre (ki gen ladan senkronize mezi total ant sèvè ak rezoud pwoblèm nan voye konfli),
  • paske li posib pou kalkile metrik pi byen pase brubeck fè,
  • paske ou ka kolekte estatistik plis detay tèt ou, ki brubeck pratikman pa t 'bay nou,
  • paske mwen te gen yon chans pou pwograme pwòp hyperperformance distribiye aplikasyon laboratwa echèl mwen an, ki pa pral konplètman repete achitekti a nan yon lòt hyperfor ki sanble... byen, se li.

Sou kisa pou ekri? Natirèlman, nan Rust. Poukisa?

  • paske te deja yon solisyon pwototip,
  • paske otè atik la te deja konnen Rust nan moman sa a e li te anvi ekri yon bagay ladan l pou pwodiksyon ak opòtinite pou mete l nan sous louvri,
  • paske lang ki gen GC yo pa apwopriye pou nou akòz nati trafik la resevwa (prèske an tan reyèl) ak poz GC yo pratikman akseptab,
  • paske ou bezwen pèfòmans maksimòm ki konparab ak C
  • paske Rust bay nou konkou san pè, epi si nou te kòmanse ekri li nan C/C++, nou ta gen plis frajilite, debòde tanpon, kondisyon ras ak lòt mo pè pase brubeck.

Te gen yon diskisyon tou kont Rust. Konpayi an pa te gen okenn eksperyans kreye pwojè nan Rust, epi kounye a nou menm tou nou pa planifye yo sèvi ak li nan pwojè prensipal la. Se poutèt sa, te gen laperèz grav ke pa gen anyen ta travay deyò, men nou deside pran yon chans epi yo te eseye.

Tan pase...

Finalman, apre plizyè tantativ echwe, premye vèsyon an k ap travay te pare. sak pase? Sa a se sa ki te pase.

Bioyino - distribiye, agrégateur mezi évolutive

Chak nœuds resevwa pwòp seri metrik li yo epi akimile yo, epi yo pa rasanble metrik pou kalite sa yo kote yo mande tout seri yo pou totalman final la. Nœuds yo konekte youn ak lòt pa kèk kalite pwotokòl fèmen distribiye, ki pèmèt ou chwazi nan mitan yo youn nan sèlman (isit la nou kriye) ki merite pou yo voye metrik nan Great One la. Pwoblèm sa a ap rezoud kounye a pa Konsil, men nan lavni anbisyon otè a pwolonje nan pwòp aplikasyon Kannòt, kote youn ki pi merite a pral, nan kou, lidè konsansis ne. Anplis konsansis, nœuds byen souvan (yon fwa pa segonn pa default) voye bay vwazen yo pati sa yo nan mezi pre-agrégées ke yo jere yo kolekte nan dezyèm sa a. Li sanble ke dekale ak tolerans fay yo konsève - chak ne toujou kenbe yon seri konplè nan metrik, men metrik yo voye deja total, atravè TCP ak kode nan yon pwotokòl binè, kidonk depans repetisyon yo siyifikativman redwi konpare ak UDP. Malgre kantite a jistis gwo nan mezi fèk ap rantre, akimilasyon mande pou anpil memwa e menm mwens CPU. Pou mertics trè konpresib nou yo, sa a se sèlman kèk dizèn de megabyte nan done. Kòm yon bonis adisyonèl, nou pa jwenn okenn reekri done nesesè nan Graphite, menm jan sa te ka a ak burbeck.

Pake UDP ak mezi yo dezekilib ant nœuds sou ekipman rezo atravè yon senp Round Robin. Natirèlman, pyès ki nan konpitè rezo a pa analize sa ki nan pake yo ak Se poutèt sa ka rale pi plis pase 4M pake pou chak segonn, nou pa mansyone mezi sou ki li pa konnen anyen ditou. Si nou pran an kont ke mezi yo pa vini youn nan yon moman nan chak pake, Lè sa a, nou pa prevwa okenn pwoblèm pèfòmans nan plas sa a. Si yon sèvè aksidan, aparèy rezo a byen vit (nan 1-2 segonn) detekte reyalite sa a epi retire sèvè ki te fè aksidan an soti nan wotasyon. Kòm yon rezilta, pasif (sa vle di, ki pa lidè) nœuds yo ka vire sou ak koupe pratikman san yo pa remake drawdowns sou tablo yo. Maksimòm nou pèdi a se yon pati nan mezi ki te vini nan dènye segonn lan. Yon pèt/fèmen/chanjman toudenkou nan yon lidè ap toujou kreye yon ti anomali (entèval 30 segonn la toujou soti nan senkronizasyon), men si gen kominikasyon ant nœuds, pwoblèm sa yo ka minimize, pou egzanp, pa voye pake senkronizasyon. .

Yon ti kras sou estrikti entèn la. Aplikasyon an se, nan kou, multithreaded, men achitekti an threading diferan de sa yo itilize nan brubeck. Fil yo nan brubeck yo se menm bagay la - chak nan yo responsab pou tou de koleksyon enfòmasyon ak agrégation. Nan bioyino, travayè yo divize an de gwoup: moun ki responsab pou rezo a ak moun ki responsab pou agrégation. Divizyon sa a pèmèt ou jere aplikasyon an yon fason ki pi fleksib tou depann de kalite mezi yo: kote agrégation entansif nesesè, ou ka ajoute agrégateur, kote gen anpil trafik rezo a, ou ka ajoute kantite koule rezo a. Nan moman sa a, sou serveurs nou yo nou travay nan 8 rezo ak 4 flux agrégation.

Pati nan konte (responsab pou agrégation) se byen raz. Tanpon ki ranpli pa koule rezo yo distribye nan mitan koule konte, kote yo apre sa analize ak totalize. Sou demann, mezi yo bay pou voye nan lòt nœuds. Tout bagay sa a, ki gen ladan voye done ant nœuds ak travay ak Consul, fèt asynchrone, kouri sou fondasyon an. tokio.

Anpil plis pwoblèm pandan devlopman yo te koze pa pati rezo ki responsab pou resevwa mezi. Objektif prensipal separe koule rezo a nan antite separe se dezi a diminye tan ke yon koule depanse pa gen okenn pou li done ki soti nan priz la. Opsyon lè l sèvi avèk asynchrone UDP ak regilye recvmsg byen vit disparèt: premye a konsome twòp CPU espas itilizatè pou pwosesis evènman, dezyèm lan mande pou switch kontèks twòp. Se poutèt sa li se kounye a itilize recvmmsg ak gwo tanpon (ak tanpon, mesye ofisye yo, pa anyen pou ou!). Sipò pou UDP regilye rezève pou ka limyè kote recvmmsg pa nesesè. Nan mòd multimessage, li posib reyalize bagay prensipal la: a vas majorite nan tan an, fil rezo a rato keu OS la - li done ki soti nan priz la epi transfere li nan tanpon an espas itilizatè, sèlman detanzantan chanje nan bay tanpon ki ranpli a. agrégateurs. Nat la nan priz la pratikman pa akimile, kantite pakè tonbe pratikman pa grandi.

Note

Nan paramèt default yo, gwosè tanpon an tabli yo dwe byen gwo. Si ou toudenkou deside eseye sèvè a tèt ou, ou ka rankontre lefèt ke apre voye yon ti kantite mezi, yo pa pral rive nan Graphite, rete nan tanpon kouran rezo a. Pou travay ak yon ti kantite mezi, ou bezwen mete bufsize ak gwosè keu travay yo nan pi piti valè nan konfigirasyon an.

Finalman, kèk tablo pou rayisab tablo yo.

Estatistik sou kantite mezi ki fèk ap rantre pou chak sèvè: plis pase 2 milyon MPS.

Bioyino - distribiye, agrégateur mezi évolutive

Enfim youn nan nœuds yo ak redistribiye mezi fèk ap rantre.

Bioyino - distribiye, agrégateur mezi évolutive

Estatistik sou mezi sortan: yon sèl ne toujou voye - bòs nan travay atak.

Bioyino - distribiye, agrégateur mezi évolutive

Estatistik sou operasyon an nan chak ne, pran an kont erè nan modil sistèm divès kalite.

Bioyino - distribiye, agrégateur mezi évolutive

Detaye nan mezi fèk ap rantre (non metrik yo kache).

Bioyino - distribiye, agrégateur mezi évolutive

Kisa nou planifye pou fè ak tout bagay sa yo pwochen? Natirèlman, ekri kòd, modi...! Pwojè a te okòmansman te planifye yo dwe sous louvri epi li pral rete konsa pandan tout lavi li. Plan imedya nou yo gen ladan chanje nan pwòp vèsyon Raft nou an, chanje pwotokòl parèy la nan yon pwotokòl ki pi pòtab, entwodwi estatistik entèn adisyonèl, nouvo kalite mezi, korije ensèk ak lòt amelyorasyon.

Natirèlman, tout moun akeyi yo ede nan devlopman nan pwojè a: kreye PR, Pwoblèm, si sa posib nou pral reponn, amelyore, elatriye.

Avèk sa yo te di, se tout moun, achte elefan nou yo!



Sous: www.habr.com

Add nouvo kòmantè