E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

Manaʻo wau e heluhelu ʻoe i ka transcript o ka hōʻike hope 2019 e Alexander Valyalkin "Go optimizations in VictoriaMetrics"

VictoriaMetrics - kahi DBMS wikiwiki a hiki ke hoʻopaʻa ʻia no ka mālama ʻana a me ka hoʻoili ʻana i ka ʻikepili ma ke ʻano o ka manawa manawa (ʻo ka moʻolelo ka manawa a me kahi hoʻonohonoho o nā waiwai e pili ana i kēia manawa, no ka laʻana, i loaʻa ma o ke koho balota ʻana i ke kūlana o nā sensor a i ʻole ka hōʻiliʻili o metric).

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

Eia kahi loulou i ke wikiō o kēia hōʻike - https://youtu.be/MZ5P21j_HLE

Pāheʻe

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

E haʻi mai iā mākou e pili ana iā ʻoe iho. ʻO wau ʻo Alexander Valyalkin. Eia kaʻu moʻokāki GitHub. Nui koʻu makemake e pili ana iā Go a me ka loiloi hana. Ua kākau au i nā hale waihona puke pono a maikaʻi ʻole. Hoʻomaka lākou me kekahi fast, a me quick prefix.

Ke hana nei au ma VictoriaMetrics. He aha ia a he aha kaʻu e hana nei ma laila? E kamaʻilio wau e pili ana i kēia ma kēia hōʻike.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

Penei ke kikoo o ka hoike.

  • ʻO ka mea mua, e haʻi wau iā ʻoe i ka VictoriaMetrics.
  • A laila e haʻi wau iā ʻoe i ke ʻano o ka manawa.
  • A laila e haʻi wau iā ʻoe i ka hana ʻana o kahi waihona manawa.
  • Ma hope aʻe, e haʻi wau iā ʻoe e pili ana i ka hale waihona waihona: he aha ia.
  • A laila e neʻe kākou i nā optimizations i loaʻa iā VictoriaMetrics. ʻO kēia kahi hoʻolālā no ka index inverted a me ka optimization no ka hoʻokō bitset ma Go.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

ʻIke paha kekahi o ka lehulehu i ke ʻano o VictoriaMetrics? Auwe, nui ka poʻe i ʻike. He nūhou maikaʻi. No ka poʻe ʻike ʻole, ʻo kēia kahi waihona manawa. Hoʻokumu ʻia ia ma ka hoʻolālā ClickHouse, ma kekahi mau kikoʻī o ka hoʻokō ClickHouse. No ka laʻana, e like me: MergeTree, ka helu like ʻana i nā core processor i loaʻa a me ka hoʻokō pono ʻana ma o ka hana ʻana i nā poloka ʻikepili i waiho ʻia i loko o ka cache processor.

Hāʻawi ʻo VictoriaMetrics i ka hōʻemi ʻikepili ʻoi aku ka maikaʻi ma mua o nā waihona ʻikepili manawa.

ʻO ia ka unahi ʻana - ʻo ia hoʻi, hiki iā ʻoe ke hoʻohui i nā kaʻina hana, ʻoi aku ka RAM ma kahi kamepiula hoʻokahi. E hoʻohana maikaʻi ʻo VictoriaMetrics i kēia mau kumuwaiwai a hoʻomaikaʻi i ka huahana linear.

Hoʻonui ʻia ʻo VictoriaMetrics ma ka ʻaoʻao - ʻo ia hoʻi, hiki iā ʻoe ke hoʻohui i nā nodes hou i ka pūʻulu VictoriaMetrics, a e piʻi aʻe kāna hana ma kahi o ka laina.

E like me kāu i koho ai, ʻo VictoriaMetrics kahi waihona wikiwiki, no ka mea ʻaʻole hiki iaʻu ke kākau i nā mea ʻē aʻe. A ua kākau ʻia ma Go, no laila ke kamaʻilio nei au ma kēia hui.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

ʻO wai ka mea ʻike i ke ʻano o ka manawa? Ua ike no hoi ia i na kanaka he nui. ʻO ka pūʻulu manawa he pūʻulu hui (timestamp, значение), kahi e hoʻokaʻawale ʻia ai kēia mau paʻa i ka manawa. He helu lana ka waiwai - float64.

ʻIke ʻia kēlā me kēia moʻo manawa e kahi kī. He aha ke ʻano o kēia kī? Loaʻa iā ia kahi pūʻulu ʻole o nā hui waiwai kī.

Eia kekahi laʻana o ka moʻo manawa. ʻO ke kī o kēia moʻo he papa inoa o nā hui: __name__="cpu_usage" ʻo ia ka inoa o ka metric, instance="my-server" - ʻo kēia ke kamepiula kahi e hōʻiliʻili ai kēia metric, datacenter="us-east" - ʻo ia ke kikowaena ʻikepili kahi i loaʻa ai kēia kamepiula.

Ua hoʻopau mākou me kahi inoa pūʻulu manawa i ʻekolu mau kī-waiwai paʻa. Pili kēia kī i ka papa inoa o nā pai (timestamp, value). t1, t3, t3, ..., tN - he mau hōʻailona manawa kēia, 10, 20, 12, ..., 15 - nā waiwai pili. ʻO kēia ka cpu-hoʻohana i ka manawa i hāʻawi ʻia no kahi moʻo i hāʻawi ʻia.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

Ma hea e hiki ai ke hoʻohana ʻia ka manawa? He manaʻo ko kekahi?

  • Ma DevOps, hiki iā ʻoe ke ana i ka CPU, RAM, network, rps, helu o nā hewa, etc.
  • IoT - hiki iā mākou ke ana i ka mahana, ke kaomi, nā hoʻonohonoho geo a me kekahi mea ʻē aʻe.
  • ʻO ke kālā pū kekahi - hiki iā mākou ke nānā i nā kumukūʻai no nā ʻano waiwai āpau a me nā kālā.
  • Eia kekahi, hiki ke hoʻohana ʻia ka manawa manawa i ka nānā ʻana i nā kaʻina hana i nā hale hana. Loaʻa iā mākou nā mea hoʻohana e hoʻohana iā VictoriaMetrics e nānā i nā turbine makani, no nā robots.
  • He mea pono nō hoʻi ka manawa no ka ʻohi ʻana i ka ʻike mai nā mea ʻike o nā mea like ʻole. No ka laʻana, no ka ʻenekini; no ke ana ana i ke kaomi kaa; no ke ana ana i ka mama, ka mamao; no ke ana ʻana i ka hoʻohana ʻana i ka ʻaila, etc.
  • Hiki ke hoʻohana ʻia ka manawa manawa no ka nānā ʻana i nā mokulele. Loaʻa i kēlā me kēia mokulele kahi pahu ʻeleʻele e hōʻiliʻili ana i nā kaʻina manawa no nā ʻāpana like ʻole o ke olakino o ka mokulele. Hoʻohana pū ʻia ka manawa manawa i ka ʻoihana aerospace.
  • ʻO ka mālama ola kino ke koko, pulse, etc.

Nui aʻe paha nā noi aʻu i poina ai, akā ke manaʻolana nei au e hoʻomaopopo ʻoe i ka hoʻohana ikaika ʻana o ka manawa i kēia ao hou. A ke ulu nei ka nui o kā lākou hoʻohana i kēlā me kēia makahiki.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

No ke aha ʻoe e pono ai i kahi waihona manawa manawa? No ke aha ʻaʻole hiki iā ʻoe ke hoʻohana i kahi ʻikepili pili maʻamau e mālama i ka moʻo manawa?

