ClickHouse + Graphite: pehea e hōʻemi nui ai i ka hoʻohana ʻana i kahi disk

ClickHouse + Graphite: pehea e hōʻemi nui ai i ka hoʻohana ʻana i kahi disk

Aloha mai, habr.

Inā hoʻohana kekahi i ka ʻōnaehana graphite-pūnaewele a ua loaʻa iā ia kahi pilikia hana mālama hāwanawana (IO, hoʻopau ʻia ka hakahaka disk), a laila ʻo ka manawa i hoʻolei ʻia ʻo ClickHouse ma ke ʻano he pani e pono ai i hoʻokahi. Hōʻike kēia ʻōlelo ua hoʻohana ʻia kahi hoʻokō ʻaoʻao ʻekolu ma ke ʻano he daemon e loaʻa ana i nā metric, no ka laʻana. mea kākau kalapona ai ole ia, hele-carbon.

Hoʻoponopono maikaʻi ʻo ClickHouse i nā pilikia i wehewehe ʻia. No ka laʻana, ma hope o ka hoʻoili ʻana i 2TiB o ka ʻikepili mai ka hāwanawana, kūpono lākou i 300GiB. ʻAʻole wau e noʻonoʻo i ka hoʻohālikelike i nā kikoʻī; nui nā ʻatikala e pili ana i kēia kumuhana. Eia hou, a hiki i kēia manawa,ʻaʻole i kūpono nā mea a pau me kā mākou ClickHouse waihona.

Nā pilikia me ka nui o ka wahi

I ka nānā muaʻana, pono e hana maikaʻi nā mea a pau. Ke hahai nei palapala, e hana i kahi hoʻonohonoho no ka hoʻolālā waihona metric (ʻoi aku retention), a laila e hana i papa e like me ka ʻōlelo aʻoaʻo o ka hope i koho ʻia no ka graphite-web: hale kaomi kalapona+graphite-clickhouse ai ole ia, hale kiʻi kiʻi, e pili ana i ka hoʻopaʻa ʻana i hoʻohana ʻia. A... hele ka pōkā manawa.

I mea e hoʻomaopopo ai i ka mea, pono ʻoe e ʻike pehea e hana ai nā mea hoʻokomo a me ke ala ola hou o ka ʻikepili i nā papa o nā mīkini o ka ʻohana *MergeTree ClickHouse (nā palapala i lawe ʻia mai презентации Alexey Zatelepin):

  • Hoʻokomo ʻia блок ʻikepili. I kā mākou hihia, ʻo ia nā metric i hiki mai.
    ClickHouse + Graphite: pehea e hōʻemi nui ai i ka hoʻohana ʻana i kahi disk
  • Hoʻokaʻawale ʻia kēlā me kēia poloka e like me ke kī ma mua o ka kākau ʻana i ka disk. ORDER BYi kuhikuhi ʻia i ka hana ʻana i ka papaʻaina.
  • Ma hope o ka hoʻokaʻawale ʻana, кусок (part) ua kākau ʻia ka ʻikepili i ka disk.
    ClickHouse + Graphite: pehea e hōʻemi nui ai i ka hoʻohana ʻana i kahi disk
  • Mālama ke kikowaena i ke kua i ʻole he nui o ia mau ʻāpana, a hoʻomaka i ka hope слияния (merge, hoʻohui ʻia ma kēia hope aku).
    ClickHouse + Graphite: pehea e hōʻemi nui ai i ka hoʻohana ʻana i kahi disk
    ClickHouse + Graphite: pehea e hōʻemi nui ai i ka hoʻohana ʻana i kahi disk
  • Ho'ōki ka server i ka holo ʻana i ka hui ʻana iā ia iho ke pau ka ʻikepili i ka kahe ikaika ʻana i ka партицию (partition), akā hiki iā ʻoe ke hoʻomaka i ke kaʻina hana me ke kauoha OPTIMIZE.
  • Inā hoʻokahi wale nō ʻāpana i koe i ka pā, a laila ʻaʻole hiki iā ʻoe ke holo i ka hui me ka hoʻohana ʻana i ke kauoha maʻamau; pono ʻoe e hoʻohana. OPTIMIZE ... FINAL

