Clickhouse'i kasutamine ELK, Big Query ja TimescaleDB asendajana

Clickhouse — see on avatud lĂ€htekoodiga veergudepĂ”hine andmebaaside haldussĂŒsteem (OLAP) Internetis analĂŒĂŒtiliste pĂ€ringute töötlemiseks, mille lĂ”i Yandex. Seda kasutavad Yandex, CloudFlare, VK.com, Badoo ja paljud teised teenused kĂ”ikjal maailmas tĂ”eliselt suurte andmehulkade salvestamiseks (tuhandete ridade sisestamine sekundis vĂ”i petabaidide kaupa andmete salvestamine kettale).

Tavalisel, «reapĂ”hisel» andmebaasi haldussĂŒsteemil, milleks on nĂ€iteks MySQL, Postgres, MS SQL Server, sĂ€ilitatakse andmed sellises jĂ€rjestuses:

Clickhouse'i kasutamine ELK, Big Query ja TimescaleDB asendajana

Samas on vÀÀrtused, mis kuuluvad ĂŒhte ritta, fĂŒĂŒsiliselt lĂ€hedal. VeergudepĂ”histes andmebaasides salvestatakse erinevate veergude vÀÀrtused eraldi, ja ĂŒhe veeru andmed on koos:

Clickhouse'i kasutamine ELK, Big Query ja TimescaleDB asendajana

VeergudepÔhiste andmebaaside nÀideteks on Vertica, Paraccel (Actian Matrix, Amazon Redshift), Sybase IQ, Exasol, Infobright, InfiniDB, MonetDB (VectorWise, Actian Vector), LucidDB, SAP HANA, Google Dremel, Google PowerDrill, Druid, kdb+.

EttevĂ”te – meilifoward Qwintry hakks kasutama Clickhouse'i 2018. aastal aruannete koostamiseks ja oli vĂ€ga muljet avaldanud selle lihtsuse, skaleeritavuse, SQL toe ja kiirusest. Selle andmebaasi töö kiirus oli peaaegu nagu nĂ”idus.

Lihtsus

Clickhouse on Ubuntu installitakse ĂŒheainsa kĂ€suga. Kui oskate SQL-i, saate kohe hakata Clickhouse'i kasutama. See ei tĂ€henda aga, et saaksite MySQL-is "show create table" teha ja SQL-i lihtsalt kopeerida ja kleepida Clickhouse'i.

VĂ”rreldes MySQL-iga on selle andmebaasi puhul tabeliskeemide mÀÀratlemisel olulisi andmetĂŒĂŒpide erinevusi. SeetĂ”ttu on mugavaks töötamiseks vajalik veidi aega tabeliskeemide mÀÀratlemiste muutmiseks ja tabelimootorite tundmaĂ”ppimiseks.

Clickhouse töötab suurepĂ€raselt ilma igasuguse lisatarkvarata, kuid kui soovite kasutada replikatsiooni, peate installima ZooKeeperi. PĂ€ringute jĂ”udluse analĂŒĂŒs nĂ€itab suurepĂ€raseid tulemusi — sĂŒsteemitabelid sisaldavad kogu teavet ning kĂ”ik andmed on kĂ€ttesaadavad vanade ja igavate SQL-i abil.

Tootlikkus

Clickhouse'i kasutamine ELK, Big Query ja TimescaleDB asendajana

ClickHouse'i andmebaas omab vĂ€ga lihtsat disaini — kĂ”ik klastris olevad sĂ”lmed tĂ€idavad samu funktsioone ja koordineerimise jaoks kasutatakse ainult ZooKeeperit. Oleme ehitanud vĂ€ikese klastrite gruppi ja viinud lĂ€bi teste, mille kĂ€igus leidsime, et sĂŒsteemil on ĂŒllatavalt hea jĂ”udlus, mis vastab analĂŒĂŒtiliste andmebaaside benchmark’ides lubatud eelistele. Otsustasime pĂ”hjalikumalt uurida ClickHouse'i aluseks olevat kontseptsiooni. Esimese teadusuuringute takistusena oli tööriistade puudus ja ClickHouse'i kogukonna vĂ€henenud suurus, mistĂ”ttu sĂŒvenesime selle andmebaasi disaini, et mĂ”ista, kuidas see toimib.

