ClickHouse + Graphite: ka esi belata oriri ohere diski nke ọma

ClickHouse + Graphite: ka esi belata oriri ohere diski nke ọma

Ekele, habr.

Ọ bụrụ na onye ọ bụla na-eji usoro graphite-web wee zute nsogbu arụmọrụ nchekwa nwuo (IO, ohere diski riri), mgbe ahụ ohere nke a tụrụ ClickHouse dị ka onye nnọchi kwesịrị ịdị otu. Nkwupụta a na-egosi na ejirila mmejuputa ndị ọzọ dị ka daemon na-anata metrik, dịka ọmụmaatụ carbonwriter ma ọ bụ ga-carbon.

ClickHouse na-edozi nsogbu ndị akọwara nke ọma. Dịka ọmụmaatụ, mgbe ebufechara 2TiB data site na ntanye, ha dabara na 300GiB. Agaghị m etinye aka na ntụnyere n'uju; enwere ọtụtụ akụkọ gbasara isiokwu a. Na mgbakwunye, ruo n'oge na-adịbeghị anya, ọ bụghị ihe niile zuru oke na ebe nchekwa ClickHouse anyị.

Nsogbu na ohere eripịara

Na nlele mbụ, ihe niile kwesịrị ịrụ ọrụ nke ọma. Na-eso akwụkwọ, mepụta nhazi maka atụmatụ nchekwa metrics (ọkwa retention), wee mepụta tebụl dị ka nkwenye nke azụ azụ ahọpụtara maka graphite-web: carbon-click ụlọ+graphite-clickhouse ma ọ bụ ụlọ akwụkwọ, dabere na nke a ga-eji tojupụtara. Na ... oge bombu na-aga.

Iji ghọta nke ahụ, ịkwesịrị ịma ka ntinye si arụ ọrụ na ụzọ ndụ data ọzọ na tebụl nke injinia * ezinụlọ.MergeTree ClickHouse (mmadụ ewepụtara na ihe ngosi Alexey Zatelepin):

  • Etinyere блок data. N'ọnọdụ anyị, ọ bụ metrik bịarutere.
    ClickHouse + Graphite: ka esi belata oriri ohere diski nke ọma
  • A na-ahazi ngọngọ dị otú ahụ ọ bụla dịka igodo siri dị tupu edee ya na diski. ORDER BYakọwapụtara mgbe ị na-eke tebụl.
  • Mgbe hachara, кусок (part) Edere data na diski.
    ClickHouse + Graphite: ka esi belata oriri ohere diski nke ọma
  • Ihe nkesa ahụ na-enyocha n'azụ ka ọ ghara inwe ọtụtụ ụdị dị otú ahụ, wee malite ndabere слияния (merge, ugbu a jikọrọ).
    ClickHouse + Graphite: ka esi belata oriri ohere diski nke ọma
    ClickHouse + Graphite: ka esi belata oriri ohere diski nke ọma
  • Ihe nkesa na-akwụsị ịgbakọ ọnụ n'onwe ya ozugbo data kwụsịrị ịbanye na ya партицию (partition), ma ị nwere ike iji aka gị malite usoro ahụ OPTIMIZE.
  • Ọ bụrụ na ọ bụ naanị otu akụkụ fọdụrụ na nkebi ahụ, ị ​​gaghị enwe ike iji iwu a na-emebu mee njikọ ahụ; OPTIMIZE ... FINAL

Yabụ, metrik nke mbụ rutere. Ha wegharakwa ohere. Ihe ndị na-esote nwere ike ịdịgasị iche dabere n'ọtụtụ ihe:

  • Igodo nkewa nwere ike ịbụ obere (otu ụbọchị) ma ọ bụ buru ibu (ọtụtụ ọnwa).
  • Nhazi njide ahụ nwere ike dabara ọtụtụ ọnụ ụzọ nchịkọta data dị mkpa n'ime nkebi nọ n'ọrụ (ebe edere metrik), ma ọ bụ ikekwe ọ bụghị.
  • Ọ bụrụ na e nwere ọtụtụ data, mgbe mbụ chunks, nke n'ihi ndabere merging nwere ike ugbua ibu (ọ bụrụ na ị na-ahọrọ a na-abụghị ezigbo partitioning igodo), agaghị jikota onwe ha na ọhụrụ obere chunks.

Ọ na-agwụkwa otu ihe mgbe niile. Oghere nke metrik ji na ClickHouse na-abawanye naanị ma ọ bụrụ:

  • etinyela akwụkwọ OPTIMIZE ... FINAL aka ma ọ bụ
  • etinyela data n'ime akụkụ niile na-aga n'ihu, ka n'oge na-adịghị anya, njikọta ndabere ga-amalite

