I-ClickHouse + Graphite: indlela yokunciphisa kakhulu ukusetshenziswa kwesikhala sediski

I-ClickHouse + Graphite: indlela yokunciphisa kakhulu ukusetshenziswa kwesikhala sediski

Sawubona, habr.

Uma othile exhaphaza uhlelo i-graphite-web futhi uhlangabezane nenkinga yokusebenza kwesitoreji kuhleba (I-IO, isikhala sediski sidliwe), khona-ke ithuba lokuthi i-ClickHouse ifakwe esikhundleni kufanele lithambekele kwelilodwa. Lesi sitatimende sibonisa ukuthi ukusetshenziswa kwenkampani yangaphandle sekuvele kusetshenziswa njengamamethrikhi athola i-daemon, isibonelo. i-carbonwriter noma hamba-carbon.

I-ClickHouse ixazulula izinkinga ezichazwe kahle. Isibonelo, ngemuva kokudlulisa u-2TiB wedatha kusuka ekunyenyezeni, angena ku-300GiB. Ngeke ngigxile ekuqhathaniseni ngemininingwane; kunenqwaba yezihloko ngalesi sihloko. Ngaphezu kwalokho, kuze kube muva nje, akuyona yonke into eyayihamba kahle ngesitoreji sethu se-ClickHouse.

Izinkinga ngendawo edliwe

Ekuboneni kokuqala, konke kufanele kusebenze kahle. Ukulandela imibhalo, dala ukulungiselelwa kwesikimu sesitoreji samamethrikhi (okwengeziwe retention), bese udala ithebula ngokuya ngesincomo se-backend ekhethiwe ye-graphite-web: i-carbon-clickhouse+i-graphite-clickhouse noma i-graphouse, kuye ngokuthi yisiphi isitaki esisetshenziswayo. Futhi... ibhomu lesikhathi liyaqhuma.

Ukuze uqonde ukuthi iyiphi, udinga ukwazi ukuthi ukufakwa kusebenza kanjani kanye nendlela yokuphila eyengeziwe yedatha kumathebula wezinjini zomndeni *I-MergeTree I-ClickHouse (amashadi athathwe ku izethulo Alexey Zatelepin):

  • Kufakiwe Π±Π»ΠΎΠΊ idatha. Esimeni sethu, bekungamamethrikhi afikile.
    I-ClickHouse + Graphite: indlela yokunciphisa kakhulu ukusetshenziswa kwesikhala sediski
  • Ibhulokhi ngayinye enjalo ihlelwa ngokokhiye ngaphambi kokuba ibhalwe kudiski. ORDER BYkucaciswe lapho kwakhiwa ithebula.
  • Ngemva kokuhlunga, кусок (part) idatha ibhalwa kudiski.
    I-ClickHouse + Graphite: indlela yokunciphisa kakhulu ukusetshenziswa kwesikhala sediski
  • Iseva iqapha ngemuva ukuze kungabikho izingcezu eziningi ezinjalo, futhi ivula ingemuva слияния (merge, hlanganisa manje).
    I-ClickHouse + Graphite: indlela yokunciphisa kakhulu ukusetshenziswa kwesikhala sediski
    I-ClickHouse + Graphite: indlela yokunciphisa kakhulu ukusetshenziswa kwesikhala sediski
  • Iseva iyayeka ukuhlanganiswa okusebenzayo ngokwayo ngokushesha nje lapho idatha ima ngokusebenzayo ukungena ku- ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ (partition), kodwa ungaqala inqubo mathupha ngomyalo OPTIMIZE.
  • Uma sekusele ucezu olulodwa kuphela ekuhlukaniseni, ngeke ukwazi ukusebenzisa ukuhlanganisa usebenzisa umyalo ojwayelekile; kufanele usebenzise OPTIMIZE ... FINAL

Ngakho-ke, amamethrikhi okuqala afika. Futhi bathatha indawo ethile. Izehlakalo ezilandelayo zingahluka kuye ngezici eziningi:

  • Ukhiye wokuhlukanisa ungaba mncane kakhulu (usuku) noma ube mkhulu kakhulu (izinyanga ezimbalwa).
  • Ukulungiselelwa kokugcinwa kungase kulingane nemikhawulo embalwa ebalulekile yokuhlanganisa idatha ngaphakathi kwengxenye esebenzayo (lapho amamethrikhi aqoshwa khona), noma mhlawumbe cha.
  • Uma kunedatha eningi, khona-ke izingcezu zakuqala, okungenzeka ngenxa yokuhlanganiswa kwengemuva zingase zibe zinkulu (uma ukhetha ukhiye wokuhlukanisa ongafanelekile), ngeke zizihlanganise nezingcezu ezincane ezintsha.

Futhi igcina ngokufana njalo. Isikhala esihlalwa amamethrikhi ku-ClickHouse sikhuphuka kuphela uma:

  • ungasebenzi OPTIMIZE ... FINAL ngesandla noma
  • ungafaki idatha kuwo wonke ama-partitions ngokuqhubekayo, ukuze maduze noma kamuva ukuhlanganisa okungemuva kuqale

Indlela yesibili ibonakala ilula kakhulu ukuyisebenzisa futhi, ngakho-ke, ayilungile futhi yazanywa kuqala.
Ngabhala umbhalo we-python olula othumele amamethrikhi we-dummy nsuku zonke iminyaka engu-4 edlule futhi ngigijima i-cron njalo ngehora.
Njengoba konke ukusebenza kwe-ClickHouse DBMS kusekelwe eqinisweni lokuthi lolu hlelo luzokwenza ngokushesha noma kamuva wonke umsebenzi wangemuva, kodwa akwaziwa ukuthi nini, angikwazanga ukulinda isikhathi lapho izingcezu ezinkulu ezindala ziqala ukuhlangana nazo. ezintsha ezincane. Kwaba sobala ukuthi kwakudingeka sifune indlela yokwenza ukulungiselelwa okuphoqelelwe ngokuzenzakalelayo.

I-ClickHouse + Graphite: indlela yokunciphisa kakhulu ukusetshenziswa kwesikhala sediski

Ulwazi kumathebula esistimu ye-ClickHouse

Ake sibheke isakhiwo setafula uhlelo.izingxenye. Lolu ulwazi olubanzi mayelana nesiqephu ngasinye sawo wonke amathebula kuseva ye-ClickHouse. Iqukethe, phakathi kokunye, amakholomu alandelayo:

  • db igama (database);
  • igama lethebula (table);
  • igama lokuhlukanisa kanye ne-ID (partition & partition_id);
  • ngenkathi kwakhiwa ucezu (modification_time);
  • ubuncane kanye nedethi ephezulu esiqeshini (ukuhlukaniswa kwenziwa ngosuku) (min_date & max_date);

Kukhona netafula system.graphite_retentions, ngezinkambu ezithakazelisayo ezilandelayo:

  • db igama (Tables.database);
  • igama lethebula (Tables.table);
  • iminyaka yemethrikhi lapho kufanele kusetshenziswe ukuhlanganisa okulandelayo (age);

Ngakho:

  1. Sinethebula lezinqamu kanye nethebula lemithetho yokuhlanganisa.
  2. Sihlanganisa ukuhlangana kwabo futhi sithole wonke amatafula *GraphiteMergeTree.
  3. Sibheka wonke ama-partitions lapho:
    • ngaphezu kwesiqephu esisodwa
    • noma isikhathi sesifikile sokusebenzisa umthetho wokuhlanganisa olandelayo, futhi modification_time mdala kunalesi sikhathi.

Ukuqaliswa

Lesi sicelo

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

ibuyisela ingxenye ngayinye yetafula *GraphiteMergeTree ukuhlanganiswa kwayo okufanele kukhulule isikhala sediski. Okusele okumele ukwenze wukubhekana nazo zonke ngesicelo OPTIMIZE ... FINAL. Ukuqaliswa kokugcina kuphinde kucabangele iqiniso lokuthi asikho isidingo sokuthinta ama-partitions ngokurekhoda okusebenzayo.

Yilokhu kanye okwenziwa yiphrojekthi i-graphite-ch-optimizer. Ozakwethu bangaphambili abavela ku-Yandex.Market bazama ekukhiqizeni, umphumela womsebenzi ungabonakala ngezansi.

I-ClickHouse + Graphite: indlela yokunciphisa kakhulu ukusetshenziswa kwesikhala sediski

Uma usebenzisa uhlelo kuseva nge-ClickHouse, luzoqala ukusebenza ngemodi ye-daemon. Kanye ngehora umbuzo uzokwenziwa, kubhekwa ukuthi ingabe izingxenye ezintsha ezindala kunezinsuku ezintathu zivele zingathuthukiswa yini.

Izinhlelo zethu ezisheshayo ukuhlinzeka okungenani ngamaphakheji edeb, futhi uma kungenzeka futhi rpm.

Esikhundleni isiphetho

Ezinyangeni ezingu-9+ ezedlule bengingaphakathi kwenkampani yami I-InnoGames uchithe isikhathi esiningi ezamazama ezimpambanweni zeClickHouse kanye ne-graphite-web. Bekuyisipiliyoni esihle, esiholele ekuguqukeni okusheshayo kokuhleba kuya ku-ClickHouse njengendawo yokugcina amamethrikhi. Ngithemba ukuthi lesi sihloko siyinto yokuqala yochungechunge mayelana nokuthi iziphi intuthuko esiyenzile ezingxenyeni ezihlukahlukene zalesi sitaki, nokuthi yini ezokwenziwa esikhathini esizayo.

Kusetshenziswe amalitha amaningana kabhiya kanye nezinsuku zokuphatha ekuthuthukiseni isicelo, kanye v0 usathane, engifuna ukuzwakalisa ukubonga kwami ​​kuye. Futhi nokubukeza lesi sihloko.

Ikhasi lephrojekthi ku-github

Source: www.habr.com

Engeza amazwana