ClickHouse ei toeta andmete vastuvĂ”ttu otse Kafka'lt, kuna see on lihtsalt andmebaas. SeetĂ”ttu kirjutasime me oma adaptermooduli Go keeles. See luges Kafka'st kodeeritud Cap’n Proto sĂ”numeid, konverteeris need TSV formaati ja sisestas ClickHouse'i pakettide kaupa lĂ€bi HTTP-liidese. Hiljem kirjutasime selle teenuse ĂŒmber, et kasutada Go raamatukogu koos ClickHouse'i oma liidese kasutamisega, et parandada jĂ”udlust. PaketivastuvĂ”tu jĂ”udluse hindamisel avastasime olulise asja – selgus, et ClickHouse'i jĂ”udlus sĂ”ltub suurel mÀÀral paketist, st samaaegselt sisestatud ridade arvust. Selle mĂ”istmiseks uurisime, kuidas ClickHouse andmeid salvestab.

ClickHouse'i andmete salvestamiseks kasutatav peamine, pigem mootori perekond on MergeTree. See mootor on kontseptuaalselt sarnane LSM-algoritmiga, mis on rakendatud Google BigTable'is vÔi Apache Cassandra's, kuid vÀldib vahepealse mÀlutabeli loomist ning kirjutab andmed otse kettale. See annab sellele suurepÀrase kirjutamise lÀbilaskevÔime, kuna iga sisestatud partii sorteeritakse ainult "esimese vÔtme" (primary key) jÀrgi, tihendatakse ja kirjutatakse kettale, et luua segment.

MĂ€lu tabeli vĂ”i andmete "vĂ€rskuse" puudumine tĂ€hendab, et andmeid saab ainult lisada, nende muutmist vĂ”i kustutamist sĂŒsteem ei toeta. Praegu on ainus viis andmete kustutamine kuude kaupa, kuna segmentide vahel ei teki kunagi kuupiire. ClickHouse meeskond töötab aktiivselt selle funktsiooni kohandatavamaks muutmise nimel. Teisest kĂŒljest muudab see konfliktivabaks segmentide kirjutamise ja ĂŒhendamise, seega vastuvĂ”tu lĂ€bilaskevĂ”ime skaleerub joonearselt paralleelsete insertide arvuga, kuni ei tekita I/O vĂ”i tuumade kĂŒllastumist.
Kuid see olukord tĂ€hendab ka, et sĂŒsteem ei sobi vĂ€ikeste pakettide jaoks, mistĂ”ttu kĂŒlastatakse puhverdamiseks Kafka teenuseid ja insertereid. Edasi, ClickHouse jĂ€tkab taustal pidevat segmentide sulandamist, nii et paljud vĂ€ikesed andmepalad ĂŒhendatakse ja salvestatakse rohkem kordi, suurendades sellega kirjutamise intensiivsust. Sellega seoses vĂ”ib liiga palju seotud osi pĂ”hjustada sisendite agressiivset piiramist, kuni sulandamine kestab. Oleme leidnud, et parim kompromiss reaalajas andmete vastuvĂ”tu ja vastuvĂ”tu efektiivsuse vahel on piiratud arvu sisendite vastuvĂ”tt sekundis.

Lugemise tabelite jĂ”udluse vĂ”tmekomponent on indekseerimine ja andmete paigutus kĂ”vakettale. ÜkskĂ”ik kui kiire on töötlemine, kui mootor peab skaneerima terabayte andmeid kettalt ja kasutama neist vaid osa, vĂ”tab see aega. ClickHouse on veergude andmete hoidla, seega iga segment sisaldab faili iga veeru jaoks, kus on iga rea jaoks jĂ€rjestatud vÀÀrtused. Seega saavad kogu veerud, mida pĂ€ringus ei ole, esialgu vahele jĂ€etud ning seejĂ€rel vĂ”ivad mitmed lahtrid olla töödeldud paralleelselt vektoriseeritud tĂ€itmisega. TĂ€ieliku skaneerimise vĂ€ltimiseks on igal segmendil vĂ€ike indeksifail.

