HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

HighLoad++ Moscow 2018, Hale Ahaolelo. Nowemapa 9, 15:00

Abstracts a me ka hōʻike: http://www.highload.ru/moscow/2018/abstracts/4066

Yuri Nasretdinov (VKontakte): e kamaʻilio ka hōʻike e pili ana i ka ʻike o ka hoʻokō ʻana i ka ClickHouse i kā mākou hui - no ke aha mākou e pono ai, pehea ka nui o ka ʻikepili a mākou e mālama ai, pehea mākou e kākau ai, a pēlā aku.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Nā kumuwaiwai hou: e hoʻohana ana i ka Clickhouse ma ke ʻano he pani no ELK, Big Query a me TimescaleDB

Yuri Nasretdinov: - Aloha kākou! ʻO Yuri Nasretdinov koʻu inoa, e like me kaʻu i hoʻolauna mua ʻia. Hana wau ma VKontakte. E kamaʻilio wau e pili ana i kā mākou hoʻokomo ʻana i ka ʻikepili i ClickHouse mai kā mākou ʻauwaʻa kikowaena (ʻumi tausani).

He aha nā lāʻau a no ke aha e hōʻiliʻili ai iā lākou?

ʻO ka mea a mākou e haʻi aku ai iā ʻoe: he aha kā mākou i hana ai, no ke aha mākou i makemake ai iā "ClickHouse", kēlā me kēia, no ke aha mākou i koho ai, he aha ke ʻano o ka hana āu e hiki ai ke loaʻa me ka ʻole o ka hoʻonohonoho ʻana i kekahi mea kūikawā. E haʻi hou aku wau iā ʻoe e pili ana i nā papa hoʻopaʻa, e pili ana i nā pilikia i loaʻa iā mākou me lākou a e pili ana i kā mākou hoʻonā i hoʻomohala ʻia mai ka open source - KittenHouse a me Lighthouse.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

No ke aha i pono ai mākou e hana i kekahi mea (maikaʻi mau nā mea āpau ma VKontakte, pololei?). Makemake mākou e hōʻiliʻili i nā lāʻau debug (a he mau haneli terabytes o ka ʻikepili ma laila), malia paha e ʻoi aku ka maʻalahi o ka helu ʻana i nā helu; a loaʻa iā mākou kahi ʻauwaʻa he ʻumi kaukani o nā kikowaena kahi e pono ai e hana i kēia mau mea a pau.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

No ke aha mākou i hoʻoholo ai? Loaʻa paha iā mākou nā hāʻina no ka mālama ʻana i nā lāʻau. Eia - aia kahi lehulehu "Backend VK". Manaʻo nui wau e kau inoa iā ia.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

He aha nā lāʻau? He ʻenekini kēia e hoʻihoʻi ana i nā ʻāpana ʻole. ʻO nā ʻenekini ma VK ka mea i kapa ʻia e nā poʻe ʻē aʻe he microservices. A eia kahi mea ʻakaʻaka ʻakaʻaka (nui loa nā mea makemake). Pehea? ʻAe, e hoʻolohe hou aku!

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

He aha ka mea hiki ke hoʻohana no ka mālama ʻana i nā lāʻau? ʻAʻole hiki ke haʻi ʻole iā Hadup. A laila, no ka laʻana, ʻo Rsyslog (ka mālama ʻana i kēia mau lāʻau i nā faila). LSD. ʻO wai ka mea ʻike i ka LSD? ʻAʻole, ʻaʻole kēia LSD. E mālama pū i nā faila. ʻAe, he koho ʻē ka ClickHouse.

Clickhouse a me nā mea hoʻokūkū: nā koi a me nā manawa kūpono

He aha kā mākou makemake? Makemake mākou e hōʻoia ʻaʻole mākou e hopohopo nui e pili ana i ka hana, i hana ia ma waho o ka pahu, ʻoi aku ka maikaʻi me ka hoʻonohonoho liʻiliʻi. Makemake mākou e kākau nui, a kākau wikiwiki. A makemake mākou e mālama i kēlā me kēia ʻano mahina, makahiki, ʻo ia hoʻi, no ka manawa lōʻihi. Makemake paha mākou e hoʻomaopopo i kekahi pilikia a lākou i hele mai ai iā mākou a ʻōlelo mai, "ʻAʻole hana kekahi mea ma ʻaneʻi," a ʻo 3 mau mahina i hala aku nei), a makemake mākou e ʻike i ka mea i hana ʻia 3 mau mahina i hala. Hoʻopili ʻikepili - maopopo ke kumu e lilo ai ia i mea hoʻohui - no ka mea e hōʻemi ana i ka nui o ka wahi e lawe ai.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

A loaʻa iā mākou kahi koi hoihoi: kākau mākou i kekahi manawa i ka hopena o kekahi mau kauoha (no ka laʻana, nā logs), hiki ke maʻalahi ma mua o 4 kilobytes. A inā hana kēia mea ma luna o ka UDP, a laila ʻaʻole pono e hoʻolilo ... ʻaʻole loaʻa kahi "overhead" no ka pilina, a no ka nui o nā kikowaena e lilo kēia i mea hoʻohui.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

E ʻike kākou i ka hāʻawi ʻana mai o ka open source iā mākou. ʻO ka mea mua, loaʻa iā mākou ka Logs Engine - ʻo kā mākou mīkini kēia; Ma ke kumu, hiki iā ia ke hana i nā mea āpau, hiki iā ia ke kākau i nā laina lōʻihi. ʻAe, ʻaʻole ia e hōʻemi i ka ʻikepili - hiki iā mākou ke kaomi i nā kolamu nui iā mākou iho inā makemake mākou ... ʻoiaʻiʻo, ʻaʻole makemake mākou (inā hiki). ʻO ka pilikia wale nō, hiki iā ia ke hāʻawi wale aku i nā mea i kūpono i kona hoʻomanaʻo; No ka heluhelu ʻana i ke koena, pono ʻoe e kiʻi i ka binlog o kēia mīkini a, no laila, lōʻihi ka manawa.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

He aha nā koho ʻē aʻe i laila? No ka laʻana, "Hadup". ʻO ka maʻalahi o ka hana ... ʻO wai ka manaʻo he maʻalahi ke hoʻonohonoho ʻana iā Hadup? ʻOiaʻiʻo, ʻaʻohe pilikia me ka hoʻopaʻa ʻana. I ka heluhelu ʻana, ala mai nā nīnau i kekahi manawa. Ma ke kumu, ʻōlelo wau ʻaʻole paha, no nā lāʻau. ʻO ka mālama ʻana i ka wā lōʻihi - ʻoiaʻiʻo, ʻae, kaomi ʻikepili - ʻae, nā kaula lōʻihi - maopopo hiki iā ʻoe ke hoʻopaʻa. Akā ʻo ka hoʻopaʻa ʻana mai kahi helu nui o nā kikowaena ... Pono ʻoe e hana i kekahi mea iā ʻoe iho!

