ClickHouse + Graphite: ny fomba hampihenana ny fanjifana habaka kapila

ClickHouse + Graphite: ny fomba hampihenana ny fanjifana habaka kapila

Miarahaba, habr.

Raha misy manararaotra ny rafitra graphite-web ary nisedra olana momba ny fitehirizana bitsika (IO, lany ny habaka kapila), avy eo dia tokony ho iray ny vintana izay navoakan'ny ClickHouse ho fanoloana. Ity fanambarana ity dia midika fa ny fampiharana antoko fahatelo dia efa ampiasaina ho daemon mandray metrika, ohatra. carbonwriter na mandeha-carbon.

ClickHouse dia mamaha tsara ireo olana voalaza. Ohatra, aorian'ny famindrana angon-drakitra 2TiB avy amin'ny bitsibitsika dia miditra amin'ny 300GiB izy ireo. Tsy hiresaka amin'ny antsipiriany momba ny fampitahana aho; be dia be ny lahatsoratra momba ity lohahevitra ity. Ankoatra izany, hatramin'ny vao haingana, tsy ny zava-drehetra no tonga lafatra tamin'ny fitahirizana ClickHouse.

Olana amin'ny toerana laniny

Raha vao jerena dia tokony hiasa tsara ny zava-drehetra. FANARAHANA tahirin-kevitra, mamorona config ho an'ny rafitra fitahirizana metrika (manaraka retention), dia mamorona latabatra araka ny tolo-kevitry ny backend voafantina ho an'ny graphite-web: carbon-clickhouse+graphite-clickhouse na graphhouse, miankina amin'ny stack ampiasaina. Ary... mandeha ny baomba fotoana.

Mba hahatakarana hoe iza no tokony ho fantatrao ny fomba fiasan'ny insert sy ny lalan'ny fiainana bebe kokoa amin'ny angon-drakitra ao amin'ny latabatra motera an'ny fianakaviana *MergeTree ClickHouse (sary nalaina avy amin'ny ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Alexey Zatelepin):

  • nampidirina Π±Π»ΠΎΠΊ data. Raha ny anay, dia ny metrika no tonga.
    ClickHouse + Graphite: ny fomba hampihenana ny fanjifana habaka kapila
  • Ny bloc tsirairay dia alaina araka ny lakile alohan'ny hanoratana azy amin'ny kapila. ORDER BYvoatondro rehefa mamorona ny latabatra.
  • Aorian'ny filaharana, кусок (part) ny angona dia voasoratra ao anaty kapila.
    ClickHouse + Graphite: ny fomba hampihenana ny fanjifana habaka kapila
  • Ny mpizara dia manara-maso ao ambadika mba tsy hisy ampahany toy izany, ary manomboka ny background слияния (merge, mitambatra avy eo).
    ClickHouse + Graphite: ny fomba hampihenana ny fanjifana habaka kapila
    ClickHouse + Graphite: ny fomba hampihenana ny fanjifana habaka kapila
  • Mijanona ho azy ny mpizara raha vao mitsahatra mikoriana ao amin'ny ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ (partition), fa azonao atao ny manomboka ny dingana amin'ny alΓ lan'ny baiko OPTIMIZE.
  • Raha misy ampahany iray sisa tavela ao amin'ny fizarazarana, dia tsy ho afaka hampandeha ny fampiraisana ianao amin'ny alΓ lan'ny baiko mahazatra; tsy maintsy mampiasa OPTIMIZE ... FINAL