Arvestades, et kĂ”ik veerud on jĂ€rjekorras „peamise vĂ”tme” jĂ€rgi, sisaldab indeksifail ainult mĂ€rke (tabatud read) igast N-ndast reast, et neid oleks vĂ”imalik hoida mĂ€lus isegi vĂ€ga suurte tabelite jaoks. NĂ€iteks saab seada vaikeseaded „mĂ€rgistada iga 8192. rea”, siis „karm” tabeli indekseerimine, mis sisaldab 1 triljonit rida, mis mahub kergesti mĂ€llu, vĂ”tab vaid 122 070 tĂ€hemĂ€rki.

SĂŒsteemi areng

Clickhouse'i arengut ja tĂ€iustamist saab jĂ€lgida Githubi repo ja veenduda, et 'kĂŒpsemise' protsess toimub muljetavaldava kiirusel.

Clickhouse'i kasutamine ELK, Big Query ja TimescaleDB asendajana

Populaarsus

Tundub, et Clickhouse'i populaarsus kasvab eksponentsiaalselt, eriti venekeelses kogukonnas. Eelmise aasta High Load 2018 konverents nĂ€itas, et sellised hiiglased nagu vk.com ja Badoo kasutavad Clickhouse'i, mille abil sisestavad nad andmeid (nt logisid) kĂŒmnetelt tuhandelt serverilt ĂŒheaegselt. 40-minutilises videos Yuri Nasretdinov VKontakte meeskonnast rÀÀgib sellest, kuidas see toimub. Peagi avaldame mugavuse huvides stenogrammi Habr's.

Rakendusvaldkonnad

PĂ€rast teatud aja veetmist uurimisel usun, et on valdkondi, kus ClickHouse vĂ”ib olla kasulik vĂ”i suudab tĂ€ielikult asendada teisi, traditsioonilisemaid ja populaarsemaid lahendusi nagu MySQL, PostgreSQL, ELK, Google Big Query, Amazon RedShift, TimescaleDB, Hadoop, MapReduce, Pinot ja Druid. JĂ€rgnevalt on toodud ĂŒksikasjad ClickHouse'i kasutamise kohta ĂŒlaltoodud andmebaaside moderniseerimiseks vĂ”i tĂ€ielikuks asendamiseks.

MySQL ja PostgreSQL vÔimaluste laiendamine

Hiljuti asendasime osaliselt MySQL-i ClickHouse'iga uudiskirjade platvormil. Mautic uudiskiri. Probleem oli selles, et MySQL registreeris igasuguse saatmise ja iga kirjas oleva lingi base64-koodiga, luues hiiglasliku MySQL tabeli (email_stats). PĂ€rast 10 miljoni kirja saatmist teenuse tellijatele oli see tabel 150 GB suurune, mille tĂ”ttu MySQL hakkas lihtsate pĂ€ringute puhul "tĂŒkki tundma". Probleemi lahendamiseks kasutame tĂ”husalt InnoDB tabeli tihendamist, mis vĂ€hendas selle mahtu neljakordselt. Siiski pole mĂ”tet hoida MySQL-is enam kui 20-30 miljonit e-kirja vaid ajaloo lugemise nimel, kuna iga lihtne pĂ€ring, mis mingil pĂ”hjusel peab teostama tĂ€isskaneerimise, pĂ”hjustab vahetusmĂ€lu ja suurt I/O koormust, millest saime regulaarselt Zabbix'i hoiatusi.

Clickhouse'i kasutamine ELK, Big Query ja TimescaleDB asendajana

Clickhouse kasutab kahte tihendamisalgoritmi, mis vÀhendavad andmete mahtu umbes 3-4 korda, kuid antud konkreetses juhul olid andmed eriti "tihendatavad".

Clickhouse'i kasutamine ELK, Big Query ja TimescaleDB asendajana

ELK asendamine