No ka mea, loaʻa i nā pūʻulu manawa ka nui o ka ʻike, he mea paʻakikī ke mālama a mālama ʻia i nā ʻikepili maʻamau. No laila, ua puka mai nā ʻikepili kūikawā no ka moʻo manawa. Mālama kēia mau waihona i nā kiko (timestamp, value) me ke ki i haawiia. Hāʻawi lākou i kahi API no ka heluhelu ʻana i ka ʻikepili i mālama ʻia e ke kī, e ka pālua kī-waiwai hoʻokahi, a i ʻole ma nā hui waiwai kī nui, a i ʻole regexp. No ka laʻana, makemake ʻoe e ʻimi i ka ukana CPU o kāu mau lawelawe āpau ma kahi kikowaena data ma ʻAmelika, a laila pono ʻoe e hoʻohana i kēia pseudo-query.

ʻO ka maʻamau ka hāʻawi ʻana i nā ʻikepili moʻohelu manawa i nā ʻōlelo noiʻi kūikawā no ka mea ʻaʻole kūpono loa ka manawa SQL. ʻOiai aia nā waihona e kākoʻo ana iā SQL, ʻaʻole kūpono loa. Nā ʻōlelo nīnau e like me PromQL, InfluxQL, kahe ana, Q. Manaʻo wau ua lohe kekahi i hoʻokahi o kēia mau ʻōlelo. Ua lohe paha nā poʻe he nui e pili ana iā PromQL. ʻO kēia ka ʻōlelo nīnau Prometheus.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

ʻO kēia ke ʻano o ka hoʻolālā waihona waihona manawa hou e like me ka hoʻohana ʻana iā VictoriaMetrics ma ke ʻano he laʻana.

Aia i loko o ʻelua ʻāpana. ʻO kēia ka waiho ʻana no ka index inverted a me ka waiho ʻana no nā waiwai pūʻulu manawa. Hoʻokaʻawale ʻia kēia mau waihona.

Ke hōʻea mai kahi moʻolelo hou i loko o ka waihona, e komo mua mākou i ka index inverted e ʻike ai i ka mea hōʻike manawa no kahi hoʻonohonoho i hāʻawi ʻia. label=value no ke ana i haawiia. Loaʻa iā mākou kēia mea hōʻike a mālama i ka waiwai ma ka hale kūʻai ʻikepili.

Ke hele mai kahi noi e kiʻi i ka ʻikepili mai TSDB, hele mua mākou i ka index inverted. E kiʻi kākou i nā mea a pau timeseries_ids nā moʻolelo e pili ana i kēia pūʻulu label=value. A laila loaʻa iā mākou nā ʻikepili kūpono a pau mai ka hale waihona ʻikepili, kuhikuhi ʻia e timeseries_ids.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

E nānā kākou i kekahi laʻana o ka hana ʻana o ka ʻikepili moʻo manawa i kahi nīnau i koho ʻia.

  • ʻO ka mea mua loaʻa iā ia nā mea a pau timeseries_ids mai kahi papa kuhikuhi hoʻohuli ʻia i loaʻa nā paʻa i hāʻawi ʻia label=value, a i ʻole e ʻoluʻolu i kahi ʻōlelo maʻamau i hāʻawi ʻia.
  • A laila e kiʻi i nā helu ʻikepili a pau mai ka waihona ʻikepili i kahi manawa manawa no nā mea i loaʻa timeseries_ids.
  • Ma hope o kēia, hana ka waihona i kekahi mau helu ʻana i kēia mau helu ʻikepili, e like me ke noi a ka mea hoʻohana. A ma hope iho, hoʻi mai ka pane.

Ma kēia hōʻike e haʻi aku wau iā ʻoe e pili ana i ka hapa mua. He huli keia timeseries_ids ma ka helu kuhikuhi. Hiki iā ʻoe ke nānā e pili ana i ka ʻāpana ʻelua a me ka hapa ʻekolu ma hope Nā kumu VictoriaMetrics, a i ʻole e kali a hoʻomākaukau au i nā hōʻike ʻē aʻe :)

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

E neʻe kākou i ka helu kuhikuhi. Manaʻo paha ka poʻe he maʻalahi kēia. ʻO wai ka mea ʻike i ke ʻano o ka index inverted a pehea e hana ai? ʻAe, ʻaʻole nui loa ka poʻe. E ho'āʻo kākou e hoʻomaopopo i keʻano.

He maʻalahi maoli. He puke wehewehe ʻōlelo wale nō ia e palapala ʻāina i ke kī i kahi waiwai. He aha ke kī? ʻO kēia kāne label=valuekahi label и value - he mau laina kēia. A he hoʻonohonoho nā waiwai timeseries_ids, e pili ana i ka lua i hāʻawi ʻia label=value.

Hiki iā ʻoe ke ʻimi koke i nā mea a pau timeseries_ids, i haawi mai label=value.

Hiki iā ʻoe ke loaʻa koke timeseries_ids pūʻulu manawa no kekahi mau pai label=value, a i ʻole no nā kāne label=regexp. Pehea e hana ai kēia? Ma ka imi ana i ke kuwaena o ka set timeseries_ids no kēlā me kēia pālua label=value.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

E nānā kākou i nā hoʻokō like ʻole o ka index inverted. E hoʻomaka kākou me ka hoʻokō naive maʻalahi loa. Penei kona ano.

kuleana pili i getMetricIDs loaʻa i ka papa inoa o nā kaula. Aia i kēlā me kēia laina label=value. Hoʻihoʻi kēia hana i kahi papa inoa metricIDs.

Pehea ia hana? Eia mākou i kapa ʻia he ʻano hoʻololi honua invertedIndex. He puke wehewehe ʻōlelo maʻamau kēia (map), ka mea e palapala ai i ke kaula e ʻoki i nā ints. Aia ka laina label=value.

Hoʻokō hana: loaʻa metricIDs no ka mea mua label=value, a laila hele mākou i nā mea a pau label=value, loaa ia makou metricIDs no lakou. A kāhea i ka hana intersectInts, e kūkākūkā ʻia ma lalo nei. A hoʻihoʻi kēia hana i ka hui ʻana o kēia mau papa inoa.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

E like me kāu e ʻike ai, ʻaʻole paʻakikī loa ka hoʻokō ʻana i kahi index inverted. Akā, he hoʻokō naʻaupō kēia. He aha kona mau hemahema? ʻO ka hemahema nui o ka hoʻokō naive ʻo ia ka mea i hoʻohuli ʻia i loko o RAM. Ma hope o ka hoʻomaka hou ʻana i ka noi e nalowale mākou i kēia index. ʻAʻohe mālama ʻia o kēia kuhikuhi i ka disk. ʻAʻole kūpono ia ʻano kuhikuhi i hoʻohuli ʻia no kahi waihona.

ʻO ka lua drawback pili pū me ka hoʻomanaʻo. Pono ka index inverted i loko o ka RAM. Inā ʻoi aku ka nui o ka RAM, a laila maopopo mākou e loaʻa - mai ka hewa hoʻomanaʻo. A ʻaʻole e holo ka polokalamu.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

Hiki ke hoʻoponopono ʻia kēia pilikia me ka hoʻohana ʻana i nā mea i hana ʻia e like me LevelDB, aiʻole RocksDB.

I ka pōkole, pono mākou i kahi waihona e hiki ai iā mākou ke hana wikiwiki i ʻekolu mau hana.

  • ʻO ka hana mua ka hoʻopaʻa ʻana ключ-значение i keia waihona. Hana koke ʻo ia i kēia, ma hea ключ-значение he mau kaula kuʻuna.
  • ʻO ka hana ʻelua he huli wikiwiki no kahi waiwai me ka hoʻohana ʻana i kahi kī i hāʻawi ʻia.
  • A ʻo ke kolu o ka hana he ʻimi wikiwiki no nā waiwai āpau e kahi prefix i hāʻawi ʻia.

LevelDB a me RocksDB - ua hoʻomohala ʻia kēia mau ʻikepili e Google a me Facebook. Ua hele mua mai ʻo LevelDB. A laila ua lawe nā kāne mai Facebook i LevelDB a hoʻomaka i ka hoʻomaikaʻi ʻana, hana lākou iā RocksDB. I kēia manawa kokoke i nā ʻikepili kūloko āpau e hana ma RocksDB i loko o Facebook, me nā mea i hoʻoili ʻia i RocksDB a me MySQL. Kapa lākou iā ia ʻO MyRocks.