Rsyslog. ʻOiaʻiʻo, ua hoʻohana mākou iā ia ma ke ʻano he koho hoʻihoʻi i hiki iā mākou ke heluhelu iā ia me ka ʻole o ka hoʻolei ʻana i ka binlog, akā ʻaʻole hiki iā ia ke kākau i nā laina lōʻihi; ma ke kumu, ʻaʻole hiki iā ia ke kākau ma mua o 4 kilobytes. Pono ʻoe e hana i ka ʻikepili ʻikepili ma ke ala like iā ʻoe iho. E hele mai ka heluhelu mai nā faila.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

A laila aia ka "badushka" hoʻomohala o LSD. E like me ka "Rsyslog": kākoʻo ia i nā kaula lōʻihi, akā ʻaʻole hiki ke hana ma o UDP a, ʻoiaʻiʻo, no kēia mea, ʻaʻole naʻe, he nui nā mea e pono e kākau hou ʻia ma laila. Pono e hoʻolālā hou ʻia ʻo LSD e hiki ke hoʻopaʻa moʻolelo mai nā ʻumi kaukani o nā kikowaena.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

A maanei! ʻO kahi koho ʻakaʻaka ʻo ElasticSearch. Pehea e ʻōlelo ai? Maikaʻi ʻo ia i ka heluhelu ʻana, ʻo ia hoʻi, heluhelu wikiwiki ʻo ia, ʻaʻole maikaʻi loa ma ke kākau ʻana. ʻO ka mea mua, inā hoʻopaʻa ia i ka ʻikepili, nāwaliwali loa ia. ʻO ka mea nui paha, pono ka huli piha ʻana i nā hale ʻikepili ʻoi aku ka nui ma mua o ka leo kumu. He paʻakikī ke hana a ulu pinepine nā pilikia me ia. A, hou, hoʻopaʻa ʻia ma Elastic - pono mākou e hana i nā mea āpau iā mākou iho.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Eia ʻo ClickHouse kahi koho kūpono, ʻoiaʻiʻo. ʻO ka mea wale nō ʻo ka hoʻopaʻa ʻana mai nā ʻumi kaukani o nā kikowaena he pilikia. Akā ma ka liʻiliʻi loa hoʻokahi pilikia, hiki iā mākou ke hoʻāʻo e hoʻoponopono i kekahi ʻano. A ʻo ke koena o ka hōʻike e pili ana i kēia pilikia. He aha ke ʻano o ka hana āu e manaʻo ai mai ClickHouse?

Pehea mākou e hoʻokomo ai? MergeTree

ʻO wai i waena o ʻoukou i lohe ʻole a ʻike paha e pili ana iā "ClickHouse"? Pono wau e haʻi aku iā ʻoe, ʻaʻole anei? wikiwiki loa. ʻO ka hoʻokomo ʻana ma laila - 1-2 gigabits i kēlā me kēia kekona, ʻoi aku ka nui o 10 gigabits i kēlā me kēia kekona hiki ke kū i kēia hoʻonohonoho - aia ʻelua 6-core Xeons (ʻo ia hoʻi, ʻaʻole i ka ikaika loa), 256 gigabytes o RAM, 20 terabytes i RAID (ʻaʻohe mea i hoʻonohonoho ʻia, nā hoʻonohonoho paʻamau). ʻO Alexey Milovidov, ka mea hoʻomohala ClickHouse, ke noho nei paha ma laila e uē ana no ka mea ʻaʻole mākou i hoʻonohonoho i kekahi mea (ua hana nā mea a pau e like me mākou). No laila, hiki ke loaʻa ka wikiwiki scanning o, e ʻōlelo, ma kahi o 6 biliona laina i kēlā me kēia kekona inā paʻa pono ka ʻikepili. Inā makemake ʻoe i ka % ma kahi kaula kikokikona - 100 miliona mau laina i kēlā me kēia kekona, ʻo ia hoʻi, he wikiwiki loa ia.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Pehea mākou e hoʻokomo ai? ʻAe, ʻike ʻoe ua hoʻohana ʻo VK i ka PHP. E hoʻokomo mākou mai kēlā me kēia limahana PHP ma o HTTP i "ClickHouse", i loko o ka papa MergeTree no kēlā me kēia moʻolelo. ʻO wai ka mea ʻike i kahi pilikia me kēia papahana? No kekahi kumu, ʻaʻole i hāpai nā lima a pau. E haʻi aku wau iā ʻoe.

ʻO ka mea mua, nui nā kikowaena - no laila, e nui nā pilina (ʻino). A laila ʻoi aku ka maikaʻi o ka hoʻokomo ʻana i ka ʻikepili i loko o MergeTree ʻaʻole pinepine ma mua o hoʻokahi manawa i kekona. A ʻo wai ka mea ʻike i ke kumu? ʻAe, maikaʻi. E haʻi hou aku wau iā ʻoe e pili ana i kēia. ʻO kekahi nīnau hoihoi ʻaʻole mākou e hana ana i ka analytics, ʻaʻole pono mākou e hoʻonui i ka ʻikepili, ʻaʻole pono mākou i nā kikowaena waena, makemake mākou e hoʻokomo pololei i loko o "ClickHouse" (ʻoi aku ka maikaʻi - ʻoi aku ka pololei, ʻoi aku ka maikaʻi).

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

No laila, pehea ka hoʻokomo ʻana ma MergeTree? No ke aha ʻoi aku ka maikaʻi o ka hoʻokomo ʻana i loko o ia mea ma mua o hoʻokahi manawa a i ʻole ka liʻiliʻi pinepine? ʻO ka ʻoiaʻiʻo ʻo "ClickHouse" kahi waihona kolamu a hoʻokaʻawale i ka ʻikepili ma ke ʻano piʻi o ke kī nui, a ke hana ʻoe i kahi hoʻokomo, hana ʻia kekahi mau faila ma ka liʻiliʻi e like me ka helu o nā kolamu kahi i hoʻokaʻawale ʻia ai ka ʻikepili. i ka piʻi ʻana o ke kī mua (ua hana ʻia kahi papa kuhikuhi ʻokoʻa, kahi hoʻonohonoho o nā faila ma ka disk no kēlā me kēia hoʻokomo). A laila hiki mai ka hoʻokomo hou aʻe, a ma ke kua i hui pū ʻia i loko o nā "partitions" nui. No ka hoʻokaʻawale ʻia ʻana o ka ʻikepili, hiki ke "hoʻohui" i ʻelua mau faila me ka ʻole o ka hoʻomanaʻo.

Akā, e like me kāu e manaʻo ai, inā e kākau ʻoe i nā faila 10 no kēlā me kēia hoʻokomo, a laila e hoʻopau koke ʻo ClickHouse (a i ʻole kāu kikowaena), no laila e ʻōlelo ʻia e hoʻokomo i nā pūʻulu nui. No laila, ʻaʻole mākou i hoʻomaka i ka papahana mua i ka hana. Ua hoʻokuʻu koke mākou i hoʻokahi, nona ka helu 2:

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

E noʻonoʻo ʻoe aia ma kahi o hoʻokahi kaukani mau kikowaena a mākou i hoʻomaka ai, aia wale nō PHP. A ma kēlā me kēia kikowaena aia kā mākou luna kūloko, a mākou i kapa ai ʻo "Kittenhouse", e mālama ana i kahi pilina me "ClickHouse" a hoʻokomo i nā ʻikepili i kēlā me kēia mau kekona. Hoʻokomo i ka ʻikepili ʻaʻole i loko o MergeTree, akā i loko o kahi papa hoʻopaʻa, e lawelawe pololei ana e pale i ka hoʻokomo pololei ʻana i loko o MergeTree i kēia manawa.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Ke hana nei me nā papa hoʻopaʻa