Usoro nke abụọ yiri ka ọ kachasị mfe iji mejuputa ya, ya mere, ọ ezighi ezi ma nwalere ya na mbụ.
Edere m edemede Python dị mfe nke na-eziga metrics dummy kwa ụbọchị maka afọ 4 gara aga wee na-agba cron kwa elekere.
Ebe ọ bụ na ọrụ niile nke ClickHouse DBMS dabeere na eziokwu na usoro a ga-eme elu mee ma ọ bụ mgbe e mesịrị na-eme niile ndabere ọrụ, ma ọ na-amaghị mgbe, M na-enweghị ike ichere maka oge mgbe ochie nnukwu iberibe deign na-amalite merging na. ndị ọhụrụ ọhụrụ. Ọ bịara doo anya na ọ dị anyị mkpa ịchọ ụzọ anyị ga-esi rụọ ọrụ mmanye mmanye.

ClickHouse + Graphite: ka esi belata oriri ohere diski nke ọma

Ozi dị na tebụl usoro ClickHouse

Ka anyị leba anya na nhazi nke tebụl usoro.akụkụ. Nke a bụ ozi zuru oke gbasara mpempe tebụl ọ bụla na sava ClickHouse. Nwere, n'etiti ihe ndị ọzọ, kọlụm ndị a:

  • db aha (database);
  • aha tebụl (table);
  • aha nkebi na ID (partition & partition_id);
  • mgbe emechara mpempe akwụkwọ ahụ (modification_time);
  • Opekempe na ụbọchị kachasị na ibe (a na-eme nkewa kwa ụbọchị)min_date & max_date);

E nwekwara tebụl usoro.graphite_retentions, ya na ubi ndị a na-atọ ụtọ:

  • db aha (Tables.database);
  • aha tebụl (Tables.table);
  • metric afọ mgbe a ga-etinye nchịkọta na-esote (age);

Ya mere:

  1. Anyị nwere tebụl nke chunks na tebụl nke iwu nchịkọta.
  2. Anyị na-ejikọta ọnụ ụzọ ha wee nweta tebụl * GraphiteMergeTree.
  3. Anyị na-achọ akụkụ niile nke:
    • ihe karịrị otu ibe
    • ma ọ bụ oge eruola itinye iwu nchịkọta na-esote, na modification_time tọrọ karịa oge a.

Mmejuputa iwu

Arịrịọ a

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

weghachi nke ọ bụla n'ime akụkụ tebụl * GraphiteMergeTree nke ijikọ ha kwesịrị ịtọhapụ oghere diski. Naanị ihe ga-eme bụ ịgafe ha niile na arịrịọ OPTIMIZE ... FINAL. Mmezu ikpeazụ ahụ na-eburukwa n'uche eziokwu ahụ bụ na ọ dịghị mkpa imetụ akụkụ na ndekọ na-arụ ọrụ aka.

Nke a bụ kpọmkwem ihe ọrụ ahụ na-eme graphite-ch-optimizer. Ndị ọrụ ibe mbụ sitere na Yandex.Market gbalịrị ya na mmepụta, a pụrụ ịhụ nsonaazụ nke ọrụ n'okpuru.

ClickHouse + Graphite: ka esi belata oriri ohere diski nke ọma

Ọ bụrụ na ị na-eji ClickHouse na-eme mmemme ahụ na sava, ọ ga-amalite ịrụ ọrụ na ọnọdụ daemon. Otu oge n'otu elekere, a ga-eme ajụjụ, na-elele ma akụkụ ọhụrụ karịrị ụbọchị atọ apụtala nke enwere ike ịhazi ya.

Atụmatụ anyị ozugbo bụ ịnye opekata mpe ngwugwu ụgwọ, ma ọ bụrụ na ọ ga-ekwe omume kwa rpm.

Kama nkwubi okwu

N'ime ọnwa 9+ gara aga, anọ m n'ime ụlọ ọrụ m Egwuregwu Inno jiri oge dị ukwuu na-atụgharị n'ọnụ ụzọ ClickHouse na graphite-web. Ọ bụ ahụmịhe dị mma, nke butere mgbanwe ngwa ngwa site na ntanye ntanye gaa na ClickHouse dị ka ebe nchekwa metrik. Enwere m olileanya na isiokwu a bụ ihe mmalite nke usoro banyere ihe ndozi anyị mebere n'akụkụ dị iche iche nke nchịkọta a, yana ihe a ga-eme n'ọdịnihu.

A nọrọ ọtụtụ lita biya na ụbọchị nchịkwa iji mepụta arịrịọ ahụ, yana v0 ekwensu, nke m chọrọ igosipụta ekele m n'ebe ọ nọ. Na kwa maka inyocha edemede a.

Ibe oru ngo na github

isi: www.habr.com

Zụta nnabata ntụkwasị obi maka saịtị nwere nchekwa DDoS, sava VPS VDS 🔥 Zụta ebe nrụọrụ weebụ a pụrụ ịtụkwasị obi na nchekwa DDoS, sava VPS VDS | ProHoster