Noho izany, tonga ny metrika voalohany. Ary maka toerana kely izy ireo. Ny hetsika manaraka dia mety miovaova arakaraka ny anton-javatra maro:

  • Ny fanalahidin'ny fisarahana dia mety ho kely dia kely (andro iray) na lehibe be (volana maromaro).
  • Ny config fitehirizana dia mety hifanaraka amin'ny tokonam-baravaran'ny angona manan-danja maro ao anatin'ny fizarazarana mavitrika (izay misy metrika voarakitra), na mety tsy.
  • Raha be dia be ny angona, dia ny tapany voalohany indrindra, izay noho ny fampifangaroana ambadika dia mety ho efa lehibe (raha misafidy ny fanalahidin'ny fisarahana tsy tsara indrindra ianao), dia tsy hanambatra ny tenany amin'ny ampahany kely vaovao.

Ary mitovy foana ny fiafarany. Ny habaka ipetrahan'ny metrika ao amin'ny ClickHouse dia mitombo ihany raha:

  • aza mihatra OPTIMIZE ... FINAL tanana na
  • aza ampidiro ny angona amin'ny fizarazarana rehetra tsy an-kijanona, ka na ho ela na ho haingana dia hanomboka ny fampifangaroana ambadika

Ny fomba faharoa dia toa mora indrindra amin'ny fampiharana ary noho izany dia tsy mety ary nosedraina voalohany.
Nanoratra script python tsotra aho izay nandefa metrika dummy isan'andro nandritra ny 4 taona lasa ary nihazakazaka cron isan'ora.
Koa satria ny fiasan'ny ClickHouse DBMS manontolo dia mifototra amin'ny hoe ity rafitra ity na ho ela na ho haingana dia hanao ny asa rehetra any ambadika, saingy tsy fantatra hoe rahoviana aho, tsy afaka niandry ny fotoana izay nanombohan'ireo sombintsombiny lehibe taloha hanomboka hitambatra miaraka. vaovao kely. Nanjary nazava fa mila mitady fomba hanamarihana ny fanatsarana an-tery izahay.

ClickHouse + Graphite: ny fomba hampihenana ny fanjifana habaka kapila

Fampahalalana ao amin'ny tabilao rafitra ClickHouse

Andeha hojerentsika ny firafitry ny latabatra system.parts. Ity dia fampahalalana feno momba ny tapany tsirairay amin'ny latabatra rehetra ao amin'ny mpizara ClickHouse. Ahitana, ankoatry ny zavatra hafa, ireto tsanganana manaraka ireto:

  • anarana db (database);
  • anarana latabatra (table);
  • anarana partition sy ID (partition & partition_id);
  • rehefa natao ilay hira (modification_time);
  • Daty farany ambany sy ambony indrindra amin'ny ampahany iray (ny fizarana dia atao isan'andro) (min_date & max_date);

Misy latabatra koa system.graphite_retentions, miaraka amin'ireto sehatra mahaliana ireto:

  • anarana db (Tables.database);
  • anarana latabatra (Tables.table);
  • taona metrika rehefa tokony hampiharina ny fitambarana manaraka (age);

Noho izany:

  1. Manana latabatra misy sombiny sy tabilao misy fitsipika fanangonana izahay.
  2. Manambatra ny fihaonan'izy ireo izahay ary mahazo ny latabatra rehetra *GraphiteMergeTree.
  3. Mitady partitions rehetra misy:
    • mihoatra ny ampahany iray
    • na tonga ny fotoana hampiharana ny fitsipika aggregation manaraka, ary modification_time antitra noho izao fotoana izao.

fanatanterahana

Ity fangatahana ity

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

mamerina ny tsirairay amin'ireo fisarahana latabatra *GraphiteMergeTree izay tokony hanafaka ny habaka kapila ny fitambarany. Ny hany sisa azo atao dia ny mandalo azy rehetra miaraka amin'ny fangatahana OPTIMIZE ... FINAL. Ny fampiharana farany ihany koa dia mitana ny zava-misy fa tsy ilaina ny hikasika partitions miaraka amin'ny firaketana mavitrika.

Izany indrindra no ataon’ilay tetikasa graphite-ch-optimizer. Ny mpiara-miasa taloha avy amin'ny Yandex.Market dia nanandrana izany tamin'ny famokarana, ny vokatry ny asa dia azo jerena eto ambany.

ClickHouse + Graphite: ny fomba hampihenana ny fanjifana habaka kapila

Raha mitantana ny programa amin'ny mpizara miaraka amin'ny ClickHouse ianao dia hanomboka hiasa amin'ny fomba daemon fotsiny. Indray mandeha adiny iray dia hotanterahina ny fangatahana iray, manamarina raha misy fizarazarana vaovao efa antitra mihoatra ny telo andro izay azo amboarina.

Ny drafitra avy hatrany dia ny hanome fonosana deb farafaharatsiny, ary raha azo atao koa rpm.

Raha tokony ny famaranana

Nandritra ny 9+ volana lasa izay dia tao anatin'ny orinasako aho innogames nandany fotoana be dia be teo amin'ny fihaonan'ny ClickHouse sy graphite-web. Traikefa tsara izany, izay niafara tamin'ny fifindrana haingana avy amin'ny bitsibitsika mankany ClickHouse ho fitahirizana metrika. Manantena aho fa ity lahatsoratra ity dia ampahany amin'ny fiandohan'ny andian-dahatsoratra momba ny fanatsarana nataontsika tamin'ny faritra isan-karazany amin'ity stack ity, ary inona no hatao amin'ny ho avy.

labiera litatra sy andro admin maro no lany tamin'ny famolavolana ny fangatahana, niaraka tamin'ny v0 devoly, izay tiako hanehoana fankasitrahana azy. Ary koa mba hamerenana ity lahatsoratra ity.

Pejy tetikasa amin'ny github

Source: www.habr.com

Add a comment