He aha ia? ʻO nā papa hoʻopaʻa he ʻāpana hoʻomanaʻo i hoʻokaʻawale ʻia (ʻo ia hoʻi, hiki ke hoʻokomo pinepine ʻia i loko). Loaʻa iā lākou he mau ʻāpana, a hana kēlā me kēia ʻāpana ma ke ʻano he pale kūʻokoʻa, a holoi ʻia lākou ma ke kaʻawale (inā he nui kāu mau ʻāpana i ka buffer, a laila e nui nā mea hoʻokomo i kekona). Hiki ke heluhelu mai kēia mau papa - a laila heluhelu ʻoe i ka hui ʻana o nā mea o ka buffer a me ka papa makua, akā i kēia manawa ua pāpā ʻia ka palapala, no laila ʻoi aku ka maikaʻi o ka heluhelu ʻana mai laila. A hōʻike nā papa buffer i ka QPS maikaʻi loa, ʻo ia hoʻi, a hiki i 3 tausani QPS ʻaʻole ʻoe e pilikia i ka wā e hoʻokomo ai. Ua maopopo inā nalowale ka mana o ke kikowaena, a laila hiki ke nalowale ka ʻikepili, no ka mea ua mālama ʻia i ka hoʻomanaʻo.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

I ka manawa like, hoʻopiʻi ka hoʻolālā me kahi buffer iā ALTER, no ka mea, pono ʻoe e hoʻolei i ka papa buffer kahiko me ka hoʻolālā kahiko (ʻaʻole e nalowale ka ʻikepili ma nā wahi āpau, no ka mea e holoi ʻia ma mua o ka holoi ʻana o ka papaʻaina). A laila "hoʻololi" ʻoe i ka papaʻaina āu e pono ai a hana hou i ka papa buffer. No laila, ʻoiai ʻaʻohe papa hoʻopaʻa, ʻaʻole e kahe kāu ʻikepili ma nā wahi āpau, akā hiki iā ʻoe ke loaʻa iā ia ma ka disk ma ka liʻiliʻi loa.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

He aha ka Kittenhouse a pehea e hana ai?

He aha ka KittenHouse? He mea koho keia. E noʻonoʻo i ka ʻōlelo hea? Ua hōʻiliʻili au i nā kumuhana hype loa i kaʻu hōʻike - "Clickhouse", E hele, malia paha e hoʻomanaʻo wau i kahi mea ʻē aʻe. ʻAe, kākau ʻia kēia ma Go, no ka mea ʻaʻole maopopo iaʻu i ke kākau ʻana ma C, ʻaʻole wau makemake.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

No laila, mālama ia i kahi pilina me kēlā me kēia kikowaena a hiki ke kākau i ka hoʻomanaʻo. No ka laʻana, inā kākau mākou i nā moʻolelo hewa iā Clickhouse, a laila inā ʻaʻohe manawa o Clickhouse e hoʻokomo i ka ʻikepili (ma hope o nā mea a pau, inā he nui ka mea i kākau ʻia), a laila ʻaʻole mākou e pehu i ka hoʻomanaʻo - hoʻolei wale mākou i ke koena. No ka mea inā mākou e kākau i nā gigabits i kēlā me kēia kekona o nā hewa, a laila hiki iā mākou ke hoʻolei i kekahi. Hiki iā Kittenhouse ke hana i kēia. Eia hou, hiki iā ia ke hana i ka hāʻawi pono ʻana, ʻo ia hoʻi, ke kākau ʻana i ka disk ma ka mīkini kūloko a hoʻokahi manawa i kēlā me kēia manawa (ma laila, hoʻokahi manawa i kēlā me kēia mau kekona) hoʻāʻo ʻo ia e hāʻawi i ka ʻikepili mai kēia faila. A i ka wā mua ua hoʻohana mākou i ka format Values ​​maʻamau - ʻaʻole kekahi ʻano binary, kahi ʻano kikokikona (e like me ka SQL maʻamau).

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Akā, ua hiki mai kēia. Ua hoʻohana mākou i ka hāʻawi pono ʻana, kākau i nā lāʻau, a laila hoʻoholo (ʻo ia kahi puʻupuʻu hoʻāʻo kūlana) ... Ua hoʻopau ʻia no kekahi mau hola a hoʻihoʻi hou ʻia, a hoʻomaka ka hoʻokomo ʻana mai nā kaukani kaukani - ua ʻike ʻia aia ka Clickhouse "Thread ma ka pili" - no laila, i loko o hoʻokahi kaukani pili, kahi hoʻokomo ikaika e alakaʻi i kahi awelika ukana ma kahi kikowaena ma kahi o hoʻokahi a me ka hapalua tausani. ʻO ka mea kupanaha, ua ʻae ke kikowaena i nā noi, akā ua hoʻokomo ʻia ka ʻikepili ma hope o kekahi manawa; akā, he mea paʻakikī loa i ke kikowaena ke lawelawe iā ia...

Hoʻohui i ka nginx

ʻO ia ʻano hoʻonā no ka Thread no ka hoʻohālike pili ʻo nginx. Ua hoʻokomo mākou i ka nginx i mua o Clickhouse, i ka manawa like e hoʻonohonoho i ke kaulike no ʻelua replicas (ua hoʻonui ʻia kā mākou wikiwiki hoʻokomo i nā manawa 2, ʻoiai ʻaʻole ia he mea ʻoiaʻiʻo ka hihia) a kaupalena i ka helu o nā pili i Clickhouse, i ka i uka a, no laila, ʻoi aku, ma mua o 50 mau pilina, me he mea lā ʻaʻohe kumu o ka hoʻokomo ʻana.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

A laila ʻike mākou he mau hemahema kēia papahana, no ka mea hoʻokahi wale nō nginx ma aneʻi. No laila, inā hāʻule kēia nginx, ʻoiai ke ʻano o nā replicas, nalowale mākou i ka ʻikepili a i ʻole, ma ka liʻiliʻi, mai kākau i nā wahi āpau. ʻO ia ke kumu i hana ai mākou i kā mākou iho kauʻana ukana. Ua ʻike nō hoʻi mākou ua kūpono ʻo "Clickhouse" no nā lāʻau, a ua hoʻomaka ka "demon" e kākau i kāna mau lāʻau ma "Clickhouse" - kūpono loa, e ʻoiaʻiʻo. Hoʻohana mau mākou iā ia no nā "diabolo" ʻē aʻe.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