Hiki ke hoʻokō ʻia kahi index inverted me ka hoʻohana ʻana i LevelDB. Pehea e hana ai? Mālama mākou ma ke ʻano he kī label=value. A ʻo ka waiwai ka mea e ʻike ai i ka pūʻulu manawa kahi i loaʻa ai ka lua label=value.

Inā loaʻa iā mākou nā pūʻulu manawa he nui me kahi pālua i hāʻawi ʻia label=value, a laila e nui nā lālani i loko o kēia waihona me ke kī like a me nā ʻokoʻa timeseries_ids. No ka loaʻa ʻana o ka papa inoa o nā mea a pau timeseries_ids, e hoomaka ana me keia label=prefix, ke hana nei mākou i kahi scan ākea kahi i hoʻomaikaʻi ʻia ai kēia waihona. ʻO ia, koho mākou i nā laina āpau e hoʻomaka me label=prefix a loaa ka pono timeseries_ids.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

Eia kahi laʻana hoʻokō o ke ʻano o ia mea ma Go. Loaʻa iā mākou kahi index inverted. ʻO LevelDB kēia.

Ua like ka hana me ka hoʻokō naive. Hoʻihoʻi hou ia i ka hoʻokō naive kokoke i kēlā me kēia laina. ʻO ka mea wale nō ma kahi o ka huli ʻana i map komo mākou i ka index inverted. Loaʻa iā mākou nā waiwai a pau no ka mea mua label=value. A laila hele mākou i nā ʻāpana āpau i koe label=value a e kiʻi i nā pūʻulu metricID kūpono no lākou. A laila ʻike mākou i ka hui.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

Ua maikaʻi nā mea a pau, akā aia nā drawbacks i kēia hoʻonā. Ua hoʻokumu mua ʻo VictoriaMetrics i kahi kuhikuhi kuhikuhi i hoʻokumu ʻia ma LevelDB. Akā i ka hopena, pono wau e haʻalele.

No ke aha mai? No ka mea ʻoi aku ka lohi o LevelDB ma mua o ka hoʻokō naive. Ma kahi hoʻokō naive, hāʻawi ʻia i kahi kī i hāʻawi ʻia, kiʻi koke mākou i ka ʻāpana āpau metricIDs. He hana wikiwiki loa kēia - ua mākaukau ka ʻāpana holoʻokoʻa no ka hoʻohana.

I LevelDB, i kēlā me kēia manawa i kāhea ʻia kahi hana GetValues pono ʻoe e hele i nā laina āpau e hoʻomaka me label=value. A loaʻa ka waiwai no kēlā me kēia laina timeseries_ids. No ia mea timeseries_ids e hōʻiliʻili i kahi ʻāpana o kēia mau mea timeseries_ids. ʻIke loa, ʻoi aku ka lohi o kēia ma mua o ke komo ʻana i kahi palapala ʻāina maʻamau ma ke kī.

ʻO ka lua o ka drawback ua kākau ʻia ʻo LevelDB ma C. ʻAʻole wikiwiki loa ke kāhea ʻana i nā hana C mai Go. He mau haneli nanoseconds. ʻAʻole wikiwiki loa kēia, no ka mea, ke hoʻohālikelike ʻia me kahi kelepona hana maʻamau i kākau ʻia ma ka hele, e lawe ana i 1-5 nanoseconds, ʻo ka ʻokoʻa o ka hana he ʻumi mau manawa. No VictoriaMetrics he hemahema kēia :)

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

No laila ua kākau wau i kaʻu hoʻokō ponoʻī o ka index inverted. Kāhea akula ʻo ia iā ia mergeset.

Hoʻokumu ʻia ʻo Mergeset ma ke ʻano ʻikepili MergeTree. Ua ʻaiʻē ʻia kēia ʻano ʻikepili mai ClickHouse. ʻOiaʻiʻo, pono e hoʻonui ʻia ka mergeset no ka ʻimi wikiwiki timeseries_ids e like me ke kī i hāʻawi ʻia. Ua kākau piha ʻia ʻo Mergeset ma Go. Hiki iā ʻoe ke ʻike Nā kumu VictoriaMetrics ma GitHub. Aia ka hoʻokō ʻana o ka mergeset i ka waihona /lib/mergeset. Hiki iā ʻoe ke hoʻāʻo e ʻike i nā mea e hana nei ma laila.

Ua like loa ka API mergeset me LevelDB a me RocksDB. ʻO ia, hiki iā ʻoe ke mālama wikiwiki i nā moʻolelo hou ma laila a koho wikiwiki i nā moʻolelo ma kahi prefix i hāʻawi ʻia.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

E kamaʻilio mākou e pili ana i nā hemahema o ka mergeset ma hope. I kēia manawa e kamaʻilio e pili ana i nā pilikia i kū mai me VictoriaMetrics i ka hana ʻana i ka wā e hoʻokō ai i kahi kuhikuhi inverted.

No ke aha lākou i kū ai?

ʻO ke kumu mua ke kiʻekiʻe o ka churn rate. Unuhi ʻia i ka ʻōlelo Lūkini, he hoʻololi pinepine kēia i ka moʻo manawa. ʻO kēia ka manawa e pau ai kahi moʻo manawa a hoʻomaka kahi moʻo hou, a i ʻole e hoʻomaka ana nā pūʻulu manawa hou. A hiki pinepine kēia.

ʻO ke kumu ʻelua ka nui o ka manawa. I ka hoʻomaka ʻana, i ka wā e ulu nui ana ka nānā ʻana, ua liʻiliʻi ka helu o ka manawa. No ka laʻana, no kēlā me kēia kamepiula pono ʻoe e nānā i ka CPU, ka hoʻomanaʻo, ka pūnaewele a me ka ukana disk. 4 manawa no kēlā me kēia kamepiula. E ʻōlelo kākou he 100 kāu kamepiula a me 400 pūʻulu manawa. He uuku loa keia.

I ka wā lōʻihi, ʻike ka poʻe hiki iā lākou ke ana i ka ʻike kikoʻī. No ka laʻana, e ana i ka ukana ʻaʻole o ka mea hana holoʻokoʻa, akā hoʻokaʻawale i kēlā me kēia kumu. Inā loaʻa iā ʻoe he 40 cores processor, a laila loaʻa iā ʻoe he 40 mau manawa hou aʻe e ana i ka ukana.

Akā ʻaʻole ʻo ia wale nō. Hiki ke loaʻa i kēlā me kēia pūʻali kaʻina hana kekahi mau mokuʻāina, e like me ka palaualelo, i ka wā ʻole. A hana pū kekahi i ka wahi mea hoʻohana, hana ma ke kikowaena kernel a me nā mokuʻāina ʻē aʻe. A hiki ke ana ʻia kēlā me kēia mokuʻāina ma ke ʻano he pūʻulu manawa kaʻawale. Hoʻonui kēia i ka helu o nā lālani e 7-8 mau manawa.

Mai hoʻokahi metric i loaʻa iā mākou he 40 x 8 = 320 metrics no hoʻokahi kamepiula wale nō. E hoʻonui i ka 100, loaʻa iā mākou he 32 ma kahi o 000.

A laila hele mai ʻo Kubernetes. A ua ʻoi aku ka maikaʻi no ka mea hiki iā Kubernetes ke hoʻokipa i nā lawelawe like ʻole. He nui nā pods i kēlā me kēia lawelawe ma Kubernetes. A pono e nānā ʻia kēia mau mea a pau. Eia hou, loaʻa iā mākou kahi hoʻolaha mau o nā mana hou o kāu mau lawelawe. No kēlā me kēia mana hou, pono e hana ʻia nā pūʻulu manawa hou. ʻO ka hopena, ke ulu nui nei ka helu o ka manawa a ke kū nei mākou i ka pilikia o ka nui o ka manawa, i kapa ʻia ʻo ka cardinality kiʻekiʻe. Ua kūleʻa ʻo VictoriaMetrics me ka hoʻohālikelike ʻia me nā ʻikepili ʻikepili manawa.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