No laila, hiki mai nā metric mua. A lawe lākou i kahi wahi. Hiki i nā hanana hope ke ʻano like ʻole ma muli o nā kumu he nui:

  • Hiki ke liʻiliʻi loa ke kī hoʻokaʻawale (he lā) a i ʻole ka nui loa (he mau mahina).
  • Hiki ke hoʻopili ʻia ka hoʻonohonoho hoʻopaʻa ʻana i kekahi mau paepae hōʻuluʻulu ʻikepili koʻikoʻi i loko o ka ʻāpana hana (kahi i hoʻopaʻa ʻia nā ana), a ʻaʻole paha.
  • Inā nui ka ʻikepili, a laila ʻoi aku ka nui o nā puʻupuʻu mua loa, ma muli o ka hoʻohui ʻana i hope (inā ʻoe e koho i kahi kī hoʻokaʻawale kūpono ʻole), ʻaʻole e hoʻohui iā lākou iho me nā ʻāpana liʻiliʻi hou.

A like ka hopena mau. Hoʻonui wale ʻia ka wahi i noho ʻia e nā metric ma ClickHouse inā:

  • mai noi OPTIMIZE ... FINAL ma ka lima a i ʻole
  • mai hoʻokomo i ka ʻikepili i loko o nā ʻāpana āpau i ka manawa mau, i mea e hoʻomaka ai kahi hui hope

ʻO ke ala ʻelua ka mea maʻalahi loa e hoʻokō a no laila, ʻaʻole pololei a hoʻāʻo mua ʻia.
Ua kākau wau i kahi palapala python maʻalahi i hoʻouna i nā metric dummy no kēlā me kēia lā no nā makahiki 4 i hala iho nei a holo cron i kēlā me kēia hola.
No ka mea, ua hoʻokumu ʻia ka hana holoʻokoʻa o ClickHouse DBMS ma ka ʻoiaʻiʻo e hana koke kēia ʻōnaehana i nā hana hope a pau, akā ʻaʻole ʻike ʻia i ka manawa, ʻaʻole hiki iaʻu ke kali no ka manawa e hoʻomaka ai nā ʻāpana nui kahiko e hoʻomaka e hui pū me. nā mea liʻiliʻi hou. Ua ʻike ʻia he pono mākou e ʻimi i kahi ala e hoʻomaʻamaʻa ai i ka hoʻoikaika ʻana.

ClickHouse + Graphite: pehea e hōʻemi nui ai i ka hoʻohana ʻana i kahi disk

ʻIke ma nā papa ʻōnaehana ClickHouse

E nānā kākou i ke ʻano o ka papaʻaina ʻōnaehana.mau ʻāpana. He ʻike piha kēia e pili ana i kēlā me kēia ʻāpana o nā papa āpau ma ka server ClickHouse. Aia nā kolamu ma waena o nā mea ʻē aʻe:

  • db inoa (database);
  • inoa papa (table);
  • inoa ʻāpana a me ID (partition & partition_id);
  • i ka wā i hana ʻia ai ka ʻāpana (modification_time);
  • ka lā palena iki a me ka lā kiʻekiʻe loa ma kahi ʻāpana (hana ʻia ka hoʻokaʻawale ʻana i ka lā) (min_date & max_date);

Aia kekahi papaʻaina system.graphite_retentions, me kēia mau kahua hoihoi:

  • db inoa (Tables.database);
  • inoa papa (Tables.table);
  • makahiki metric ke hoʻohana ʻia ka hōʻuluʻulu aʻe (age);

No laila:

  1. Loaʻa iā mākou kahi papa o nā ʻāpana a me kahi papa o nā lula hoʻohui.
  2. Hoʻohui mākou i kā lākou intersection a loaʻa nā papa ʻaina a pau *GraphiteMergeTree.
  3. Ke ʻimi nei mākou i nā ʻāpana āpau kahi:
    • ʻoi aku ma mua o hoʻokahi ʻāpana
    • a i ʻole ua hiki mai ka manawa e hoʻopili ai i ka lula hōʻuluʻulu aʻe, a modification_time oi aku mamua o keia manawa.

Ka hoʻokō