A laila ua ʻike mākou i kēia pilikia hoihoi: inā ʻoe e hoʻohana i kahi ʻano maʻamau o ka hoʻokomo ʻana i ke ʻano SQL, hoʻoikaika ia i kahi parser SQL-based AST piha, he lohi. No laila, ua hoʻohui mākou i nā hoʻonohonoho e hōʻoia i ka hiki ʻole o kēia. Ua hana mākou i ka load balancing, nā nānā olakino, no laila inā make kekahi, haʻalele mākou i ka ʻikepili. Loaʻa iā mākou i kēia manawa he nui nā papa e pono ai mākou e loaʻa i nā pūʻulu Clickhouse like ʻole. A hoʻomaka pū mākou e noʻonoʻo e pili ana i nā hoʻohana ʻē aʻe - no ka laʻana, makemake mākou e kākau i nā lāʻau mai nā modula nginx, akā ʻaʻole lākou ʻike pehea e kamaʻilio me kā mākou RPC. ʻAe, makemake wau e aʻo iā lākou pehea e hoʻouna ai ma kahi liʻiliʻi - no ka laʻana, e loaʻa i nā hanana ma localhost ma o UDP a laila hoʻouna iā lākou i Clickhouse.

Hoʻokahi kapuaʻi mai ka hopena

Ua hoʻomaka ka hoʻolālā hope e like me kēia (ʻo ka ʻehā o kēia kumumanaʻo): ma kēlā me kēia kikowaena i mua o Clickhouse aia ka nginx (ma ka server like) a hoʻopiʻi wale ia i nā noi i localhost me ka palena o ka helu o nā pilina o 50 ʻāpana. A ua hana maikaʻi kēia papahana, ua maikaʻi nā mea a pau me ia.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Hoʻokahi mahina ko mākou noho ʻana pēlā. Ua hauʻoli nā mea a pau, ua hoʻohui lākou i nā papaʻaina, ua hoʻohui lākou, ua hoʻohui lākou ... Ma keʻano laulā, ua ʻike ʻia ʻaʻole maikaʻi loa ke ʻano o kā mākou hoʻohui ʻana i nā papa buffer (e waiho mākou pēlā). Ua hana mākou i 16 mau ʻāpana i kēlā me kēia pākaukau a me ka wā uila o ʻelua mau kekona; loaʻa iā mākou 20 mau papa a loaʻa i kēlā me kēia pākaukau he 8 hoʻokomo i kēlā me kēia kekona - a i kēia manawa ua hoʻomaka ʻo "Clickhouse" ... ua hoʻomaka nā moʻolelo e lohi. ʻAʻole wale lākou i hala ... ʻO ka maʻamau, loaʻa i ka nginx kahi mea hoihoi inā inā pau nā pilina ma ke kahawai, a laila hoʻihoʻi wale ʻo ia i ka "502" i nā noi hou a pau.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

A eia mākou (ua nānā wale wau i nā lāʻau i Clickhouse ponoʻī) ma kahi o ka hapalua o ka hapa o nā noi i hāʻule. No laila, ua kiʻekiʻe ka hoʻohana ʻana i ka disk, ua nui nā hui. ʻAe, he aha kaʻu i hana ai? ʻO ka mea maʻamau, ʻaʻole wau i hopohopo e noʻonoʻo i ke kumu i pau ai ka pilina a me ka upstream.

Ke hoʻololi nei i ka nginx me kahi koho hope

Ua hoʻoholo wau e pono mākou e hoʻokele i kēia iā mākou iho, ʻaʻole pono mākou e waiho iā ia i ka nginx - ʻaʻole ʻike ʻo nginx i nā papa ma Clickhouse, a ua hoʻololi au i ka nginx me kahi mea hoʻololi hoʻohuli, a ua kākau wau iaʻu iho.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

He aha kāna e hana nei? Hana ia ma muli o ka hale waihona puke fasthttp "goshnoy", ʻo ia hoʻi, wikiwiki, kokoke e like me ka nginx. E kala mai, ʻo Igor, inā ʻoe ma ʻaneʻi (nota: ʻO Igor Sysoev he mea papahana Lūkini nāna i hoʻokumu i ka kikowaena pūnaewele nginx). Hiki iā ia ke hoʻomaopopo i ke ʻano o kēia mau nīnau - INSERT a i ʻole SELECT - no laila, paʻa ia i nā loko pili like ʻole no nā ʻano nīnau like ʻole.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

No laila, ʻoiai inā ʻaʻole mākou manawa e hoʻopau i nā noi hoʻokomo, e hala nā "koho", a me ka hope. A hui pū ʻo ia i ka ʻikepili i loko o nā papa hoʻopaʻa - me kahi pale liʻiliʻi: inā he mau hewa, nā hewa syntax, a pēlā aku - i ʻole lākou e hoʻopilikia nui i ke koena o ka ʻikepili, no ka mea, ke hoʻokomo wale mākou i nā papa buffer, mākou he "bachi" liʻiliʻi, a ua pili wale nā ​​hewa syntax a pau i kēia ʻāpana liʻiliʻi; a ma ʻaneʻi e hoʻopilikia lākou i kahi pale nui. ʻO ka liʻiliʻi he 1 megabyte, ʻo ia hoʻi, ʻaʻole liʻiliʻi.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

ʻO ka hoʻokomo ʻana i kahi hoʻonohonoho a hoʻololi maoli i ka nginx, e hana like me ka nginx i hana ma mua - ʻaʻole pono ʻoe e hoʻololi i ka "Kittenhouse" kūloko no kēia. A ma muli o ka hoʻohana ʻana i ka fasthttp, wikiwiki loa ia - hiki iā ʻoe ke hana ma mua o 100 tausani mau noi i kēlā me kēia kekona no nā hoʻokomo hoʻokahi ma o kahi koho hope. ʻO ke kumu, hiki iā ʻoe ke hoʻokomo i hoʻokahi laina i ka manawa i loko o ka kittenhouse reverse proxy, akā ʻoiaʻiʻo ʻaʻole mākou e hana i kēlā.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Ua hoʻomaka ka hoʻolālā e like me kēia: "Kittenhouse", nā hui koho hope i nā noi he nui i loko o nā papaʻaina a, ma ka huli ʻana, hoʻokomo nā papa buffer iā lākou i nā mea nui.

ʻO ka pepehi kanaka he hopena no ka manawa lōʻihi, ʻo Kitten mau loa

He pilikia hoihoi kēia... Ua hoʻohana kekahi o ʻoukou i ka fasthttp? ʻO wai i hoʻohana i ka fasthttp me nā noi POST? Malia paha, ʻaʻole pono e hana ʻia kēia, no ka mea, pale ia i ke kino noi ma ke ʻano maʻamau, a ua hoʻonohonoho ʻia kā mākou nui buffer i 16 megabytes. Ua pau ka hoʻokomo ʻana i ka mālama ʻana i kekahi manawa, a ua hoʻomaka nā ʻāpana 16-megabyte e hōʻea mai nā ʻumi kaukani o nā kikowaena āpau, a ua hoʻopaʻa ʻia lākou a pau i ka hoʻomanaʻo ma mua o ka hoʻouna ʻia ʻana iā Clickhouse. No laila, ua pau ka hoʻomanaʻo ʻana, hele mai ka Out-Of-Memory Killer a pepehi i ka mea koho hope (a i ʻole "Clickhouse", hiki ke "ʻai" ma mua o ka mea koho hope). Ua hana hou ka pōʻaiapuni. ʻAʻole he pilikia ʻoluʻolu loa. ʻOiai ua hāʻule mākou i kēia ma hope o kekahi mau mahina o ka hana.