E nānā pono kākou i ke kiʻekiʻe churn rate. He aha ke kumu o ka churn kiʻekiʻe i ka hana? No ka mea ke loli mau nei kekahi mau manaʻo o nā lepili a me nā lepili.

No ka laʻana, e lawe iā Kubernetes, nona ka manaʻo deployment, ʻo ia hoʻi ke ʻōwili ʻia kahi mana hou o kāu noi. No kekahi kumu, ua hoʻoholo nā mea hoʻomohala Kubernetes e hoʻohui i ka id deployment i ka lepili.

He aha kēia i alakaʻi ai? Eia kekahi, me kēlā me kēia hoʻolaha hou, hoʻopau ʻia nā moʻolelo kahiko āpau, a ma kahi o lākou, hoʻomaka ka manawa hou me kahi waiwai lepili hou. deployment_id. Hiki ke loaʻa nā haneli haneli a me nā miliona o ia mau lālani.

ʻO ka mea nui e pili ana i kēia mau mea a pau, ʻo ia ka piʻi ʻana o ka nui o nā pūʻulu manawa, akā mau ka helu o nā pūʻulu manawa e hana nei a loaʻa ka ʻikepili. Kapa ʻia kēia mokuʻāina i ke kiʻekiʻe churn rate.

ʻO ka pilikia nui o ka helu churn kiʻekiʻe, ʻo ia ka hōʻoia ʻana i ka wikiwiki o ka huli ʻana no nā pūʻulu manawa āpau no kahi pūʻulu o nā lepili i kekahi manawa. ʻO ka maʻamau kēia ka manawa manawa no ka hola hope a i ʻole ka lā hope.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

Pehea e hoʻoponopono ai i kēia pilikia? Eia ke koho mua. ʻO kēia ka hoʻokaʻawale ʻana i ka index inverted i nā ʻāpana kūʻokoʻa i ka manawa. ʻO ia hoʻi, ua hala kekahi manawa, hoʻopau mākou i ka hana me ka index inverted o kēia manawa. A e hana i kahi index inverted hou. Ke hala kekahi manawa, hana mākou i kekahi a me kekahi.

A i ka la'ana mai i keia mau kuhikuhi hoohuli, e ike kakou i ka hoonohonoho o na hoailona hoohuli e haule iloko o ka manawa i haawiia. A, no laila, koho mākou i ka id o ka pūʻulu manawa mai laila.

Mālama kēia i nā kumuwaiwai no ka mea ʻaʻole pono mākou e nānā i nā ʻāpana i hāʻule ʻole i loko o ka wā i hāʻawi ʻia. ʻO ia hoʻi, maʻamau, inā koho mākou i ka ʻikepili no ka hola hope, a laila no nā manawa ma mua e hoʻokuʻu mākou i nā noi.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

Aia kekahi koho e hoʻoponopono i kēia pilikia. E mālama kēia no kēlā me kēia lā i kahi papa inoa o nā id o nā pūʻulu manawa i hana ʻia ma ia lā.

ʻO ka maikaʻi o kēia hoʻonā ma mua o ka hoʻonā mua, ʻaʻole mākou e hoʻopālua i ka ʻike moʻolelo manawa i nalowale ʻole i ka manawa. Aia mau lākou a ʻaʻole loli.

ʻO ka hemahema, ʻoi aku ka paʻakikī o ka hoʻokō ʻana a ʻoi aku ka paʻakikī o ka debug. A ua koho ʻo VictoriaMetrics i kēia hoʻonā. ʻO kēia ke ʻano o ka mōʻaukala. Hana maikaʻi kēia hoʻonā i ka hoʻohālikelike ʻana i ka mua. No ka mea, ʻaʻole i hoʻokō ʻia kēia hoʻonā ma muli o ka mea pono e hoʻokaʻawale i ka ʻikepili i kēlā me kēia ʻāpana no ka hoʻololi ʻole o ka manawa, ʻo ia hoʻi, ʻaʻole e nalowale i ka manawa. ʻO VictoriaMetrics i hoʻopaʻa mua ʻia no ka hoʻohana ʻana i ka lewa disk, a ʻo ka hoʻokō mua ʻana i ʻoi aku ka maikaʻi o ka hoʻohana ʻana i ka lewa. Akā ʻoi aku ka maikaʻi o kēia hoʻokō ʻana no ka hōʻemi ʻana i ka hoʻohana ʻana i ka disk space, no laila ua koho ʻia.

Pono wau e hakakā me ia. ʻO ka hakakā ʻana ma kēia hoʻokō pono ʻoe e koho i kahi helu ʻoi aku ka nui timeseries_ids no ka ʻikepili ma mua o ka wā i hoʻokaʻawale ʻia ai ka index inverted.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

Pehea mākou i hoʻoponopono ai i kēia pilikia? Ua hoʻoholo mākou ma ke ʻano kumu - ma ka mālama ʻana i nā mea hōʻike manawa manawa i kēlā me kēia hoʻokomo kuhikuhi kuhikuhi ma kahi o hoʻokahi mea hōʻike. ʻO ia hoʻi, he kī kā mākou label=value, i loaʻa i kēlā me kēia pūʻulu manawa. A i kēia manawa mālama mākou i kekahi timeseries_ids ma ke komo ana.

Eia kekahi laʻana. I ka wā ma mua, loaʻa iā mākou nā helu N, akā i kēia manawa he hoʻokahi kā mākou prefix e like me nā mea ʻē aʻe. No ke komo mua, aia i loko o ka waiwai nā id moʻo manawa.

ʻO kēia ka mea i hiki ke hoʻonui i ka wikiwiki scanning o ia ʻano kuhikuhi inverted a hiki i 10 mau manawa. A ua ʻae iā mākou e hōʻemi i ka hoʻohana ʻana i ka hoʻomanaʻo no ka cache, no ka mea i kēia manawa ke mālama nei mākou i ke kaula label=value hoʻokahi wale nō i loko o ka hūnā hui N mau manawa. A hiki ke nui kēia laina inā mālama ʻoe i nā laina lōʻihi i kāu mau hōʻailona a me nā lepili, kahi e makemake ai ʻo Kubernetes e kiola i laila.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

ʻO kahi koho ʻē aʻe no ka wikiwiki ʻana i ka ʻimi ʻana ma ka index inverted ʻo sharding. Ke hana ʻana i kekahi mau index inverted ma kahi o hoʻokahi a me ka sharding ʻikepili ma waena o lākou ma ke kī. He hoʻonohonoho kēia key=value māhu. ʻO ia hoʻi, loaʻa iā mākou nā ʻōlelo kuhikuhi kūʻokoʻa kūʻokoʻa, hiki iā mākou ke nīnau like i nā mea hana. ʻO nā hoʻokō mua i ʻae ʻia i ka hana ma ke ʻano kaʻina hana hoʻokahi, ʻo ia hoʻi, ka nānā ʻana i ka ʻikepili ma hoʻokahi kumu. Hāʻawi kēia hoʻonā iā ʻoe e nānā i ka ʻikepili ma nā cores i ka manawa hoʻokahi, e like me ka makemake o ClickHouse. ʻO kēia kā mākou e manaʻo nei e hoʻokō.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

I kēia manawa e hoʻi kāua i kā mākou hipa - i ka hana intersection timeseries_ids. E noʻonoʻo kākou i nā mea e hoʻokō ai. ʻAe kēia hana iā ʻoe e ʻimi timeseries_ids no kahi hoʻonohonoho i hāʻawi ʻia label=value.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

ʻO ka koho mua he hoʻokō naive. ʻElua puka pūnana. Maanei mākou e loaʻa ai ka hoʻokomo hana intersectInts ʻelua ʻāpana - a и b. I ka hoʻopuka ʻana, pono e hoʻihoʻi iā mākou i ke kikowaena o kēia mau ʻāpana.

