ClickHouse + Graphite: kumaha sacara signifikan ngirangan konsumsi rohangan disk

ClickHouse + Graphite: kumaha sacara signifikan ngirangan konsumsi rohangan disk

Salam, habr.

Lamun batur exploits sistem grafit-web sarta encountered masalah kinerja gudang ngorong (IO, spasi disk dihakan), lajeng kasempetan nu ClickHouse ieu tuang salaku ngagantian kedah condong hiji. Pernyataan ieu nunjukkeun yén palaksanaan pihak katilu parantos dianggo salaku métrik anu nampi daemon, contona. panulis karbon atawa go-karbon.

ClickHouse ngabéréskeun masalah anu dijelaskeun ogé. Contona, sanggeus mindahkeun 2TiB data tina harewos, aranjeunna cocog kana 300GiB. Kuring moal cicing dina ngabandingkeun sacara rinci; aya seueur tulisan ngeunaan topik ieu. Salaku tambahan, dugi ka ayeuna, henteu sadayana sampurna sareng panyimpenan ClickHouse kami.

Masalah sareng rohangan anu dikonsumsi

Dina glance kahiji, sagalana kedah dianggo ogé. Nurutan dokuméntasi, jieun konfigurasi pikeun skéma panyimpen métrik (salajengna retention), teras jieun tabel dumasar kana rekomendasi backend anu dipilih pikeun grafit-web: karbon-clickhouse+grafit-clickhouse atawa grahouse, gumantung kana tumpukan nu dipaké. Jeung... bom waktu pareum.

Pikeun ngartos anu mana, anjeun kedah terang kumaha sisipan jalan sareng jalur kahirupan salajengna data dina tabel mesin kulawarga *MergeTree ClickHouse (bagan dicokot tina presentasi Alexey Zatelepin):

  • diselapkeun блок data. Dina kasus urang, éta métrik anu sumping.
    ClickHouse + Graphite: kumaha sacara signifikan ngirangan konsumsi rohangan disk
  • Unggal blok sapertos diurutkeun dumasar kana konci sateuacan ditulis kana disk. ORDER BYdieusian nalika nyieun tabél.
  • Sanggeus diurutkeun, кусок (part) data ditulis kana disk.
    ClickHouse + Graphite: kumaha sacara signifikan ngirangan konsumsi rohangan disk
  • Server ngawas di latar tukang supados henteu seueur potongan sapertos kitu, sareng ngaluncurkeun latar слияния (merge, saterusna ngahiji).
    ClickHouse + Graphite: kumaha sacara signifikan ngirangan konsumsi rohangan disk
    ClickHouse + Graphite: kumaha sacara signifikan ngirangan konsumsi rohangan disk
  • Server eureun ngajalankeun merges sorangan pas data eureun aktip ngalir kana партицию (partition), tapi anjeun tiasa ngamimitian prosés sacara manual ku paréntah OPTIMIZE.
  • Upami ngan ukur aya sapotong anu tinggaleun dina partisi, maka anjeun moal tiasa ngajalankeun gabungan nganggo paréntah biasa; anjeun kedah nganggo OPTIMIZE ... FINAL

Janten, métrik munggaran sumping. Sareng aranjeunna nyandak sababaraha rohangan. Kajadian saterusna bisa rupa-rupa gumantung kana sababaraha faktor:

  • Konci partisi tiasa alit pisan (sadinten) atanapi ageung pisan (sababaraha bulan).
  • Konfigurasi ingetan tiasa nyocogkeun sababaraha ambang agrégasi data anu penting dina partisi aktip (tempat métrik dirékam), atanapi panginten henteu.
  • Upami aya seueur data, maka sakumpulan pangheubeulna, anu kusabab latar tukang ngahiji tiasa ageung (upami anjeun milih konci partisi anu henteu optimal), moal ngahijikeun diri sareng sakumpulan leutik seger.

Sarta eta salawasna ends sarua. Ruang anu dijajah ku métrik di ClickHouse ngan ukur ningkat upami:

  • teu nerapkeun OPTIMIZE ... FINAL sacara manual atawa
  • ulah nyelapkeun data kana sagala partitions on hiji basis lumangsung, ku kituna sooner atanapi engké ngahiji latar bakal dimimitian