He aha kaʻu i hana ai? Eia hou, ʻaʻole au makemake e hoʻomaopopo i ka mea i hana maoli ʻia. Manaʻo wau he mea maopopo loa ʻaʻole pono ʻoe e pale i ka hoʻomanaʻo. ʻAʻole hiki iaʻu ke hoʻopaʻa i ka fasthttp, ʻoiai ua hoʻāʻo wau. Akā ua loaʻa iaʻu kahi ala e hana ai i ʻole pono e hoʻopaʻa i kekahi mea, a ua hele mai au me kaʻu ala ponoʻī ma HTTP - ua kapa wau iā KITTEN. ʻAe, kūpono - "VK", "Kitten" ... He aha hou?..

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Inā hele mai kahi noi i ke kikowaena me ke ʻano Kitten, a laila pono ke kikowaena e pane i ka "meow" - me ke kūpono. Inā pane ʻo ia i kēia, a laila manaʻo ʻia ua hoʻomaopopo ʻo ia i kēia protocol, a laila keʻakeʻa wau i ka pilina (ua loaʻa i ka fasthttp ke ʻano), a hele ka pilina i ke ʻano "raw". No ke aha au e pono ai? Makemake au e kaohi i ka heluhelu ʻana mai nā pilina TCP. He waiwai maikaʻi ko TCP: inā ʻaʻohe mea heluhelu mai kēlā ʻaoʻao, a laila hoʻomaka ka kākau e kali, a ʻaʻole hoʻomanaʻo nui ʻia kēia.

A no laila au i heluhelu mai e pili ana i 50 nā mea kūʻai mai i ka manawa (mai kanalima no ka mea, he kanalima pono e lawa, ina paha ka uku mai kekahi DC)... Consumption ua emi me keia hoʻokokoke mai ma ka liʻiliʻi loa 20 manawa, akā, au, e oiaio. , ʻAʻole hiki iaʻu ke ana pololei i ka manawa, no ka mea, ʻaʻohe kumu (ua hiki i ka pae o ka hewa). He binary ka protocol, ʻo ia hoʻi, aia ka inoa papa a me ka ʻikepili; ʻaʻohe poʻomanaʻo http, no laila ʻaʻole wau i hoʻohana i kahi kumu pūnaewele (ʻaʻole pono wau e kamaʻilio me nā mea hoʻokele - ua hana wau i kahi protocol e kūpono i kā mākou pono). A maikaʻi nā mea a pau iā ia.

Kaumaha ka papa ʻaina

I kēia mau lā ua ʻike mākou i kekahi hiʻohiʻona hoihoi o nā papa hoʻopaʻa. A ua ʻoi aku ka ʻeha o kēia pilikia ma mua o nā mea ʻē aʻe. E noʻonoʻo kākou i kēia kūlana: ke hoʻohana nei ʻoe i ka Clickhouse, he mau kaukani kāu mau kikowaena Clickhouse, a loaʻa iā ʻoe kekahi mau noi e lōʻihi loa ka heluhelu ʻana (e ʻōlelo mākou, ʻoi aku ma mua o 60 kekona); a hele mai ʻoe e hana i Alter i kēia manawa... I kēia manawa, ʻaʻole e hoʻokomo ʻia nā "koho" i hoʻomaka ma mua o "Alter" i loko o kēia papa ʻaina, ʻaʻole e hoʻomaka ʻo "Alter" - malia paha kekahi mau hiʻohiʻona o ka hana ʻana o "Clickhouse" keia wahi. Hiki paha ke hoʻoponopono ʻia kēia? A i ʻole hiki ʻole?

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Ma keʻano laulā, maopopo ka ʻoiaʻiʻo ʻaʻole kēia he pilikia nui, akā me nā papa buffer e ʻoi aku ka ʻeha. No ka mea, inā, e ʻōlelo kākou, ʻo kāu mau manawa "Hoʻololi" (a hiki ke hoʻopau ʻia ma kahi hoʻokipa ʻē aʻe - ʻaʻole ma kāu, akā ma kahi kope, no ka laʻana), a laila ... Ua holoi ʻoe i ka papa buffer, kāu "Alter" ( a i ʻole kekahi mea hoʻokipa ʻē aʻe) ua pau ka manawa. a laila ua loaʻa kahi hewa "Alter") - pono ʻoe e hōʻoia i ka hoʻomau ʻia ʻana o ka ʻikepili: hana ʻoe i nā papa hoʻopaʻa hoʻi (e like me ka hoʻolālā like me ka papa makua), a laila "Hoʻololi" hele i loko, hoʻopau ma hope o nā mea a pau, a hoʻomaka ka pale ʻana i ka papaʻaina e ʻokoʻa i ka schema mai ka makua. Ma muli o ke ʻano o ka "Alter", ʻaʻole hiki ke hele hou ka mea hoʻokomo i kēia papa ʻaina - kaumaha loa kēia.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Aia kekahi hōʻailona like (ʻike paha kekahi) - ua kapa ʻia ʻo query_thread_log i nā mana hou o Clickhouse. Ma ka paʻamau, i kekahi mana aia kekahi. Ma ʻaneʻi ua hōʻiliʻili mākou i 840 miliona mau moʻolelo i loko o ʻelua mau mahina (100 gigabytes). ʻO kēia ke kumu i kākauʻia ai nā "hoʻokomo" ma laila (hiki paha i kēia manawa, ma ke ala,ʻaʻole i kākauʻia). E like me kaʻu i haʻi aku ai iā ʻoe, he liʻiliʻi kā mākou "hoʻokomo" - he nui nā "hoʻokomo" i loko o nā papa hoʻopaʻa. Ua maopopo ua pio kēia - ke haʻi aku nei au iā ʻoe i kaʻu mea i ʻike ai ma kā mākou kikowaena. No ke aha mai? He hoʻopaʻapaʻa ʻē aʻe kēia e kūʻē i ka hoʻohana ʻana i nā papa buffer! Kaumaha loa ʻo Spotty.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

ʻO wai ka mea i ʻike ʻo Spotty ka inoa o kēia kanaka? Hāpai nā lima o nā limahana VK. OK.

E pili ana i nā hoʻolālā no "KitttenHouse"

ʻAʻole kaʻana like nā hoʻolālā, ʻeā? ʻAʻole ʻoe e hoʻokō iā lākou a ʻaʻole maikaʻi loa i nā maka o nā poʻe ʻē aʻe. Akā, e lawe au i ka pilikia! Makemake mākou e hana i kēia: nā papa hoʻopaʻa, me he mea lā iaʻu, he koʻokoʻo mau a pono mākou e pale i ka hoʻokomo ʻana iā mākou iho. Akā ʻaʻole makemake mākou e hoʻopaʻa iā ia ma ka disk, no laila e pale mākou i ka hoʻokomo ʻana i ka hoʻomanaʻo.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

No laila, ke hana ʻia kahi "hoʻokomo", ʻaʻole ia e hui pū ʻia - e hana mua ia ma ke ʻano he papa ʻaina, e hoʻokomo i loko o ka papa makua (maikaʻi, i kekahi lā ma hope) a hōʻike ʻia ma kahi ala kaʻawale i hala nā mea hoʻokomo. ʻaʻole i loaʻa.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