ʻO kahi hoʻokō naive e like me kēia. Hoʻololi mākou i nā waiwai āpau mai ka slice a, i loko o kēia loop e hele mākou i nā waiwai āpau o ka slice b. A hoʻohālikelike mākou iā lākou. Inā pili lākou, a laila ua loaʻa iā mākou kahi hui. A mālama i loko result.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

He aha nā hemahema? ʻO ka paʻakikī Quadratic kona drawback nui. No ka laʻana, inā he ʻāpana kāu mau ana a и b hoʻokahi miliona i ka manawa, a laila ʻaʻole e hoʻihoʻi kēia hana i kahi pane iā ʻoe. No ka mea, pono ia e hana i hoʻokahi trillion iterations, ʻo ia ka nui no nā kamepiula hou.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

Hoʻokumu ʻia ka hoʻokō ʻelua ma ka palapala ʻāina. Hana mākou i ka palapala ʻāina. Hoʻokomo mākou i nā waiwai āpau mai ka ʻāpana i kēia palapala a. A laila hele mākou i ka ʻāpana i kahi loop kaʻawale b. A ke nānā nei mākou inā he ʻāpana kēia waiwai b ma ka palapala honua. Inā loaʻa, a laila e hoʻohui i ka hopena.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

He aha nā pōmaikaʻi? ʻO ka pōmaikaʻi, aia wale nō ka paʻakikī laina. ʻO ia hoʻi, ʻoi aku ka wikiwiki o ka hana no nā ʻāpana nui. No ka ʻāpana miliona-nui, e hoʻokō ʻia kēia hana i 2 miliona iterations, e kū'ē i nā trillion iterations o ka hana mua.

ʻO ka haʻahaʻa, pono kēia hana i ka hoʻomanaʻo hou e hana i kēia palapala ʻāina.

ʻO ka lua o ka drawback ʻo ia ke poʻo nui no ka hashing. ʻAʻole maopopo loa kēia drawback. A no mākou ʻaʻole maopopo loa ia, no laila ma VictoriaMetrics ka hoʻokō ʻana o ka intersection ma o ka palapala ʻāina. Akā, ua hōʻike ʻia ka profiling e hoʻopau ʻia ka manawa hana nui i ke kākau ʻana i ka palapala ʻāina a me ka nānā ʻana i ke ʻano o kahi waiwai ma kēia palapala.

No ke aha e pau ai ka manawa CPU ma kēia mau wahi? No ka mea, hana ʻo Go i kahi hana hashing ma kēia mau laina. ʻO ia hoʻi, helu ia i ka hash o ke kī i mea e komo ai ia ma kahi kuhikuhi i hāʻawi ʻia i ka HashMap. Hoʻopau ʻia ka hana helu hash i nā ʻumi nanoseconds. He lohi kēia no VictoriaMetrics.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

Ua hoʻoholo wau e hoʻokō i kahi bitset i hoʻopaʻa ʻia no kēia hihia. ʻO kēia ke ʻano o ka hui ʻana o nā ʻāpana ʻelua i kēia manawa. Maanei mākou e hana ai i kahi bitset. Hoʻohui mākou i nā mea mai ka ʻāpana mua iā ia. A laila nānā mākou i ka hiki ʻana o kēia mau mea i ka ʻāpana ʻelua. A hoʻohui iā lākou i ka hopena. ʻO ia hoʻi, ʻaʻohe mea ʻokoʻa mai ka laʻana mua. ʻO ka mea wale nō ma ʻaneʻi, ua hoʻololi mākou i ke komo ʻana i ka palapala ʻāina me nā hana maʻamau add и has.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

I ka nānā muaʻana, me he mea lā e hana lohi kēia, inā ma mua i hoʻohanaʻia kahi palapala'āina maʻamau ma laila, a laila ua kapaʻia kekahi mau hana'ē aʻe, akāʻo ka profiling e hōʻike ana he 10 mau manawa wikiwiki kēia mea ma mua o ka palapala'āina maʻamau i ka hihia o VictoriaMetrics.

Eia kekahi, hoʻohana ʻo ia i ka hoʻomanaʻo liʻiliʻi loa i ka hoʻokō ʻana i ka palapala ʻāina. No ka mea, ke mālama nei mākou i nā bits ma ʻaneʻi ma mua o nā waiwai ʻewalu-byte.

ʻO ka hemahema o kēia hoʻokō ʻana, ʻaʻole ia i ʻike nui ʻia, ʻaʻole ia he mea liʻiliʻi.

ʻO kekahi drawback i ʻike ʻole ʻia e ka poʻe he nui ʻaʻole maikaʻi kēia hoʻokō i kekahi mau hihia. ʻO ia hoʻi, ua hoʻopaʻa ʻia no kahi hihia kikoʻī, no kēia hihia o ka hui ʻana o VictoriaMetrics time series id. ʻAʻole kēia manaʻo he kūpono ia no nā hihia āpau. Inā hoʻohana hewa ʻia, ʻaʻole e loaʻa iā mākou ka piʻi ʻana o ka hana, akā he hewa i waho o ka hoʻomanaʻo a me ka lohi o ka hana.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

E noʻonoʻo kākou i ka hoʻokō ʻana o kēia ʻano. Inā makemake ʻoe e nānā, aia ia ma nā kumu VictoriaMetrics, ma ka waihona lib/uint64set. Hoʻonohonoho pono ʻia no ka hihia VictoriaMetrics, kahi timeseries_id he 64-bit waiwai, kahi i mau ai na bits 32 mua a hoololi wale no 32 bits hope loa.

ʻAʻole mālama ʻia kēia ʻikepili ma ka disk, hana wale ia ma ka hoʻomanaʻo.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

Eia kona API. ʻAʻole paʻakikī loa. Hoʻonohonoho pono ʻia ka API i kahi laʻana o ka hoʻohana ʻana iā VictoriaMetrics. ʻO ia hoʻi, ʻaʻohe hana pono ʻole ma aneʻi. Eia nā hana i hoʻohana ʻia e VictoriaMetrics.

Aia nā hana add, e hoʻohui i nā waiwai hou. Aia kahi hana has, nāna e nānā i nā waiwai hou. A aia kahi hana del, e wehe ana i na waiwai. Aia kahi hana kōkua len, e hoʻihoʻi i ka nui o ka hoʻonohonoho. Hana clone he nui nā clones. A me ka hana appendto hoʻololi i kēia hoʻonohonoho i ʻāpana timeseries_ids.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

ʻO kēia ke ʻano o ka hoʻokō ʻana i kēia ʻano ʻikepili. ʻElua mau mea i hoʻonohonoho ʻia:

  • ItemsCount he kahua kōkua e hoʻihoʻi koke i ka helu o nā mea i loko o kahi pūʻulu. Hiki ke hana me ka ʻole o kēia kahua kōkua, akā pono e hoʻohui ʻia ma ʻaneʻi no ka mea, nīnau pinepine ʻo VictoriaMetrics i ka lōʻihi bitset i kāna algorithms.

  • ʻO ka lua o ka māla buckets. He ʻāpana kēia mai ka hale bucket32. ʻO kēlā me kēia hale kūʻai hi kahua. ʻO kēia nā 32 bits luna. A ʻelua ʻāpana - b16his и buckets mai bucket16 nā hale.

Mālama ʻia nā ʻāpana 16 kiʻekiʻe o ka ʻāpana ʻelua o ka hoʻolālā 64-bit ma ʻaneʻi. A ma ʻaneʻi mālama ʻia nā bitsets no nā ʻāpana haʻahaʻa he 16 o kēlā me kēia byte.