Oma kogemusele tuginedes nÔuab ELK (ElasticSearch, Logstash ja Kibana, antud juhul ElasticSearch) logide kÀitamiseks palju rohkem ressursse kui logide salvestamiseks vajalik. ElasticSearch on suurepÀrane mootor, kui vajate logides head tÀisteksti otsingu vÔimalust (kuigi ma ei arva, et see teile tÔeliselt vajalik oleks), kuid mind huvitab, miks on sellest de-facto saanud standardne ajakirjanduse mootor. Selle vastuvÔtutootlikkus koos Logstashiga on meile tekitanud probleeme isegi suhteliselt vÀikeste koormuste korral ja on nÔudnud jÀrjest rohkem RAM-i ja kettaruumi. Andmebaasina on Clickhouse ElasticSearchist parem jÀrgmistel pÔhjustel:

  • SQL dialekti tugi;
  • Parema andmete kokkusurumise aste;
  • Regex regulaaravaldiste otsingu tugi tĂ€isteksti otsingu asemel;
  • Parandatud pĂ€ringute kavandamine ja kĂ”rgem ĂŒldine tootlikkus.

Praegu on ClickHouse'i ja ELK vĂ”rreldes suurim probleem logide vĂ€ljastamise lahenduste puudumine ning samuti dokumentatsiooni ja Ă”ppematerjalide nappus selle teema kohta. Samas saab iga kasutaja ELKi seadistada Digital Ocean'i juhendi abil, mis on vĂ€ga oluline selliste tehnoloogiate kiireks kasutuselevĂ”tuks. Andmebaasi mootor on olemas, kuid Filebeat'i tugi ClickHouse'ile puudub. Jah, seal on olemas fluentd ja logide töötlemise sĂŒsteem loghouse, on olemas tööriist clicktail logifailide andmete sisestamiseks ClickHouse'i, kuid see kĂ”ik nĂ”uab rohkem aega. Siiski on ClickHouse endiselt liider oma lihtsuse tĂ”ttu, mistĂ”ttu isegi algajad saavad selle paigaldada ja hakata tĂ€isfunktsionaalset kasutama vaid 10 minuti pĂ€rast.

Minimaalseid lahendusi eelistades proovisin kasutada FluentBit'i, vĂ€ga vĂ€ikese mĂ€lu kasutusega logide vĂ€ljastamise tööriista, koos ClickHouse'iga, vĂ€ltides samas Kafka kasutamist. Kuid mĂ”ned vĂ€iksed ĂŒhilduvusprobleemid, nagu kuupĂ€eva formaadi probleemid, enne kui seda saab teha ilma proksivaateta, mis muudab andmed FluentBitist ClickHouse'i.

Alternatiivina Kibana'le saab ClickHouse'i kasutada tagaplaanina Grafana. Nagu aru sain, vĂ”ivad sellega kaasneda jĂ”udlusprobleemid suurte andmepunktide renderdamisel, eriti vanemate Grafana versioonidega. Qwintry's me pole seda veel proovinud, kuid kaebusi selle ĂŒle on aeg-ajalt tulnud ClickHouse'i tugikanalist Telegramis.

Google Big Query ja Amazon RedShift'i asendamine (lahendus suurtele ettevÔtetele)

BigQuery ideaalne kasutusviis on laadida 1 TB JSON andmeid ja teha nende pĂ”hjal analĂŒĂŒtilisi pĂ€ringuid. BigQuery on suurepĂ€rane toode, mille skaleeritavust on raske ĂŒle hinnata. See on palju keerulisem tarkvara kui ClickHouse, mis töötab sisevĂ”rgus, kuid kliendi seisukohalt on tal ClickHouse'iga palju ĂŒhist. BigQuery vĂ”ib kiiresti „kalliks” minna, kui hakkate maksma iga SELECT'i eest, seega on see tĂ”eline SaaS-lahendus koos kĂ”igi oma plusside ja miinustega.