No ke aha ʻaʻole hiki iaʻu ke haʻalele i ka hoʻokomo synchronous? ʻOi aku ka maʻalahi. ʻO ka ʻoiaʻiʻo inā ʻoe e hoʻokomo mai ka 10 tausani mau pūʻali, a laila maikaʻi nā mea āpau - e loaʻa iā ʻoe kahi mea liʻiliʻi mai kēlā me kēia host, hoʻokomo ʻoe ma laila i hoʻokahi manawa i ka kekona, maikaʻi nā mea āpau. Akā, makemake wau e hana kēia papahana, no ka laʻana, mai nā mīkini ʻelua, i hiki iā ʻoe ke hoʻoiho i ka wikiwiki kiʻekiʻe - ʻaʻole paha e loaʻa ka nui ma waho o Clickhouse, akā e kākau ma ka liʻiliʻi he 100 megabytes i kēlā me kēia kekona mai ka mīkini hoʻokahi ma o kahi koho hope - ʻO kēia ka hoʻohālikelike ʻana i ka nui a me ka liʻiliʻi, no laila ʻaʻole hiki iā mākou ke kali i hoʻokahi kekona no kēlā me kēia hoʻokomo ʻana, no laila pono ʻole ia. A ma ke ʻano like, pono e hele mai nā hōʻoia asynchronous ma hope o ka pau ʻana o ka hoʻokomo ʻana. E ʻike mākou inā ua hala a ʻaʻole paha.

ʻO ka mea koʻikoʻi, ʻo ia ma kēia papahana ʻike maopopo mākou inā ua hoʻokomo ʻia a ʻaʻole paha. E noʻonoʻo ʻoe i kēia kūlana: loaʻa iā ʻoe kahi papa hoʻopaʻa, kākau ʻoe i kekahi mea i loko, a laila, e ʻōlelo kākou, ua hele ka papa i ke ʻano heluhelu wale nō a hoʻāʻo e holoi i ka buffer. Ma hea e hele ai ka ʻikepili? E noho lākou i loko o ka pahu. Akā,ʻaʻole hiki iā mākou ke maopopo i kēia - pehea inā he hewa'ē aʻe, no ka mea,ʻaʻole e noho kaʻikepili i loko o ka pale ... (Addresses Alexey Milovidov, Yandex, ClickHouse developer) A iʻole e mau paha? mau? Hoʻomaopopoʻo Alexey iā mākou e maikaʻi nā mea a pau. ʻAʻohe o mākou kumu e manaʻoʻiʻo ʻole ai iā ia. Akā like nā mea a pau: inā ʻaʻole mākou e hoʻohana i nā papa buffer, a laila ʻaʻohe pilikia me lākou. ʻO ka hana ʻana i ʻelua mau papa he mea maʻalahi hoʻi, ʻoiai ma ke kumu ʻaʻohe pilikia nui. ʻO kēia ka papahana.

E kamaʻilio kākou no ka heluhelu ʻana

I kēia manawa e kamaʻilio kākou no ka heluhelu ʻana. Ua kākau pū mākou i kā mākou mea hana ponoʻī maanei. Me he mea lā, no ke aha e kākau ai i kāu mea kani ponoʻī ma ʻaneʻi?.. A ʻo wai ka mea hoʻohana iā Tabix? ʻAʻole liʻiliʻi ka poʻe i hāpai i ko lākou mau lima ... A ʻo wai ka mea ʻoluʻolu i ka hana a Tabix? ʻAe, ʻaʻole mākou hauʻoli me ia, a ʻaʻole kūpono loa ia no ka nānā ʻana i ka ʻikepili. Maikaʻi ia no ka analytics, akā no ka nānā wale ʻana ʻaʻole maopopo ka optimized. No laila ua kākau wau i kaʻu ponoʻī, koʻu ʻaoʻao ponoʻī.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

He mea maʻalahi loa - hiki iā ia ke heluhelu i ka ʻikepili. ʻAʻole ʻo ia ʻike pehea e hōʻike ai i nā kiʻi, ʻaʻole ʻo ia ʻike pehea e hana ai i kekahi mea. Akā hiki iā ia ke hōʻike i nā mea e pono ai mākou: no ka laʻana, ʻehia mau lālani i ka papaʻaina, pehea ka nui o ka nui o ka manawa (me ka ʻole o ka wāwahi ʻana i nā kolamu), ʻo ia hoʻi, kahi interface maʻamau ka mea e pono ai mākou.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

A ua like loa ia me Sequel Pro, akā i hana wale ʻia ma Twitter's Bootstrap, a me ka lua. Nīnau ʻoe: "Yuri, no ke aha ma ka lua?" ʻEhia makahiki? 2018? Ma keʻano laulā, ua hana wau i kēia manawa lōʻihi no ka "Muscle" (MySQL) a hoʻololi wale i nā laina ʻelua i nā nīnau ma laila, a hoʻomaka ʻo ia e hana no "Clickhouse", nona ka mahalo kūikawā! No ka mea, ua like loa ka parser me ka "muscle", a ua like loa nā nīnau - maʻalahi loa, ʻoi aku ka mua.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Hiki, hiki iā ia ke kānana i nā papa, hiki ke hōʻike i ke ʻano a me nā mea o ka papaʻaina, hiki iā ʻoe ke hoʻokaʻawale, kānana e nā kolamu, hōʻike i ka nīnau i hopena i ka hopena, nā lālani i hoʻopili ʻia (ehia ka hopena), ʻo ia hoʻi, ka nā mea maʻamau no ka nānā ʻana i ka ʻikepili. Nani wikiwiki.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Aia kekahi mea hoʻoponopono. Ua hoʻāʻo maoli wau e ʻaihue i ka mea hoʻoponopono holoʻokoʻa mai Tabix, akā ʻaʻole hiki iaʻu. Akā ma kekahi ʻano hana. Ma ke kumu, ʻo ia wale nō.

"Clickhouse" kūpono no nā lua

Makemake wau e haʻi iā ʻoe ʻo Clickhouse, ʻoiai nā pilikia āpau i wehewehe ʻia, ua kūpono loa ia no nā lāʻau. ʻO ka mea nui, hoʻoponopono ia i kā mākou pilikia - wikiwiki loa a hiki iā ʻoe ke kānana i nā lāʻau ma nā kolamu. Ma ke kumu, ʻaʻole i hana maikaʻi nā papa buffer, akā maʻamau ʻaʻohe mea i ʻike i ke kumu... Malia paha i kēia manawa ua ʻike ʻoe i kahi e loaʻa ai nā pilikia.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

TCP? Ma ka laulā, ma VK he mea maʻamau ka hoʻohana ʻana i ka UDP. A i koʻu hoʻohana ʻana iā TCP ... ʻOiaʻiʻo, ʻaʻohe mea i haʻi mai iaʻu: "Yuri, he aha kāu e kamaʻilio nei! ʻAʻole hiki iā ʻoe, pono ʻoe i ka UDP. Ua ʻike ʻia ʻaʻole weliweli loa ka TCP. ʻO ka mea wale nō, inā loaʻa iā ʻoe nā ʻumi kaukani o nā pūhui ikaika āu e kākau ai, pono ʻoe e hoʻomākaukau pono iā ia; akā hiki nō, a maʻalahi loa.

