No laila ʻohi ʻoe i nā metric. E like me mākou. ʻOhi pū mākou i nā ana. ʻOiaʻiʻo, pono no ka ʻoihana. I kēia lā e kamaʻilio mākou e pili ana i ka loulou mua loa o kā mākou ʻōnaehana nānā - kahi kikowaena hoʻohui statsd-compatible
Mai kā mākou mau ʻatikala mua (
Koi 1. ʻO Github, ka mea nāna i hoʻomohala i ka papahana, ua ho'ōki i ke kākoʻo ʻana iā ia: hoʻopuka i nā patch a me nā hoʻoponopono, e ʻae i kā mākou a (ʻaʻole wale kā mākou) PR. I nā mahina i hala iho nei (ma kahi o Fepeluali-Malaki 2018), ua hoʻomaka hou ka hana, akā ma mua o kēlā kokoke i 2 mau makahiki o ka mālie piha. Eia kekahi, ke kūkulu ʻia nei ka papahana
Koi 2. Ka pololei o ka helu. ʻOhi ʻo Brubeck i ka huina o 65536 mau waiwai no ka hōʻuluʻulu ʻana. I kā mākou hihia, no kekahi mau metric, i ka wā aggregation (30 kekona), ʻoi aku ka nui o nā waiwai e hiki mai (1 ma ka piko). Ma muli o kēia hoʻohālike, ʻike ʻia nā waiwai kiʻekiʻe a me ka liʻiliʻi loa. No ka laʻana, e like me kēia:
E like me ia
Pehea e pono ai
No ke kumu like, helu hewa ʻia nā huina. E hoʻohui i ʻaneʻi i kahi pahu me kahi 32-bit float overflow, ka mea maʻamau e hoʻouna i ke kikowaena i segfault i ka wā e loaʻa ai kahi metric like ʻole, a lilo nā mea āpau. ʻO ka bug, ma ke ala, ʻaʻole i hoʻopaʻa ʻia.
A ma hope Koi iā X. I ka manawa e kākau ai, ua mākaukau mākou e hōʻike iā ia i nā 14 a i ʻole nā mea hana statsd hana i hiki iā mākou ke loaʻa. E noʻonoʻo kākou ua ulu nui kekahi ʻoihana hoʻokahi a ʻaʻole lawa ka ʻae ʻana i ka 4 miliona MPS. A i ʻole inā ʻaʻole i ulu aʻe, akā ua koʻikoʻi nā metric iā ʻoe a hiki i ka pōkole, 2-3 mau minuke i loko o ka pakuhi hiki ke lilo i mea koʻikoʻi a hoʻoulu i ke kaumaha ʻole i waena o nā luna. No ka mea he hana mahalo ʻole ka mālama ʻana i ke kaumaha, pono nā ʻenehana loea.
ʻO ka mea mua, ʻo ka hoʻomanawanui hewa, no laila ʻaʻole pilikia ka pilikia ma ke kikowaena i kahi apocalypse zombie psychiatric i ke keʻena. ʻO ka lua, ʻo ka scaling e hiki ke ʻae i ka ʻoi aku ma mua o 4 miliona MPS, me ka ʻole e ʻeli hohonu i ka waihona pūnaewele Linux a me ka ulu mālie "i ka laulā" i ka nui e pono ai.
No ka loaʻa ʻana o kahi lumi no ka hoʻonui ʻana, ua hoʻoholo mākou e hoʻomaka me ka hoʻomanawanui hewa. "E pili ana! Hoʻomanawanui hewa! He mea maʻalahi, hiki iā mākou ke hana, "manaʻo mākou a hoʻokuʻu i nā kikowaena 2, e hāpai ana i kahi kope o ka brubeck ma kēlā me kēia. No ka hana ʻana i kēia, pono mākou e kope i nā kaʻa me nā metric i nā kikowaena ʻelua a kākau pū no kēia
Inā ʻoe e noʻonoʻo iki i ka pilikia a ma ka manawa like e ʻeli i ka hau me kahi ʻōpala, a laila hiki mai kēia manaʻo maopopo i ka manaʻo: pono ʻoe i kahi statsd hiki ke hana ma ke ʻano puʻunaue. ʻO ia ka mea e hoʻokō i ka synchronization ma waena o nā nodes i ka manawa a me nā metric. "ʻOiaʻiʻo, aia paha kēia ʻano hopena," wahi a mākou a hele i Google…. Aole i loaa ia lakou kekahi mea. Ma hope o ka hele ʻana i ka palapala no nā statsd ʻokoʻa (
A laila hoʻomanaʻo mākou e pili ana i ka statsd "mea pāʻani" - bioyino, i kākau ʻia ma Just for Fun hackathon (ua hana ʻia ka inoa o ka papahana e ka palapala ma mua o ka hoʻomaka ʻana o ka hackathon) a ʻike mākou ua makemake mākou i kā mākou statsd ponoʻī. He aha ke kumu?
- no ka mea, he kakaikahi loa na clones statsd ma ka honua nei,
- no ka mea hiki ke hāʻawi i ka makemake a kokoke paha i ka hoʻomanawanui hewa i makemake ʻia a me ka scalability (me ka synchronizing aggregated metrics ma waena o nā kikowaena a me ka hoʻoponopono ʻana i ka pilikia o ka hoʻouna ʻana i nā paio),
- no ka mea hiki ke helu pololei i nā metric ma mua o ka brubeck,
- no ka mea hiki iā ʻoe ke hōʻiliʻili i nā ʻikepili kikoʻī iā ʻoe iho, ʻaʻole i hāʻawi ʻia e brubeck iā mākou,
- no ka mea, ua loaʻa iaʻu kahi manawa e hoʻolālā i kaʻu noi noiʻi hyperperformance distributed scale lab, ʻaʻole ia e hana hou i ka hoʻolālā ʻana o kahi hyperfor like ʻē aʻe ... ʻoi, ʻo ia.
He aha ka mea e kākau ai? ʻOiaʻiʻo, ma Rust. No ke aha mai?
- no ka mea, ua loaʻa kahi hoʻonā prototype,
- no ka mea, ua ʻike mua ka mea kākau o ka ʻatikala iā Rust i kēlā manawa a makemake nui ʻo ia e kākau i kekahi mea i loko o ia mea no ka hana ʻana me ka manawa kūpono e hoʻokomo i loko o ka open-source,
- no ka mea, ʻaʻole kūpono nā ʻōlelo me GC no mākou ma muli o ke ʻano o ke kaʻa i loaʻa (kokoke i ka manawa maoli) a ʻaʻole ʻae ʻia nā hoʻomaha GC,
- no ka mea pono ʻoe i ka hana kiʻekiʻe e like me C
- no ka mea, hāʻawi mai ʻo Rust iā mākou i ka concurrency makaʻu ʻole, a inā mākou i hoʻomaka e kākau iā ia ma C/C ++, ua loaʻa iā mākou i nā mea nāwaliwali hou aʻe, ka nui o ka pale, nā kūlana lāhui a me nā huaʻōlelo weliweli ʻē aʻe ma mua o brubeck.
He paio no hoi ia Rust. ʻAʻohe ʻike o ka hui i ka hana ʻana i nā papahana ma Rust, a i kēia manawa ʻaʻole mākou e hoʻolālā e hoʻohana iā ia i ka papahana nui. No laila, ua hopohopo koʻikoʻi ʻaʻole e holo kekahi mea, akā ua hoʻoholo mākou e lawe i kahi manawa a hoʻāʻo.
Ua hala ka manawa...
ʻO ka hope, ma hope o kekahi mau hoʻāʻo ʻole ʻana, ua mākaukau ka mana hana mua. He aha i hana ai? ʻO kēia ka mea i hana ʻia.
Loaʻa i kēlā me kēia node kona mau ana ponoʻī a hōʻiliʻili iā lākou, ʻaʻole ia e hōʻuluʻulu i nā ana no kēlā mau ʻano i koi ʻia kā lākou pūʻulu piha no ka hōʻuluʻulu hope. Hoʻopili ʻia nā nodes i kekahi i kekahi e kekahi ʻano protocol laka i hāʻawi ʻia, e hiki ai iā ʻoe ke koho i waena o lākou i hoʻokahi wale nō (eia mākou i uē ai) i kūpono e hoʻouna i nā metric i ka Mea Nui. Ke hoʻoponopono ʻia nei kēia pilikia e
ʻAʻole kaulike nā ʻeke UDP me nā metric ma waena o nā nodes ma nā lako pūnaewele ma o Round Robin maʻalahi. ʻO kaʻoiaʻiʻo, ʻaʻole e hoʻokaʻawale ka ʻenehana pūnaewele i nā ʻike o nā ʻeke a no laila hiki ke huki ʻoi aku ma mua o 4M packets i kēlā me kēia kekona, ʻaʻole e haʻi i nā metric e pili ana i ka ʻike ʻole. Inā mākou e noʻonoʻo ʻaʻole hiki mai nā metric i kēlā me kēia ʻeke, a laila ʻaʻole mākou e ʻike i nā pilikia hana ma kēia wahi. Inā hāʻule kahi kikowaena, ʻike koke ka ʻenehana pūnaewele (i loko o 1-2 kekona) i kēia ʻoiaʻiʻo a wehe i ka server i hāʻule mai ka hoʻololi ʻana. Ma muli o kēia, hiki ke hoʻohuli a hoʻopau ʻia nā node passive (ʻo ia hoʻi, ʻaʻole alakaʻi) me ka ʻike ʻole i ka huki ʻana ma nā pakuhi. ʻO ka hapa nui e nalowale ai mākou he ʻāpana o nā metric i hiki mai i ke kekona hope. ʻO ka nalowale / pani ʻana / hoʻololi koke o kahi alakaʻi e hana mau i kahi anomaly liʻiliʻi (ʻaʻole sync ka manawa 30 kekona), akā inā he kamaʻilio ma waena o nā nodes, hiki ke hōʻemi ʻia kēia mau pilikia, no ka laʻana, ma ka hoʻouna ʻana i nā ʻeke hoʻonohonoho. .
He wahi liʻiliʻi e pili ana i ka hale o loko. ʻO ka noi, ʻoiaʻiʻo, multithreaded, akā ʻokoʻa ka hoʻolālā threading mai ka mea i hoʻohana ʻia ma brubeck. Ua like nā kaula i loko o ka brubeck - aia kēlā me kēia o lākou ke kuleana no ka hōʻiliʻili ʻike a me ka hōʻuluʻulu ʻana. I ka bioyino, ua māhele ʻia nā limahana i ʻelua pūʻulu: nā mea kuleana no ka pūnaewele a me nā mea kuleana no ka hōʻuluʻulu. Hāʻawi kēia māhele iā ʻoe e hoʻokele maʻalahi i ka noi ma muli o ke ʻano o nā metrics: kahi e koi ʻia ai ka hoʻohui ikaika, hiki iā ʻoe ke hoʻohui i nā aggregators, kahi e nui ai nā kaʻa pūnaewele, hiki iā ʻoe ke hoʻohui i ka helu o nā kahe pūnaewele. I kēia manawa, ma kā mākou mau kikowaena hana mākou ma 8 pūnaewele a me 4 aggregation kahe.
ʻO ka ʻāpana helu (ke kuleana no ka hoʻohui ʻana) ʻoluʻolu loa. Hoʻokaʻawale ʻia nā pahu i hoʻopiha ʻia e nā kahe o ka pūnaewele ma waena o ka helu ʻana i nā kahe, kahi i hoʻopaʻa ʻia a hōʻuluʻulu ʻia. Ma ke noi, hāʻawi ʻia nā metric no ka hoʻouna ʻana i nā node ʻē aʻe. ʻO kēia mau mea a pau, me ka hoʻouna ʻana i ka ʻikepili ma waena o nā nodes a me ka hana pū ʻana me Consul, hana ʻia me ka asynchronously, e holo ana ma ka framework
ʻOi aku ka nui o nā pilikia i ka wā o ka hoʻomohala ʻana ma muli o ka ʻāpana pūnaewele i kuleana no ka loaʻa ʻana o nā metric. ʻO ka pahuhopu nui o ka hoʻokaʻawale ʻana i nā kahe ʻana o ka pūnaewele i loko o nā ʻāpana ʻokoʻa ʻo ia ka makemake e hoʻemi i ka manawa e hoʻolilo ai kahi kahe ole e heluhelu i ka ʻikepili mai ke kumu. Nalo koke nā koho e hoʻohana ana i ka UDP asynchronous a me ka recvmsg maʻamau: ʻo ka mea mua e hoʻopau nui loa i ka CPU hoʻohana-space no ka hana hanana, ʻo ka lua e koi i nā hoʻololi pōʻaiapili. No laila ua hoʻohana ʻia i kēia manawa
i hoʻopuka
Ma nā hoʻonohonoho paʻamau, ua hoʻonohonoho ʻia ka nui buffer e nui loa. Inā hoʻoholo koke ʻoe e hoʻāʻo iā ʻoe iho i ke kikowaena, hiki iā ʻoe ke hālāwai me ka ʻoiaʻiʻo ma hope o ka hoʻouna ʻana i kahi helu liʻiliʻi o nā metric, ʻaʻole lākou e hōʻea i Graphite, e waiho ana i ka buffer stream stream. No ka hana ʻana me kahi helu liʻiliʻi o nā metric, pono ʻoe e hoʻonohonoho i ka bufsize a me ka nui-nui-nui i nā waiwai liʻiliʻi i ka config.
ʻO ka hope, kekahi mau palapala no ka poʻe aloha papa.
Heluhelu i ka helu o nā metric e hiki mai ana no kēlā me kēia kikowaena: ʻoi aku ma mua o 2 miliona MPS.
Hoʻopau i kekahi o nā node a hāʻawi hou i nā metric e komo mai ana.
Heluhelu no nā metric puka: hoʻokahi wale nō node e hoʻouna mau - ʻo ka raid boss.
Ka helu o ka hana o kēlā me kēia node, e noʻonoʻo ana i nā hewa i nā ʻōnaehana ʻōnaehana like ʻole.
ʻO ka kikoʻī o nā metric e hiki mai ana (huna ʻia nā inoa metric).
He aha kā mākou e manaʻo nei e hana me kēia aʻe? ʻOiaʻiʻo, e kākau i ke code, damn...! ʻO ka papahana i hoʻolālā mua ʻia e lilo i open-source a e mau nō ia i kona ola ʻana. ʻO kā mākou hoʻolālā koke ka hoʻololi ʻana i kā mākou mana ponoʻī o Raft, ka hoʻololi ʻana i ka protocol peer i kahi ʻoi aku ka portable, e hoʻopuka ana i nā helu kūloko hou, nā ʻano metric hou, nā hoʻoponopono bug a me nā hoʻomaikaʻi ʻē aʻe.
ʻOiaʻiʻo, ʻoluʻolu nā mea a pau e kōkua i ka hoʻomohala ʻana i ka papahana: hana PR, Nā pilikia, inā hiki ke pane mākou, hoʻomaikaʻi, etc.
Me kēlā ʻōlelo ʻana, ʻo ia wale nō e ka poʻe, kūʻai i kā mākou elepani!
Source: www.habr.com