Metodeu kadua sigana anu panggampangna pikeun dilaksanakeun sareng, ku kituna, éta lepat sareng dicoba heula.
Kuring nulis skrip python anu cukup saderhana anu ngirim métrik dummy pikeun unggal dinten salami 4 taun ka pengker sareng ngajalankeun cron unggal jam.
Kusabab sakabéh operasi ClickHouse DBMS ieu dumasar kana kanyataan yén sistem ieu sooner atanapi engké bakal ngalakukeun sagala pagawean tukang, tapi teu dipikawanoh nalika, Kuring éta teu bisa ngadagoan momen nalika potongan badag heubeul deign pikeun ngamimitian merging kalawan. anyar leutik. Janten jelas yén urang kedah milarian cara pikeun ngajadikeun otomatis optimasi paksa.

ClickHouse + Graphite: kumaha sacara signifikan ngirangan konsumsi rohangan disk

Émbaran dina tabel sistem ClickHouse

Hayu urang nempo struktur tabel sistem.bagian. Ieu informasi komprehensif ngeunaan unggal sapotong sadaya tabel dina server ClickHouse. Ngandung, antara séjén, kolom handap:

  • ngaran db (database);
  • ngaran tabel (table);
  • nami partisi sareng ID (partition & partition_id);
  • nalika potongan diciptakeun (modification_time);
  • tanggal minimum jeung maksimum dina sapotong (partisi dipigawé ku poé) (min_date & max_date);

Aya ogé méja system.graphite_retentions, kalayan widang anu pikaresepeun ieu:

  • ngaran db (Tables.database);
  • ngaran tabel (Tables.table);
  • umur métrik nalika aggregation salajengna kedah diterapkeun (age);

jadi:

  1. Simkuring gaduh tabel sakumpulan sarta tabel aturan aggregation.
  2. Urang ngagabungkeun simpang maranéhanana sarta meunang sagala tabel *GraphiteMergeTree.
  3. Kami milarian sadaya partisi dimana:
    • leuwih ti hiji sapotong
    • atawa waktu geus datangna pikeun nerapkeun aturan aggregation salajengna, jeung modification_time heubeul ti moment ieu.

Реализация

pamundut ieu

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

mulih unggal *GraphiteMergeTree partisi tabel nu merging kudu ngosongkeun spasi disk. Hiji-hijina hal anu kedah dilakukeun nyaéta ngaliwat sadayana kalayan pamenta OPTIMIZE ... FINAL. Palaksanaan ahir ogé tumut kana akun kanyataan yén teu kudu noél partisi jeung rekaman aktip.

Ieu persis naon proyek teu grafit-ch-optimizer. Urut kolega ti Yandex.Market diusahakeun eta dina produksi, hasil karya bisa ditempo di handap ieu.

ClickHouse + Graphite: kumaha sacara signifikan ngirangan konsumsi rohangan disk

Upami anjeun ngajalankeun program dina server sareng ClickHouse, éta ngan saukur bakal ngamimitian damel dina modeu daemon. Sakali sajam hiji pamundut bakal dieksekusi, mariksa naha partitions anyar heubeul leuwih tilu poé geus mucunghul nu bisa dioptimalkeun.

Rencana langsung kami nyayogikeun sahenteuna pakét deb, sareng upami mungkin ogé rpm.

Gantina kacindekan

Sapanjang 9+ sasih kuring parantos aya di perusahaan kuring innogames spent loba waktu tinkering di simpang ClickHouse jeung grafit-web. Ieu pangalaman alus, nu nyababkeun transisi gancang ti harewos ka ClickHouse salaku gudang métrik. Kuring miharep artikel ieu mangrupa awal runtuyan ngeunaan naon perbaikan kami geus dijieun pikeun sagala rupa bagian tina tumpukan ieu, sarta naon anu bakal dilakukeun dina mangsa nu bakal datang.

Sababaraha liter bir jeung admin dinten ieu spent dina ngamekarkeun pamundut, bareng jeung v0 setan, pikeun anu kuring hoyong ngucapkeun sukur ka anjeunna. Sarta ogé pikeun reviewing artikel ieu.

Kaca proyék dina github

sumber: www.habr.com

Tambahkeun komentar