Ua hoʻohiki wau e kau i ka "Kittenhouse" a me "Lighthouse" ma HighLoad Siberia inā kākau nā mea a pau i kā mākou lehulehu "VK backend" ... A ʻike ʻoe, ʻaʻole i kākau inoa nā mea a pau ... ʻOiaʻiʻo, ʻaʻole wau e koi iā ʻoe e kākau inoa i kā mākou lehulehu. He nui loa ʻoukou, ʻeha paha kekahi, akā naʻe, e ʻoluʻolu e kākau inoa (a eia wau e hana i nā maka e like me ko ka pōpoki). ʻO ia loulou iā ia ma ke ala. Mahalo nui loa iā ʻoe! Na mākou ʻo Github Aia maanei. Me Clickhouse e palupalu a silky kou lauoho.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Ke alakaʻi: - E nā hoaaloha, i kēia manawa no nā nīnau. Ma hope koke iho o kā mākou hōʻike ʻana i ka palapala hoʻomaikaʻi a me kāu hōʻike ma VHS.

ʻO Yuri Nasretdinov (i kapa ʻia ma hope aku ʻo YN): - Pehea ʻoe i hiki ai ke hoʻopaʻa i kaʻu hōʻike ma VHS inā ua pau ia?

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Ke alakaʻi: - ʻAʻole hiki iā ʻoe ke hoʻoholo piha pehea e hana ai ʻo "Clickhouse" a ʻaʻole paha! E nā hoa, 5 minuke no nā nīnau!

ʻO kāu mau nīnau

Nīnau mai ka poʻe anaina (i kapa ʻia ʻo Q): - Aloha awakea, Aloha Auinalā. Mahalo nui iā ʻoe no ka hōʻike. ʻElua aʻu nīnau. E hoʻomaka wau me kahi mea liʻiliʻi: ʻo ka helu o nā leka t i ka inoa "Kittenhouse" ma nā kiʻi (3, 4, 7...) pili i ka ʻoluʻolu o nā pōpoki?

YN: - Ka nui o ke aha?

Z: – Palapala t. Aia ʻekolu mau t, ma kahi o ʻekolu mau t.

YN: - ʻAʻole wau i hoʻoponopono? ʻAe, ʻoiaʻiʻo nō! He mau huahana ʻokoʻa kēia - ua hoʻopunipuni wale wau iā ʻoe i kēia manawa a pau. ʻAe, hoʻohenehene wau - ʻaʻohe mea nui. ʻĀ, ma ʻaneʻi! ʻAʻole, ʻo ia ka mea like, ua hana wau i kahi typo.

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Z: - Mahalo iā ʻoe. He koʻikoʻi ka nīnau ʻelua. E like me kaʻu i hoʻomaopopo ai, ma Clickhouse, noho wale nā ​​papa buffer i ka hoʻomanaʻo, ʻaʻole i hoʻopaʻa ʻia i ka disk a, no laila, ʻaʻole hoʻomau.

YN: - ʻAe.

Z: - A i ka manawa like, hoʻopaʻa ʻia kāu mea kūʻai aku i ka disk, ʻo ia ka mea e hōʻoiaʻiʻo ai i ka lawe ʻana i kēia mau log like. Akā ʻaʻole kēia i hōʻoia ʻia ma Clickhouse. E wehewehe i ke ʻano o ka hoʻokō ʻia ʻana o ka hōʻoiaʻiʻo, ma muli o ke aha?.. Eia kēia ʻano hana i nā kikoʻī hou aku

YN: - ʻAe, ma ka manaʻo, ʻaʻohe kūʻē kūʻē ma aneʻi, no ka mea i ka wā e hāʻule ai ʻo Clickhouse, hiki iā ʻoe ke ʻike maoli iā ia ma kahi miliona mau ʻano like ʻole. Inā hāʻule ʻo Clickhouse (inā hewa ka hopena), hiki iā ʻoe ke hoʻihoʻi hou i kāu log i kākau ai a hoʻomaka mai ka manawa i maikaʻi loa nā mea a pau. E ʻōlelo kākou ua hoʻihoʻi hou ʻoe i hoʻokahi minute, ʻo ia hoʻi, manaʻo ʻia ua holoi ʻoe i nā mea a pau i hoʻokahi minuke.

Z: - ʻO ia hoʻi, paʻa ʻo "Kittenhouse" i ka puka makani a, inā hāʻule, hiki iā ia ke ʻike a hoʻihoʻi hou?

YN: - Akā, aia kēia ma ke kumumanaʻo. Ma ka hoʻomaʻamaʻa, ʻaʻole mākou e hana i kēia, a ʻo ka hāʻawi ʻana i hilinaʻi ʻia mai ka zero a hiki i nā manawa infinity. Akā ma ka awelika hoʻokahi. Ua māʻona mākou inā hāʻule ʻo Clickhouse no kekahi kumu a i ʻole nā ​​​​kauā "reboot," a laila nalowale mākou. Ma nā hihia ʻē aʻe, ʻaʻohe mea e hiki mai.

Z: - Aloha. Mai ka hoʻomaka ʻana ua manaʻo wau e hoʻohana ʻoe i ka UDP mai ka hoʻomaka ʻana o ka hōʻike. Loaʻa iā ʻoe ka http, nā mea a pau... A ʻo ka hapa nui o nā pilikia āu i wehewehe ai, e like me kaʻu i hoʻomaopopo ai, ua hoʻokumu ʻia e kēia hoʻonā kūikawā...

YN: - He aha kā mākou e hoʻohana ai iā TCP?

Z: - ʻAe maoli.

YN: - ʻAʻole.

Z: - ʻO ia me fasthttp i loaʻa iā ʻoe nā pilikia, me ka pili i loaʻa iā ʻoe nā pilikia. Inā ʻoe i hoʻohana wale i ka UDP inā ua mālama ʻoe iā ʻoe iho i kekahi manawa. ʻAe, aia nā pilikia me nā leka lōʻihi a i ʻole kekahi mea ʻē aʻe...

YN: - Me ke aha?

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Z: - Me nā leka lōʻihi, no ka mea ʻaʻole kūpono i ka MTU, kahi mea ʻē aʻe ... ʻAe, aia paha nā pilikia o lākou iho. ʻO ka nīnau: no ke aha ʻaʻole UDP?

YN: - Ke manaʻoʻiʻo nei au ua ʻoi aku ka naʻauao o nā mea kākau i hoʻomohala i ka TCP/IP ma mua oʻu a ʻoi aku ka ʻike ma mua oʻu pehea e hoʻonohonoho ai i nā ʻeke (e hele ai lākou), i ka manawa like e hoʻoponopono i ka puka makani hoʻouna, ʻaʻole e hoʻonui i ka pūnaewele, hāʻawi i nā manaʻo i ka mea. ʻaʻole i heluhelu ʻia, ʻaʻole helu ʻia ma kēlā ʻaoʻao ... ʻO kēia mau pilikia āpau, i koʻu manaʻo, aia ma UDP, ʻo wau wale nō ke kākau i nā code ʻoi aku ka nui ma mua o kaʻu i kākau mua ai i mea e hoʻokō ai i ka mea like iaʻu iho a ʻoi aku paha. ilihune. ʻAʻole wau makemake nui i ke kākau ʻana ma C, waiho wale ma laila...

Z: - He kūpono wale nō! Ua hoʻouna maikaʻi ʻia a ʻaʻole e kali i kekahi mea - ʻaʻohe asynchronous. Ua hoʻi mai kahi leka hoʻomaopopo ua maikaʻi nā mea a pau - ʻo ia hoʻi ua hiki mai; Inā ʻaʻole hiki mai, ʻo ia ka hewa.

YN: - Pono wau i nā mea ʻelua - pono wau e hoʻouna i nā mea ʻelua me ka hōʻoia o ka lawe ʻana a me ka ʻole o ka hōʻoia ʻana o ka lawe ʻana. ʻElua mau hiʻohiʻona like ʻole kēia. ʻAʻole pono wau e nalo i kekahi mau lāʻau a i ʻole e nalowale iā lākou ma ke kumu.

Z: - ʻAʻole au e hoʻopau manawa. Pono e kūkākūkā hou ʻia kēia. Mahalo iā ʻoe.

Ke alakaʻi: – ʻO wai nā nīnau – lima i ka lani!

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

Z: - Aloha, ʻo Sasha wau. Ma kahi o ka waena o ka hōʻike, ua ʻike ʻia kahi manaʻo, ma waho aʻe o TCP, hiki ke hoʻohana i kahi hopena i hoʻomākaukau ʻia - kekahi ʻano Kafka.

YN: - ʻAe ... Ua haʻi wau iā ʻoe ʻaʻole makemake wau e hoʻohana i nā kikowaena waena, no ka mea ... ma Kafka, ua ʻike ʻia he ʻumi tausani kā mākou; ʻoiaʻiʻo, ʻoi aku kā mākou - ʻumi tausani o nā pūʻali koa. He mea ʻeha hoʻi ke hana me Kafka me ka ʻole o nā proxies. Eia kekahi, ʻo ka mea nui loa, hāʻawi ia i ka "latency", hāʻawi ia i nā mea hoʻokipa hou e pono ai ʻoe. Akā ʻaʻole wau makemake e loaʻa iā lākou - makemake wau ...

Z: "Akā i ka hopena ua hoʻololi ʻia kēlā ala."

YN: - ʻAʻole, ʻaʻohe mea hoʻokipa! Ke hana nei kēia ma nā pūnaewele Clickhouse.

Z: - ʻAe, a me "Kittenhouse", ʻo ia ka hope - ma hea ʻo ia e noho ai?

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

YN: - Ma ka Clickhouse host, ʻaʻole ia e kākau i kekahi mea i ka disk.

Z: - E manao kakou.

Ke alakaʻi: – Ua māʻona anei ʻoe? Hiki iā mākou ke hāʻawi iā ʻoe i uku?

Z: - Ai, hiki iau. ʻO kaʻoiaʻiʻo, he nui nā koʻokoʻo i mea e loaʻa ai ka mea like, a i kēia manawa - kū'ē ka pane mua ma ke kumuhana o TCP, i koʻu manaʻo, i kēia kūlana. Me he mea lā ua hiki ke hana i nā mea a pau ma koʻu mau kuli i ka liʻiliʻi o ka manawa.

YN: - A no ke aha hoʻi ʻaʻole wau makemake e hoʻohana iā Kafka, no ka mea, ua nui nā hoʻopiʻi ma ka Clickhouse Telegram chat, no ka laʻana, ua nalowale nā ​​​​memo mai Kafka. ʻAʻole mai Kafka ponoʻī, akā i ka hoʻohui ʻana o Kafka a me Clickhaus; a i ʻole kekahi mea i pili ʻole ma laila. ʻO ka ʻōlelo maʻamau, pono e kākau i kahi mea kūʻai aku no Kafka ia manawa. Manaʻo wau ʻaʻole hiki ke loaʻa kahi hopena maʻalahi a hilinaʻi paha.

Z: - E haʻi mai iaʻu, no ke aha ʻoe i hoʻāʻo ʻole ai i nā pila a i ʻole kekahi ʻano kaʻa kaʻa maʻamau? No kou ʻōlelo ʻana me ka asynchrony hiki iā ʻoe ke hoʻouna i nā lāʻau iā lākou iho ma o ka pila a loaʻa ka pane asynchronously ma o ka pila?

HighLoad++, Yuri Nasretdinov (VKontakte): pehea e hoʻokomo ai ʻo VK i ka ʻikepili i ClickHouse mai nā ʻumi kaukani o nā kikowaena.

YN: – E ʻoluʻolu e hōʻike i nā pila e hoʻohana ʻia?

Z: - ʻO kēlā me kēia, ʻoiai me ka ʻole o ka hōʻoiaʻiʻo ʻana ua kūpono lākou. ʻO kekahi ʻano Redis, RMQ...

YN: - He manaʻo koʻu ʻaʻole hiki iā Redis ke huki i ka nui o ka hoʻokomo ʻana ma luna o hoʻokahi host (ma ke ʻano o kekahi mau kikowaena) e huki ana iā Clickhouse. ʻAʻole hiki iaʻu ke kākoʻo i kēia me nā hōʻike (ʻaʻole wau i hoʻohālikelike ʻia), akā ʻike wau ʻaʻole ʻo Redis ka hopena maikaʻi loa ma aneʻi. Ma ke kumu, hiki ke noʻonoʻo ʻia kēia ʻōnaehana ma ke ʻano he queue memo improvised, akā i hana ʻia no "Clickhouse" wale nō.

Ke alakaʻi: – Yuri, mahalo nui loa. Ke manaʻo nei au e hoʻopau i nā nīnau a me nā pane ma ʻaneʻi a ʻōlelo i ka mea o ka poʻe i nīnau i ka nīnau e hāʻawi mākou i ka puke.

YN: - Makemake wau e hāʻawi i puke i ka mea mua i nīnau i kahi nīnau.

Ke alakaʻi: - Kupaianaha! Nui! Kupaianaha! Mahalo nui loa!

Kekahi mau hoʻolaha 🙂

Mahalo no kou noho pū ʻana me mākou. Makemake ʻoe i kā mākou ʻatikala? Makemake ʻoe e ʻike i nā mea hoihoi hou aʻe? E kākoʻo iā mākou ma ke kau ʻana i kahi kauoha a i ʻole ka ʻōlelo ʻana i nā hoaaloha, cloud VPS no nā mea hoʻomohala mai $4.99, he analogue kū hoʻokahi o nā kikowaena hoʻokomo-level, i hana ʻia e mākou no ʻoe: ʻO ka ʻoiaʻiʻo holoʻokoʻa e pili ana iā VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps mai $ 19 a pehea e kaʻana like ai i kahi kikowaena? (loaʻa me RAID1 a me RAID10, a hiki i 24 cores a hiki i 40GB DDR4).

ʻO Dell R730xd 2 mau manawa maʻalahi ma Equinix Tier IV kikowaena data ma Amsterdam? Eia wale nō 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV mai $199 ma Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mai $99! Heluhelu e pili ana Pehea e kūkulu ai i ka ʻoihana ʻoihana. papa me ka hoʻohana 'ana o Dell R730xd E5-2650 v4 kikowaena waiwai 9000 euros no ka peni?

Source: www.habr.com

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