ClickHouse on parim valik, kui teete palju arvutuslikult kulukaid pĂ€ringuid. Mida rohkem SELECT pĂ€ringuid te iga pĂ€ev teete, seda rohkem tasub Big Query asendada ClickHouse'iga, sest see vahetus aitab sÀÀsta tuhandeid dollareid, kui tegemist on suurte terabaitide töötlemisega. See ei kehti salvestatud andmete puhul, mille töötlemine Big Query's on ĂŒsna odav.

Artiklis, mille on koostanud Altinity kaasasutaja Aleksandr Zaitsev „Üleminek ClickHouse'ile“ kĂ€sitletakse sellise andmebaasi migreerimise eeliseid.

TimescaleDB asendamine

TimescaleDB on PostgreSQL laiendus, mis optimeerib ajaseeriate töötlemist tavalises andmebaasis.https://docs.timescale.com/v1.0/introduction, https://habr.com/ru/company/zabbix/blog/458530/).

Kuigi ClickHouse ei ole tĂ”sine konkurent ajareadade niĆĄis, on selle veergude struktuur ja vektorkĂŒsimuste tĂ€itmine enamikus analĂŒĂŒsipĂ€ringute töötlemisel TimescaleDB-st mĂ€rgatavalt kiirem. Samuti on ClickHouse-i pakettide andmete vastuvĂ”tu jĂ”udlus umbes 3 korda parem, ning ta kasutab 20 korda vĂ€hem diskiruumi, mis on tĂ”eliselt oluline suurte ajalooliste andmemahtude töötlemisel: ‹https://www.altinity.com/blog/ClickHouse-for-time-series.

Erinevalt ClickHouse'ist on TimescaleDB-s ainus viis veidi diskiruumi kokku hoida ZFS-i vĂ”i sarnaste failisĂŒsteemide kasutamine.

Eelseisvad ClickHouse uuendused toovad tÔenÀoliselt sisse delta-kompressiooni, mis muudab selle veelgi sobivamaks ajareadade andmete töötlemiseks ja salvestamiseks. TimescaleDB vÔib olla parem valik kui 'puhtal' ClickHouse'il jÀrgmistes olukordades:

  • vĂ€iksed installatsioonid, kus on vĂ€ga vĂ€he RAM-i (<3 GB);
  • suure hulga vĂ€ikeste INSERT-kĂ€skude puhul, mida te ei soovi suurtesse fragmentidesse puhverdada;
  • parem jĂ€rjepidevus, ĂŒhtsus ja ACID-nĂ”uded;
  • PostGIS-i tugi;
  • ĂŒhendamine olemasolevate PostgreSQL tabelitega, kuna Timescale DB on pĂ”himĂ”tteliselt PostgreSQL.

Konkurents Hadoopi ja MapReduce sĂŒsteemidega

Hadoop ja muud MapReduce tooted vĂ”ivad teostada mitmeid keerulisi arvutusi, kuid need töötavad tavaliselt vĂ€ga suurtel viivitustega. ClickHouse lahendab selle probleemi, töötledes terabaiti andmeid ja andes tulemusi peaaegu kohe. Seega on ClickHouse palju tĂ”husam kiiret, interaktiivset analĂŒĂŒtilist uurimistööd tehes, mis peaks andmetöötluse spetsialiste kindlasti huvitama.

Konkurents Pinot ja Druidiga

ClickHouse'i lĂ€himad konkurendid on veergude pĂ”hised lineaarse skaleeritavuse avatud lĂ€htekoodiga tooted Pinot ja Druid. Nende sĂŒsteemide vĂ”rdlev hea töö on avaldatud artiklis Roman Leventov 1. veebruar 2018

Clickhouse'i kasutamine ELK, Big Query ja TimescaleDB asendajana

See artikkel vajab vĂ€rskendamist – see vĂ€idab, et ClickHouse ei toeta UPDATE ja DELETE toiminguid, mis ei ole viimaste versioonide osas tĂ€ielikult tĂ”si.

Meil ei ole piisavalt kogemusi nende andmebaaside haldamisel, kuid mulle ei meeldi ĂŒldse Druid'i ja Pinot'i kĂ€itamiseks vajaliku infrastruktuuri keerukus — seal on palju „liikuvaid osi”, mis on Java ĂŒmber ehitatud.