ʻO kēia noi

SELECT
    concat(p.database, '.', p.table) AS table,
    p.partition_id AS partition_id,
    p.partition AS partition,
    -- Самое "старое" правило, которое может быть применено для
    -- партиции, но не в будущем, см (*)
    max(g.age) AS age,
    -- Количество кусков в партиции
    countDistinct(p.name) AS parts,
    -- За самую старшую метрику в партиции принимается 00:00:00 следующего дня
    toDateTime(max(p.max_date + 1)) AS max_time,
    -- Когда партиция должна быть оптимизированна
    max_time + age AS rollup_time,
    -- Когда самый старый кусок в партиции был обновлён
    min(p.modification_time) AS modified_at
FROM system.parts AS p
INNER JOIN
(
    -- Все правила для всех таблиц *GraphiteMergeTree
    SELECT
        Tables.database AS database,
        Tables.table AS table,
        age
    FROM system.graphite_retentions
    ARRAY JOIN Tables
    GROUP BY
        database,
        table,
        age
) AS g ON
    (p.table = g.table)
    AND (p.database = g.database)
WHERE
    -- Только активные куски
    p.active
    -- (*) И только строки, где правила аггрегации уже должны быть применены
    AND ((toDateTime(p.max_date + 1) + g.age) < now())
GROUP BY
    table,
    partition
HAVING
    -- Только партиции, которые младше момента оптимизации
    (modified_at < rollup_time)
    -- Или с несколькими кусками
    OR (parts > 1)
ORDER BY
    table ASC,
    partition ASC,
    age ASC

hoʻihoʻi i kēlā me kēia o nā ʻāpana pākaukau *GraphiteMergeTree nona ka hui ʻana e hoʻokuʻu i ka hakahaka disk. ʻO ka mea wale nō i koe e hana ai, ʻo ia ke hele ma waena o lākou a pau me kahi noi OPTIMIZE ... FINAL. ʻO ka hoʻokō hope loa e noʻonoʻo i ka ʻoiaʻiʻo ʻaʻole pono e hoʻopā i nā ʻāpana me ka hoʻopaʻa hoʻopaʻa ʻana.

ʻO kēia ka hana a ka papahana graphite-ch-optimizer. Ua ho'āʻo nā hoa hana mua mai Yandex.Market i ka hanaʻana, hiki keʻikeʻia ka hopena o ka hana ma lalo nei.

ClickHouse + Graphite: pehea e hōʻemi nui ai i ka hoʻohana ʻana i kahi disk

Inā holo ʻoe i ka papahana ma kahi kikowaena me ClickHouse, e hoʻomaka wale ia e hana ma ke ʻano daemon. Hoʻokahi hola e hoʻokō ʻia kahi noi, e nānā inā ua ʻike ʻia nā ʻāpana hou i ʻoi aku ma mua o ʻekolu mau lā i hiki ke hoʻonui ʻia.

ʻO kā mākou hoʻolālā koke e hāʻawi i nā pūʻolo deb liʻiliʻi, a inā hiki ke hiki pū kekahi rpm.

Ma kahi o ka hopena

I nā mahina he 9+ i hala iho nei, ua komo au i loko o kaʻu hui inogames ua hoʻohana nui i ka manawa tinkering ma ke kikowaena o ClickHouse a me ka graphite-web. He ʻike maikaʻi ia, i hopena i ka hoʻololi wikiwiki ʻana mai ka hāwanawana i ClickHouse ma ke ʻano he waihona metric. Manaʻo wau ʻo kēia ʻatikala kahi mea o ka hoʻomaka ʻana o kahi moʻo e pili ana i nā hoʻomaikaʻi a mākou i hana ai i nā ʻāpana like ʻole o kēia pūʻulu, a me nā mea e hana ʻia i ka wā e hiki mai ana.

Ua hoʻohana ʻia kekahi mau lita o ka pia a me nā lā admin no ka hoʻomohala ʻana i ka noi, me v0 diabolo, no ka mea, makemake au e hoike aku i ko'u mahalo iaia. A no ka nānā ʻana i kēia ʻatikala.

ʻaoʻao papahana ma github

Source: www.habr.com

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