Bucket64 he laha uint64. Ua helu ʻia ka lōʻihi me ka hoʻohana ʻana i kēia mau mea mau. I hoʻokahi bucket16 hiki ke mālama ʻia ka nui 2^16=65536 bit. Inā ʻoe e puʻunaue i kēia me 8, he 8 kilobytes ia. Ina e puunaue hou oe me 8, he 1000 ia uint64 manaʻo. ʻo ia Bucket16 - ʻo kēia kā mākou hana 8-kilobyte.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

E nānā kākou pehea e hoʻokō ʻia ai kekahi o nā ʻano hana o kēia ʻano no ka hoʻohui ʻana i kahi waiwai hou.

Hoʻomaka nā mea a pau me uint64 nā manaʻo. Ke helu nei mākou i nā 32 bits luna, helu mākou i nā 32 bits haʻahaʻa. E hele kāua i nā mea a pau buckets. Hoʻohālikelike mākou i nā bits 32 kiʻekiʻe i kēlā me kēia bākeke me ka waiwai i hoʻohui ʻia. A inā pili lākou, a laila kapa mākou i ka hana add ma ka hale b32 buckets. A hoʻohui i nā 32 bits haʻahaʻa ma laila. A ina ua hoi mai true, ʻo ia hoʻi, ua hoʻohui mākou i kahi waiwai ma laila a ʻaʻole i loaʻa iā mākou kahi waiwai. Inā hoʻi mai false, a laila ua loaʻa ke ʻano o ia ʻano. A laila hoʻonui mākou i ka helu o nā mea i loko o ka hale.

Inā ʻaʻole i loaʻa iā mākou ka mea āu e pono ai bucket me ka hi-waiwai i makemakeia, alaila, kapa aku makou i ka hana addAlloc, ka mea e hua mai i ka mea hou bucket, hoʻohui ʻia i ke ʻano o ka bākeke.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

ʻO kēia ka hoʻokō o ka hana b32.add. Ua like ia me ka hoʻokō mua. Heluhelu mākou i nā 16 bits koʻikoʻi loa, ʻo ka mea liʻiliʻi loa he 16 bits.

A laila hele mākou i nā ʻāpana 16 kiʻekiʻe. Loaʻa iā mākou nā pāʻani. A inā he pāʻani, kāhea mākou i ke ʻano hoʻohui, a mākou e noʻonoʻo ai ma ka ʻaoʻao aʻe bucket16.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

A eia ka pae haʻahaʻa, pono e hoʻonui ʻia e like me ka hiki. Helu mākou no uint64 id waiwai ma slice bit a me kekahi bitmask. He mask kēia no kahi waiwai 64-bit i hāʻawi ʻia, hiki ke hoʻohana ʻia e nānā i ke alo o kēia bit, a i ʻole e hoʻonohonoho. Nānā mākou e ʻike inā ua hoʻonohonoho ʻia kēia bit a hoʻonohonoho, a hoʻi i mua. ʻO kēia kā mākou hoʻokō, i ʻae iā mākou e wikiwiki i ka hana o ka intersecting id o ka manawa manawa e 10 mau manawa i hoʻohālikelike ʻia me nā palapala maʻamau.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

Ma waho aʻe o kēia loiloi, loaʻa iā VictoriaMetrics nā manaʻo maikaʻi ʻē aʻe. Ua hoʻohui ʻia ka hapa nui o kēia mau optimizations no kahi kumu, akā ma hope o ka hoʻopili ʻana i ke code i ka hana ʻana.

ʻO kēia ke kānāwai nui o ka loiloi - mai hoʻohui i ka loiloi me ka manaʻo e loaʻa kahi bottleneck ma aneʻi, no ka mea, ʻaʻole e loaʻa kahi bottleneck ma laila. Hoʻohaʻahaʻa pinepine ʻia ka maikaʻi o ke code. No laila, ʻoi aku ka maikaʻi ma hope o ka profiling a ʻoi aku ka maikaʻi ma ka hana ʻana, no laila ʻo ia ka ʻikepili maoli. Inā makemake kekahi, hiki iā ʻoe ke nānā i ka code source VictoriaMetrics a e ʻimi i nā manaʻo maikaʻi ʻē aʻe ma laila.

E hele i ka hoʻonui ʻana ma VictoriaMetrics. ʻO Alexander Valyalkin

He nīnau kaʻu e pili ana i ka bitset. Ua like loa me ka C++ vector bool hoʻokō, optimized bitset. Ua lawe ʻoe i ka hoʻokō mai laila?

ʻAʻole, ʻaʻole mai laila mai. I ka hoʻokō ʻana i kēia bitset, ua alakaʻi ʻia au e ka ʻike o ke ʻano o kēia mau ids timeseries, i hoʻohana ʻia ma VictoriaMetrics. A ʻo kā lākou hoʻolālā e like me ka mea maʻamau o nā 32 bits kiʻekiʻe. Hiki ke loli ka 32 bits haʻahaʻa. ʻO ka haʻahaʻa o ka bit, hiki ke loli pinepine. No laila, hoʻokō pono ʻia kēia hoʻokō no kēia ʻano ʻikepili. ʻO ka hoʻokō C ++, e like me kaʻu ʻike, ua optimized no ka hihia maʻamau. Inā koho ʻoe no ka hihia maʻamau, ʻo ia ka mea ʻaʻole ia ka mea maikaʻi loa no kahi hihia kikoʻī.

Aʻo wau iā ʻoe e nānā i ka hōʻike a Alexey Milovid. Ma kahi o hoʻokahi mahina i hala aku nei, ua kamaʻilio ʻo ia e pili ana i ka optimization ma ClickHouse no nā loea kūikawā. Ua ʻōlelo wale ʻo ia ma ka hihia maʻamau, hoʻokō ʻia kahi hoʻokō C ++ a i ʻole kekahi hoʻokō ʻē aʻe e hana maikaʻi ma ka awelika ma kahi haukapila. ʻOi aku ka maikaʻi ma mua o ka hoʻokō ʻana i ka ʻike e like me kā mākou, kahi i ʻike ai mākou ʻoi aku ka nui o nā bits 32 kiʻekiʻe.

He nīnau lua kaʻu. He aha ka ʻokoʻa kumu mai InfluxDB?

Nui nā ʻokoʻa kumu. Ma ke ʻano o ka hana a me ka hoʻomanaʻo hoʻomanaʻo, hōʻike ʻo InfluxDB i nā hoʻokolohua he 10 mau manawa ʻoi aku ka hoʻohana ʻana i ka hoʻomanaʻo no ka cardinality time series, ke loaʻa iā ʻoe ka nui o lākou, no ka laʻana, miliona. No ka laʻana, hoʻopau ʻo VictoriaMetrics i 1 GB no ka miliona mau lālani ikaika, ʻoiai ʻo InfluxDB e hoʻopau i 10 GB. A he ʻokoʻa nui kēlā.

ʻO ka lua o ka ʻokoʻa koʻikoʻi ʻo ia ka InfluxDB i nā ʻōlelo nīnau nīnau ʻē aʻe - Flux a me InfluxQL. ʻAʻole maʻalahi lākou no ka hana ʻana me ka manawa hoʻohālikelike PromQL, i kākoʻo ʻia e VictoriaMetrics. ʻO PromQL kahi ʻōlelo nīnau mai Prometheus.

A ʻo kekahi ʻokoʻa ʻē aʻe, ʻo ka InfluxDB he ʻano hiʻohiʻona ʻikepili ʻē aʻe, kahi e hiki ai i kēlā me kēia laina ke mālama i kekahi mau māla me kahi pūʻulu ʻokoʻa. Ua mahele hou ia keia mau laina i na papa like ole. Hoʻopili kēia mau pilikia hou i ka hana ma hope me kēia waihona. He paʻakikī ke kākoʻo a hoʻomaopopo.