Druid ja Pinot on Apache'i inkubaatoriprojektid, mille arengut kajastatakse pĂ”hjalikult Apache'i GitHub'i projektilehtedel. Pinot ilmus inkubaatorisse 2018. aasta oktoobris, samas kui Druid sĂŒndis kaheksa kuud varem — veebruaris.

Teave AFS-i toimimise kohta on vĂ€hene ning see tekitab minus mĂ”ned, vĂ”ib-olla rumalad kĂŒsimused. Huvi pakub, kas Pinot'i autorid on mĂ€rganud, et Apache Foundation on Druid'ile soodsamalt meelestatud, ning kas see on tekitanud konkurendi suhtes kadedust? Kas Druid'i areng pidurdub ja Pinot'i areng kiireneb, kui esimese toetajad Ă€kki teisega enamasti huvi tunnevad?

ClickHouse'i puudused

VÀhenenud vÔrreldes: ilmselgelt on see endiselt arenev tehnoloogia, kuid sarnaseid probleeme ei ole teiste veergude andmebaasides tÀheldatud.

VĂ€ikesed sisendiĂŒksused ei tööta kĂ”rge kiirusel hĂ€sti: sisendid peaksid olema jagatud suurte tĂŒkkideks, kuna vĂ€ikeste sisendiĂŒksuste jĂ”udlus vĂ€heneb proportsionaalselt iga rea veergude arvule. Just nii salvestatakse andmeid ClickHouse'is kettale — iga veerg tĂ€hendab ĂŒht vĂ”i enamat faili, seega 1 rea sisestamiseks, mis sisaldab 100 veergu, tuleb avada ja kirjutada vĂ€hemalt 100 faili. SeetĂ”ttu on sisendite puhvherdamiseks vajalik vahendaja (kui klient ise puhvreerimist ei taga) — tavaliselt on selleks Kafka vĂ”i mĂ”ni jĂ€rjekorrasĂŒsteem. Samuti saab kasutada Buffer tabeli mootorit, et hiljem kopeerida suuri andmefragmente MergeTree tabelitesse.

Tabelite ĂŒhendused on piiratud serveri RAM-iga, kuid vĂ€hemalt need on olemas! NĂ€iteks Druidil ja Pinotil ei ole ĂŒldse selliseid ĂŒhendusi, kuna nende rakendamine on keeruline jaotatud sĂŒsteemides, mis ei toeta suurte andmekoguste liikumist sĂ”lmede vahel.

JĂ€reldused

JĂ€rgmiste aastate jooksul plaanime Qwintrys laialdaselt kasutada ClickHouse'i, kuna see andmebaasihaldussĂŒsteem pakub suurepĂ€rast tasakaalu jĂ”udluse, madalate kulude, skaleeritavuse ja lihtsuse vahel. Olen peaaegu kindel, et see hakkab kiiresti laienema, kui ClickHouse'i kogukond vĂ€lja mĂ”tleb rohkem vĂ”imalusi selle kasutamiseks vĂ€ikestes ja keskmistes installatsioonides.

Veidi reklaami 🙂

AitĂ€h, et olete meiega. Kas teile meeldivad meie artiklid? Kas soovite nĂ€ha rohkem huvitavaid materjale? Toetage meid, tehes tellimuse vĂ”i soovitades meid tuttavatele. pilve VPS arendajatele alates $4,99, ainulaadne sisenemise taseme serverite analoog, mille oleme teie jaoks vĂ€lja mĂ”elnud: Kogu tĂ”de VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps alates $19 vĂ”i kuidas Ă”ieti serverit jagada? (saadaval on RAID1 ja RAID10 variandid, kuni 24 sĂŒdamikku ja kuni 40GB DDR4).

Kas Dell R730xd on kaks korda odavam Equinixi Tier IV andmete keskuses Amsterdamis? Ainult meie juures 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB alates $199 Hollandi turul! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — alates $99! Lugege, kuidas Luua ettevĂ”tte tasemel infrastruktuur Dell R730xd E5-2650 v4 serveritega, mille hind on 9000 eurot, madala hinnaga?

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster