ClickHouse + Graphite: kif tnaqqas b'mod sinifikanti l-konsum tal-ispazju tad-disk

ClickHouse + Graphite: kif tnaqqas b'mod sinifikanti l-konsum tal-ispazju tad-disk

Tislijiet, habr.

Jekk xi ħadd jisfrutta s-sistema grafita-web u ltaqa' ma' kwistjoni ta' prestazzjoni tal-ħażna whisper (IO, spazju tad-diska kkunsmat), allura ċ-ċans li ClickHouse ġie mitfugħ bħala sostitut għandu tendenza li wieħed. Din id-dikjarazzjoni timplika li implimentazzjoni ta' parti terza hija diġà użata bħala daemon li jirċievi metriċi, pereżempju kittieb tal-karbonju jew go-karbonju.

ClickHouse issolvi l-problemi deskritti tajjeb. Pereżempju, wara li jittrasferixxu 2TiB ta 'dejta minn whisper, jidħlu fi 300GiB. Mhux se nitkellem fuq it-tqabbil fid-dettall; hemm ħafna artikli dwar dan is-suġġett. Barra minn hekk, sa ftit ilu, mhux kollox kien perfett bil-ħażna ClickHouse tagħna.

Problemi bl-ispazju kkunsmat

L-ewwel daqqa t'għajn, kollox għandu jaħdem tajjeb. Wara dokumentazzjoni, oħloq konfigurazzjoni għall-iskema tal-ħażna tal-metriċi (aktar retention), imbagħad oħloq tabella skont ir-rakkomandazzjoni tal-backend magħżul għal graphite-web: karbonju-clickhouse+grafita-clickhouse jew graphouse, skond liema munzell jintuża. U... tispiċċa l-bomba tal-ħin.

Sabiex tifhem liema waħda, trid tkun taf kif jaħdmu l-inserzjonijiet u l-mogħdija tal-ħajja ulterjuri tad-dejta fit-tabelli tal-magni tal-familja *MergeTree ClickHouse (mapep meħuda minn презентации Alexey Zatelepin):

  • Imdaħħal блок data. Fil-każ tagħna, kienu l-metriċi li waslu.
    ClickHouse + Graphite: kif tnaqqas b'mod sinifikanti l-konsum tal-ispazju tad-disk
  • Kull blokka bħal din tiġi magħżula skont iċ-ċavetta qabel ma tinkiteb fuq id-diska. ORDER BYspeċifikat meta tinħoloq it-tabella.
  • Wara l-għażla, кусок (part) id-data tinkiteb fuq disk.
    ClickHouse + Graphite: kif tnaqqas b'mod sinifikanti l-konsum tal-ispazju tad-disk
  • Is-server jimmonitorja fl-isfond sabiex ma jkunx hemm ħafna biċċiet bħal dawn, u jniedi l-isfond слияния (merge, minn hawn 'il quddiem jingħaqdu).
    ClickHouse + Graphite: kif tnaqqas b'mod sinifikanti l-konsum tal-ispazju tad-disk
    ClickHouse + Graphite: kif tnaqqas b'mod sinifikanti l-konsum tal-ispazju tad-disk
  • Is-server jieqaf jaħdem jingħaqad waħdu hekk kif id-data tieqaf attivament tiċċirkola fil- партицию (partition), iżda tista 'tibda l-proċess manwalment bil-kmand OPTIMIZE.
  • Jekk għad fadal biċċa waħda biss fil-partizzjoni, allura ma tkunx tista' tmexxi l-għaqda billi tuża l-kmand tas-soltu; trid tuża OPTIMIZE ... FINAL

Allura, jaslu l-ewwel metriċi. U jieħdu ftit spazju. L-avvenimenti sussegwenti jistgħu jvarjaw xi ftit skont ħafna fatturi:

  • Iċ-ċavetta tal-qsim tista' tkun jew żgħira ħafna (ġurnata) jew kbira ħafna (diversi xhur).
  • Il-konfigurazzjoni taż-żamma tista' taqbel ma' diversi limiti sinifikanti ta' aggregazzjoni tad-dejta fil-partizzjoni attiva (fejn il-metriċi huma rreġistrati), jew forsi le.
  • Jekk hemm ħafna dejta, allura l-aktar biċċiet bikrija, li minħabba l-għaqda fl-isfond jistgħu diġà jkunu enormi (jekk tagħżel ċavetta ta 'qsim mhux ottimali), mhux se jingħaqdu ma' biċċiet żgħar friski.

U dejjem jispiċċa l-istess. L-ispazju okkupat mill-metriċi fi ClickHouse jiżdied biss jekk:

  • ma japplikawx OPTIMIZE ... FINAL manwalment jew
  • ddaħħalx id-dejta fil-ħitan kollha fuq bażi kontinwa, sabiex illum jew għada tibda taħlita ta' sfond

It-tieni metodu jidher li huwa l-aktar faċli biex jiġi implimentat u, għalhekk, huwa żbaljat u ġie ppruvat l-ewwel.
Ktibt script python pjuttost sempliċi li bagħat metriċi finta għal kull jum għall-aħħar 4 snin u dam cron kull siegħa.
Peress li l-operat kollu ta 'ClickHouse DBMS huwa bbażat fuq il-fatt li din is-sistema illum jew għada se tagħmel ix-xogħol kollu ta' l-isfond, iżda mhux magħruf meta, ma stajtx nistenna l-mument meta l-biċċiet kbar qodma deign jibdew jingħaqdu ma ' oħrajn żgħar ġodda. Deher ċar li kellna bżonn infittxu mod kif nawtomatizzaw l-ottimizzazzjonijiet sfurzati.

ClickHouse + Graphite: kif tnaqqas b'mod sinifikanti l-konsum tal-ispazju tad-disk

Informazzjoni fit-tabelli tas-sistema ClickHouse

Ejja nagħtu ħarsa lejn l-istruttura tal-mejda partijiet.sistema. Din hija informazzjoni komprensiva dwar kull biċċa tat-tabelli kollha fuq is-server ClickHouse. Fih, fost affarijiet oħra, il-kolonni li ġejjin:

  • isem db (database);
  • isem it-tabella (table);
  • isem u ID tal-partizzjoni (partition & partition_id);
  • meta nħolqot il-biċċa (modification_time);
  • data minima u massima f'biċċa (il-qsim isir bil-ġurnata) (min_date & max_date);

Hemm ukoll mejda system.graphite_retentions, bl-oqsma interessanti li ġejjin:

  • isem db (Tables.database);
  • isem it-tabella (Tables.table);
  • età metrika meta għandha tiġi applikata l-aggregazzjoni li jmiss (age);

So:

  1. Għandna tabella ta 'biċċiet u tabella ta' regoli ta 'aggregazzjoni.
  2. Aħna ngħaqqdu l-intersezzjoni tagħhom u nġibu t-tabelli kollha *GraphiteMergeTree.
  3. Qegħdin infittxu l-ħitan kollha li fihom:
    • aktar minn biċċa waħda
    • jew wasal iż-żmien li tiġi applikata r-regola ta’ aggregazzjoni li jmiss, u modification_time anzjani minn dan il-mument.

Реализация

Din it-talba

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

jirritorna kull waħda mill-partizzjonijiet tat-tabella *GraphiteMergeTree li l-għaqda tagħhom għandha tillibera spazju fuq id-diska. L-unika ħaġa li fadal hija li tgħaddi minnhom kollha b'talba OPTIMIZE ... FINAL. L-implimentazzjoni finali tqis ukoll il-fatt li m'hemmx bżonn li tmiss diviżorji b'reġistrazzjoni attiva.

Dan huwa eżattament dak li jagħmel il-proġett graphite-ch-optimizer. Kollegi ta 'qabel minn Yandex.Market ippruvawha fil-produzzjoni, ir-riżultat tax-xogħol jista' jidher hawn taħt.

ClickHouse + Graphite: kif tnaqqas b'mod sinifikanti l-konsum tal-ispazju tad-disk

Jekk tmexxi l-programm fuq server ma' ClickHouse, sempliċiment jibda jaħdem fil-modalità daemon. Darba fis-siegħa tiġi eżegwita talba, billi jiġi ċċekkjat jekk dehrux diviżorji ġodda eqdem minn tlett ijiem li jistgħu jiġu ottimizzati.

Il-pjanijiet immedjati tagħna huma li nipprovdu mill-inqas pakketti deb, u jekk possibbli wkoll rpm.

Minflok ma tikkonkludi

Matul l-aħħar 9+ xhur ilni ġewwa l-kumpanija tiegħi innogames qatta 'ħafna ħin tpaxxija fl-intersezzjoni ta' ClickHouse u graphite-web. Kienet esperjenza tajba, li rriżultat fi tranżizzjoni mgħaġġla minn whisper għal ClickHouse bħala ħażna ta 'metriċi. Nittama li dan l-artikolu huwa xi ħaġa tal-bidu ta 'serje dwar liema titjib li għamilna għal diversi partijiet ta' dan il-munzell, u x'se jsir fil-futur.

Diversi litri ta 'birra u jiem admin intefqu fuq l-iżvilupp tat-talba, flimkien ma v0devil, li għalih irrid nesprimi l-gratitudni tiegħi lejh. U wkoll għar-reviżjoni ta 'dan l-artikolu.

Paġna tal-proġett fuq github

Sors: www.habr.com

Żid kumment