Ma VictoriaMetrics ua maʻalahi nā mea a pau. Ma laila, he kī-waiwai kēlā me kēia moʻo manawa. ʻO ka waiwai he mau helu - (timestamp, value), a ʻo ke kī ka hoʻonohonoho label=value. ʻAʻohe kaʻawale ma waena o nā māla a me nā ana. Hiki iā ʻoe ke koho i kekahi ʻikepili a laila hoʻohui, hoʻohui, unuhi, hoʻonui, puʻunaue, ʻaʻole like me InfluxDB kahi i hoʻokō ʻole ʻia ai nā helu ma waena o nā lālani like ʻole e like me kaʻu ʻike. ʻOiai inā hoʻokō ʻia lākou, paʻakikī, pono ʻoe e kākau i nā code he nui.

He nīnau wehewehe kaʻu. Ua maopopo anei iaʻu aia kekahi ʻano pilikia āu i kamaʻilio ai, ʻaʻole kūpono kēia ʻano kuhikuhi inverted i ka hoʻomanaʻo, no laila aia ka ʻāpana ma laila?

ʻO ka mea mua, ua hōʻike wau i kahi hoʻokō naive o kahi kuhikuhi inverted ma kahi palapala Go maʻamau. ʻAʻole kūpono kēia hoʻokō ʻana i nā waihona no ka mea ʻaʻole mālama ʻia kēia kuhikuhi kuhikuhi i ka disk, a pono e mālama ka waihona i ka disk i hiki ke loaʻa kēia ʻikepili i ka wā e hoʻomaka hou ai. Ma kēia hoʻokō ʻana, ke hoʻomaka hou ʻoe i ka noi, e nalowale kāu kuhikuhi kuhikuhi. A e lilo ana ʻoe i ka ʻike i nā ʻikepili āpau no ka mea ʻaʻole hiki iā ʻoe ke loaʻa.

Aloha! Mahalo no ka hōʻike! ʻO Pavel koʻu inoa. No Wildberries au. He mau nīnau kaʻu iā ʻoe. Ninau ekahi. Manaʻo paha ʻoe inā ua koho ʻoe i kahi loina ʻē aʻe i ke kūkulu ʻana i ka hoʻolālā o kāu noi a hoʻokaʻawale i ka ʻikepili i ka manawa, a laila hiki paha iā ʻoe ke intersect i ka ʻikepili i ka wā e ʻimi ai, ma muli wale nō o ka loaʻa ʻana o ka ʻikepili i hoʻokahi ʻāpana. manawa, ʻo ia hoʻi, i ka manawa hoʻokahi a ʻaʻole ʻoe e hopohopo no ka hoʻopuehu ʻokoʻa ʻana o kāu mau ʻāpana? Nīnau helu 2 - no ka mea ke hoʻokō nei ʻoe i kahi algorithm like me ka bitset a me nā mea ʻē aʻe a pau, a laila ua hoʻāʻo paha ʻoe e hoʻohana i nā ʻōlelo kuhikuhi? Ua ho'āʻo paha ʻoe i kēlā ʻano loiloi?

E pane koke wau i ka lua. ʻAʻole mākou i hiki i kēlā manawa. Akā inā pono, hiki mākou i laila. A ʻo ka mea mua, he aha ka nīnau?

Ua kūkākūkā ʻoe i ʻelua hiʻohiʻona. A ua ʻōlelo lākou ua koho lākou i ka lua me ka hoʻokō paʻakikī. ʻAʻole makemake lākou i ka mea mua, kahi i hoʻokaʻawale ʻia ai ka ʻikepili e ka manawa.

ʻAe. I ka hihia mua, ʻoi aku ka nui o ka nui o ka helu kuhikuhi, no ka mea ma kēlā me kēia ʻāpana pono mākou e mālama i ka ʻikepili pālua no kēlā mau manawa e hoʻomau nei i kēia mau ʻāpana āpau. A inā he liʻiliʻi ka helu churn o kāu manawa, ʻo ia hoʻi, hoʻohana mau ʻia ka moʻo like, a laila ma ka hihia mua e nalowale mākou i ka nui o ka nui o ka disk space i noho ʻia i ka hihia ʻelua.

A no laila - ʻae, he koho maikaʻi ka hoʻokaʻawale manawa. Hoʻohana ʻo Prometheus iā ia. Akā ʻo Prometheus kekahi drawback. I ka hoʻohui ʻana i kēia mau ʻāpana ʻikepili, pono ia e mālama i ka ʻike meta hoʻomanaʻo no nā lepili a me nā manawa. No laila, inā nui nā ʻāpana ʻikepili i hoʻohui ʻia, a laila e hoʻonui nui ʻia ka hoʻohana ʻana i ka hoʻomanaʻo i ka wā hoʻohui, ʻaʻole like me VictoriaMetrics. I ka hoʻohui ʻana, ʻaʻole pau ka hoʻomanaʻo ʻana o VictoriaMetrics; ʻelua mau kilobytes wale nō i pau, me ka nānā ʻole i ka nui o nā ʻāpana ʻikepili i hui ʻia.

Hoʻohana ka algorithm āu e hoʻohana nei i ka hoʻomanaʻo. Hōʻailona ia i nā hōʻailona timeseries i loaʻa nā waiwai. A ma kēia ala ʻoe e nānā ai no ka hele ʻana i hui pū ʻia ma kahi hoʻonohonoho ʻikepili a ma kahi ʻē aʻe. A maopopo iā ʻoe inā he intersect paha a ʻaʻole paha. ʻO ka maʻamau, hoʻokō nā ʻikepili i nā cursors a me nā mea hoʻokele e mālama i kā lākou ʻike i kēia manawa a holo i ka ʻikepili i koho ʻia ma muli o ka paʻakikī o kēia mau hana.

No ke aha mākou e hoʻohana ʻole ai i nā cursors e hele i ka ʻikepili?

ʻAe.

Mālama mākou i nā lālani i koho ʻia ma LevelDB a i ʻole mergeset. Hiki iā mākou ke hoʻoneʻe i ka cursor a ʻimi i ke kuʻina. No ke aha mākou e hoʻohana ʻole ai? No ka lohi. No ka mea, pono ʻoe e kāhea i kahi hana no kēlā me kēia laina. ʻO ke kelepona hana he 5 nanokekona. A inā loaʻa iā ʻoe nā laina 100, a laila ua hoʻololi mākou i ka hapalua kekona e kāhea wale i ka hana.

Aia kekahi mea, ʻae. A ʻo kaʻu nīnau hope loa. He mea ʻē paha ka nīnau. No ke aha e hiki ʻole ai ke heluhelu i nā hōʻuluʻulu kūpono a pau i ka wā e hiki mai ai ka ʻikepili a mālama iā lākou i ke ʻano i koi ʻia? No ke aha e mālama ai i nā puke nui i kekahi mau ʻōnaehana e like me VictoriaMetrics, ClickHouse, a me nā mea ʻē aʻe, a laila e hoʻolilo i ka manawa nui ma luna o lākou?

E hāʻawi wau i kumu hoʻohālike e maopopo ai. E ʻōlelo kākou, pehea ka hana ʻana o ka mīkini kiʻi liʻiliʻi? Hoʻopaʻa ia i ka mamao āu i hele ai, i nā manawa a pau e hoʻohui iā ia i hoʻokahi waiwai, a ʻo ka lua - manawa. A mahele. A loaʻa ka māmā maʻamau. Hiki iā ʻoe ke hana e pili ana i ka mea like. Hoʻohui i nā ʻike pono āpau ma ka lele.

ʻAe, maopopo iaʻu ka nīnau. He wahi ko kāu laʻana. Inā ʻike ʻoe i nā aggregates āu e pono ai, a laila ʻo kēia ka hoʻokō maikaʻi loa. Akā ʻo ka pilikia ka mālama ʻana o nā kānaka i kēia mau metric, kekahi mau ʻikepili ma ClickHouse a ʻaʻole lākou i ʻike pehea e hōʻuluʻulu ai a kānana iā lākou i ka wā e hiki mai ana, no laila pono lākou e mālama i nā ʻikepili maka a pau. Akā inā ʻike ʻoe pono ʻoe e helu i kahi mea ma ka awelika, no ke aha e helu ʻole ai ma kahi o ka mālama ʻana i kahi pūʻulu o nā kumu waiwai ma laila? Akā ʻo kēia wale nō inā ʻike ʻoe i kāu mea e pono ai.

Ma ke ala, kākoʻo nā ʻikepili no ka mālama ʻana i nā moʻo manawa i ka helu ʻana i nā aggregates. No ka laʻana, kākoʻo ʻo Prometheus lula hoʻopaʻa. ʻO ia, hiki ke hana inā ʻike ʻoe i nā ʻāpana āu e pono ai. ʻAʻole loaʻa iā VictoriaMetrics kēia, akā ma mua o Prometheus, kahi e hiki ai ke hana i kēia i nā lula recoding.

No ka laʻana, i kaʻu hana mua pono wau e helu i ka helu o nā hanana i loko o kahi puka aniani i ka hola hope. ʻO ka pilikia, pono wau e hana i kahi hoʻokō maʻamau ma Go, ʻo ia hoʻi he lawelawe no ka helu ʻana i kēia mea. He mea ʻole kēia lawelawe, no ka mea paʻakikī ke helu. Hiki ke maʻalahi ka hoʻokō inā pono ʻoe e helu i kekahi mau aggregates i nā manawa manawa paʻa. Inā makemake ʻoe e helu i nā hanana i ka puka aniani, a laila ʻaʻole maʻalahi e like me ka mea i ʻike ʻia. Manaʻo wau ʻaʻole i hoʻokō ʻia kēia ma ClickHouse a i ʻole i nā ʻikepili timeseries, no ka mea paʻakikī ke hoʻokō.

A hoʻokahi nīnau hou. Ke kamaʻilio wale nei mākou e pili ana i ka awelika, a hoʻomanaʻo wau aia kekahi mea e like me ka Graphite me kahi hope Carbon. A ua ʻike ʻo ia i ka hoʻokaʻawale ʻana i nā ʻikepili kahiko, ʻo ia hoʻi, waiho i hoʻokahi helu i kēlā me kēia minuke, hoʻokahi helu i kēlā me kēia hola, a me nā mea ʻē aʻe. e hoemiia . Akā ʻaʻole kākoʻo ʻo Prometheus a me VictoriaMetrics i kēia hana. Ua hoʻolālā ʻia e kākoʻo iā ia? Inā ʻaʻole, no ke aha ʻaʻole?

Mahalo no ka nīnau. Nīnau kā mākou mea hoʻohana i kēia nīnau i kēlā me kēia manawa. Nīnau lākou i ka wā e hoʻohui ai mākou i ke kākoʻo no ka downsampling. Nui nā pilikia ma ʻaneʻi. ʻO ka mea mua, maopopo kēlā me kēia mea hoʻohana downsampling kekahi mea ʻokoʻa: makemake kekahi e loaʻa kahi kikoʻī i ka wā i hāʻawi ʻia, makemake kekahi i ka nui, ka liʻiliʻi, nā waiwai maʻamau. Inā nui nā ʻōnaehana e kākau i ka ʻikepili i kāu waihona, a laila ʻaʻole hiki iā ʻoe ke hoʻohui i nā mea āpau. Malia paha e koi ʻia kēlā me kēia ʻōnaehana i ka thinning ʻokoʻa. A paʻakikī kēia e hoʻokō.

A ʻo ka lua o ka mea ʻo VictoriaMetrics, e like me ClickHouse, ua hoʻolālā ʻia no ka hana ʻana i ka nui o ka ʻikepili maka, no laila hiki iā ia ke kohi i kahi piliona laina ma lalo o ka kekona inā he nui kāu mau cores i kāu ʻōnaehana. Ke nānā nei i nā helu manawa ma VictoriaMetrics - 50 mau helu i kekona i kēlā me kēia kumu. A hoʻonui kēia hana i nā cores i loaʻa. ʻO ia hoʻi, inā loaʻa iā ʻoe nā cores 000, no ka laʻana, e nānā ʻoe i hoʻokahi piliona helu i kekona. A ʻo kēia waiwai o VictoriaMetrics a me ClickHouse e hōʻemi i ka pono no ka hoʻohaʻahaʻa.

ʻO kekahi hiʻohiʻona ʻo VictoriaMetrics e hoʻopili pono i kēia ʻikepili. Mai ka 0,4 a i ka 0,8 bytes no ka helu ʻana o ka hoʻoemi ma ka awelika. ʻO kēlā me kēia helu he hōʻailona manawa + waiwai. A ua hoʻopaʻa ʻia ma lalo o hoʻokahi byte ma ka awelika.

ʻO Sergey. He nīnau kaʻu. He aha ka liʻiliʻi loa o ka manawa hoʻopaʻa ʻana?

Hoʻokahi milikekona. Ua kamaʻilio pū mākou me nā mea hoʻomohala waihona manawa. ʻO hoʻokahi kekona ka palena liʻiliʻi o ka manawa. A ma Graphite, no ka laʻana, hoʻokahi kekona. Ma OpenTSDB he hoʻokahi kekona. Loaʻa iā InfluxDB ka pololei nanosecond. Ma VictoriaMetrics he hoʻokahi millisecond, no ka mea ma Prometheus he hoʻokahi millisecond. A ua hoʻokumu mua ʻia ʻo VictoriaMetrics ma ke ʻano he mālama mamao no Prometheus. Akā i kēia manawa hiki iā ia ke mālama i ka ʻikepili mai nā ʻōnaehana ʻē aʻe.

ʻO ka mea aʻu i kamaʻilio ai, ʻōlelo lākou he pololei ka lua-a-kekona - ua lawa ia no lākou no ka mea pili ia i ke ʻano o ka ʻikepili e mālama ʻia ana i ka waihona manawa. Inā ʻo ia ka ʻikepili DevOps a i ʻole ka ʻikepili mai ka ʻenehana, kahi āu e hōʻiliʻili ai i nā manawa o 30 kekona, i kēlā me kēia minuke, a laila lawa ka lua o ka pololei, ʻaʻole pono ʻoe i kahi mea liʻiliʻi. A inā e hōʻiliʻili ʻoe i kēia ʻikepili mai nā ʻōnaehana kālepa kiʻekiʻe, a laila pono ʻoe i ka pololei nanosecond.

ʻO ka pololei o Millisecond ma VictoriaMetrics he kūpono no ka hihia DevOps, a hiki ke kūpono i ka hapa nui o nā hihia aʻu i ʻōlelo ai ma ka hoʻomaka ʻana o ka hōʻike. ʻO ka mea wale nō i kūpono ʻole ʻo ia nā ʻōnaehana kālepa kiʻekiʻe.

Mahalo iā ʻoe! A me kekahi ninau. He aha ka hoʻohālikelike i PromQL?

Hoʻopili piha hope. Kākoʻo piha ʻo VictoriaMetrics iā PromQL. Eia kekahi, hoʻohui ia i nā hana holomua hou i PromQL, i kapa ʻia MetricsQL. Aia kahi kamaʻilio ma YouTube e pili ana i kēia hana hoʻonui. Ua kamaʻilio wau ma ka Monitoring Meetup i ka pūnāwai ma St. Petersburg.

Kanal Telegram VictoriaMetrics.

Hiki i nā mea hoʻohana i hoʻopaʻa inoa ʻia ke komo i ka noiʻi. Eʻe, e 'oluʻolu.

He aha ka mea e kāohi iā ʻoe mai ka hoʻololi ʻana iā VictoriaMetrics i kāu mālama lōʻihi no Prometheus? (E kākau i loko o nā manaʻo, e hoʻohui wau i ka koho balota))

  • 71,4%ʻAʻole wau e hoʻohana iā Prometheus5

  • 28,6%ʻAʻole ʻike e pili ana iā VictoriaMetrics2

7 mea hoʻohana i koho. Ua hōʻole nā ​​mea hoʻohana 12.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka