Kuidas me testisime mitmeid ajarealt andmebaase

Kuidas me testisime mitmeid ajarealt andmebaase

Viimastel aastatel on ajavoosade andmebaasid (Time-series databases) muutunud haruldaseks nĂ€htuseks (mida kasutati peamiselt kas avatud jĂ€lgimissĂŒsteemides vĂ”i konkreetsetes lahendustes, vĂ”i Big Data projektides) „rahva tarbimiseks”. Venemaa alal tuleks selles osas eriline tĂ€nu suunata Yandexile ja ClickHouse’ile. Enne seda, kui oli vaja salvestada suures koguses ajavoosade andmeid, tuli kas leppida tĂ”siasjaga, et tuleb tĂ”sta monstrumlik Hadoopi virn ning selle hooldusse, vĂ”i suhelda protokollidega, mis olid iga sĂŒsteemi jaoks individuaalsed.

VĂ”ib tunduda, et 2019. aasta artikkel selle kohta, millist TSDB-d kasutada, koosneb ainult ĂŒhest lausest: „kasutage lihtsalt ClickHouse’i”. Kuid... on nĂŒansse.

TĂ”epoolest, ClickHouse areneb aktiivselt, kasutajate hulk kasvab ja toetust antakse vĂ€ga aktiivselt, kuid kas me ei ole saanud ClickHouse’i avaliku eduka statusseks kapitaliks, mis varjab teisi, vĂ”imalikult tĂ”husamaid/usaldusvÀÀrsemaid lahendusi?

Eelmisel aastal hakkasime me revidereerima meie enda monitooringusĂŒsteemi, mille kĂ€igus tekkis kĂŒsimus sobiva andmebaasi valimise kohta. Selle valiku ajaloost soovin ma siin rÀÀkida.

Ülesande seadmine

Esiteks — vajalik ettekanne. Miks on meil ĂŒldse vajalik oma monitooringusĂŒsteem ja kuidas see oli ĂŒles ehitatud?

Alustasime tugiteenuste osutamist 2008. aastal ning 2010. aastaks sai selgeks, et sel ajal olemasolevate lahendustega andmete kogumine meie klientide infrastruktuuris olevate protsesside kohta muutus keeruliseks (rÀÀgime, vabandage vÀga, Cactist, Zabbixist ja alles tekkivast Graphitest).

Meie peamised nÔudmised olid:

  • kontakteerimine (sel ajal — kĂŒmnete, tulevikus — sadade) klientide haldamine ĂŒhes sĂŒsteemis koos tsentraliseeritud teavitussĂŒsteemiga;
  • paindlikkus teavitussĂŒsteemi haldamisel (teavituste eskaleerimine vahetult kĂ€tkevate vahel, ajakava arvestamine, teadmistebaas);
  • vĂ”imalus grafikte pĂ”hjalikult detailida (Zabbix sel ajal kuvati graafikud piltidena);
  • pika andmete pikaajaline sĂ€ilitamine (aasta ja rohkem) ja nende kiire vĂ€ljavĂ”tmise vĂ”imalus.

Selles artiklis huvitab meid viimane punkt.

RÀÀkides salvestusest, olid nÔuded jÀrgmised:

  • sĂŒsteem peab kiiresti töötama;
  • soovitav on, et sĂŒsteemil oleks SQL-liides;
  • sĂŒsteem peab olema stabiilne ja omama aktiivset kasutajabaasi ja tuge (oleme kunagi pidanud toetama selliseid sĂŒsteeme nagu MemcacheDB, mida enam ei arendatud, vĂ”i jaotatud salvestust MooseFS, mille veabildurekord viidi lĂ€bi hiina keeles: sellist ajalugu oma projektile me ei soovinud);
  • CAP-teoreemile vastavus: Consistency (jĂ”hkralt vajalik) — andmed peavad olema ajakohased, me ei taha, et teavitussĂŒsteem ei saaks uusi andmeid ja plahvataks hĂ€iretega andmete mitte tuleku ĂŒle kĂ”ikides projektides; Partition Tolerance (jĂ”hkralt vajalik) — me ei soovi, et sĂŒsteemis tekiks Split Brain; Availability (ei ole kriitiline, juhul kui aktiivne koopi olemas) — saame ise lĂŒlituda reservsĂŒsteemile katkestuse korral, koodi kaudu.

Kuidas imelik see ka pole, osutus MySQL selleks ajaks meie jaoks ideaalseks lahenduseks. Meie andmestruktuur oli ÀÀrmiselt lihtne: serveri ID, arvesti ID, ajatemperatuur ja vÀÀrtus; kuumade andmete kiire valimine tagati suure buffer pool'i suurusega ning ajalooliste andmete valimine - SSD kaudu.

Kuidas me testisime mitmeid ajarealt andmebaase

Nii suutsime kahe nĂ€dala vĂ€rskeid andmeid, sekunditasemel detailidega, valima 200 ms jooksul enne andmete tĂ€ielikku renderdamist ning elasime selles sĂŒsteemis ĂŒsna kaua.

Aja möödudes kasvas samuti andmete hulk. 2016. aastaks olid andmehulga ulatused ulatunud kĂŒmnete terabaitideni, mis SSD-lahenduste rentimise tingimustes kujutas olulist kulu.

Sel hetkel hakkasid aktiivselt levima veeruandmebaasid, millele hakkasime tÔsiselt mÔtlema: veeruandmebaasides hoitakse andmeid, nagu nimest aru saada, veergudena; ja kui vaadata meie andmeid, on lihtne nÀha suurt hulka dublette, mida oleks veeruandmebaasi kasutamisel vÔimalik kokku suruda.

Kuidas me testisime mitmeid ajarealt andmebaase

Kuid ettevĂ”tte jaoks kriitiline sĂŒsteem töötas jĂ€tkuvalt stabiilselt, seega ei olnud soov katsetada ĂŒleminekut millelegi muule.

2017. aastal San Jose'is toimunud Percona Live konverentsil esitlesid end esmakordselt Clickhouse'i arendajad. Esmapilgul oli sĂŒsteem juba tootmisvalmis (nĂ€iteks Yandex.Metrica — see on tĂ”eliselt karm tootmine), tugi oli kiire ja lihtne ning kĂ”ige olulisem oli, et haldamine oli lihtne. Alates 2018. aastast alustasime ĂŒlemineku protsessi. Kuid selleks ajaks oli „kĂŒpsed” ja ajaga tĂ”estatud TSDB sĂŒsteeme juba palju ning otsustasime vĂ”tta mĂ€rkimisvÀÀrselt aega alternatiivide vĂ”rdlemiseks, et veenduda, et vastavalt meie nĂ”udmistele ei ole Clickhouse'ile alternatiivseid lahendusi.

Lisaks juba vÀljendatud nÔudmistele ilmnesid uued:

  • uus sĂŒsteem peab tagama vĂ€hemalt sama jĂ”udluse kui MySQL, samal riistvaral;
  • uue sĂŒsteemi andmehoidla peab vĂ”tma oluliselt vĂ€hem ruumi;
  • andmebaasi peab endiselt olema lihtne haldada;
  • rakendust oli soovitav minimaalselt muuta andmebaasi vahetamisel.

Milliseid sĂŒsteeme hakkasime vaatama

Apache Hive/Apache Impala
KĂŒps ja lahingutes katsetatud Hadoopi virn. Sisuliselt on see SQL-liides, mis on ĂŒles ehitatud andmete salvestamiseks oma formaatides HDFSis.

Plussid.

  • Stabiilse töökorralduse korral on andmete skaleerimine vĂ€ga lihtne.
  • Andmete salvestamiseks on olemas veergude lahendused (vĂ€hem ruumi).
  • Ressursside olemasolu korral on paralleelselt töötavate ĂŒlesannete tĂ€itmine vĂ€ga kiire.

Miinused.

  • See on Hadoop, ja selle haldamine on keeruline. Kui me ei ole valmis vĂ”tma pilvepĂ”hist lahendust (mille kulud meid ei rahulda), siis tuleb kogu sĂŒsteem adminnide abil kokku panna ja ĂŒlal pidada, mis pole just meeldiv.
  • Andmed kogutakse tĂ”eliselt kiiresti.

Kuid:

Kuidas me testisime mitmeid ajarealt andmebaase

Kiirus saavutatakse arvutusserverite arvu skaleerimise kaudu. Lihtsamalt öeldes, kui oleme suur ettevĂ”te, tegeleme analĂŒĂŒsiga ja Ă€ri jaoks on kriitiliselt oluline teavet maksimaalselt kiiresti kokku koguda (kas vĂ”i suure arvutusressursside kasutamise arvelt), siis vĂ”ib see olla meie valik. Kuid me ei olnud valmis riistvara parki mitu korda suurendama, et ĂŒlesannete tĂ€itmise kiirus kasvaks.

Druid/Pinot

Juba palju rohkem konkreetse TSDB kohta, kuid jĂ€llegi — Hadoopi tugi.

On suurepÀrane artikkel, mis vÔrdleb Druid ja Pinot plusse ja miinuseid ClickHouse'iga. .

KokkuvÔttes: Druid/Pinot paistavad ClickHouse'ist paremad olukordades, kus:

  • Teie andmed on heterogeensed (meie puhul salvestame ainult serveri mÔÔdikute ajaseeria ja selle osas on see ĂŒks tabel. Kuid vĂ”ivad esineda ka teised juhtumid: seadmete ajaseeriate, majanduslike ajaseeriate jne — igaĂŒhel oma struktuur, mida tuleb aggregata ja töödelda).
  • Samuti on neid andmeid vĂ€ga palju.
  • Tabelid ja ajaseeriad ilmuvad ja kaovad (st mĂ”ni andmekogum on saabunud, see on analĂŒĂŒsitud ja kustutatud).
  • Pole selget kriteeriumi, mille alusel andmed vĂ”ivad olla partiitsioneeritud.

Teisel juhul nÀitab ClickHouse paremaid tulemusi, ja see on meie olukord.

ClickHouse

  • SQL-sarnane.
  • Lihtne hallata.
  • Inimesed ĂŒtlevad, et see töötab.

JĂ”uab testimise lĂŒhilisti.

InfluxDB

VÀlismaine alternatiiv ClickHouse'ile. Miinustest: High Availability on olemas ainult kommertsversionis, aga seda tuleb vÔrrelda.

JĂ”uab testimise lĂŒhilisti.

Cassandra

Ühelt poolt teame, et seda kasutatakse mÔÔtmisajaseeriate salvestamiseks selliste jĂ€lgimissĂŒsteemide poolt nagu nĂ€iteks, SignalFX vĂ”i OkMeter. Kuid on ka spetsiifika.

Cassandra ei ole veergude andmebaas tavapÀrases mÔttes. See nÀeb rohkem vÀlja nagu ridade andmebaas, kuid igas reas vÔib olla erinev arv veerge, mis vÔimaldab hÔlpsasti korraldada veergude esitust. Sellega seoses on mÔistetav, et 2 miljardi veeru piiranguga saab andmeid hoida just veergudes (nÀiteks ajaread). NÀiteks MySQL-is on veergude piirang 4096 ja seal on lihtne kokku puutuda veaga, mille kood on 1117, kui proovida teha sama.

Cassandra mootor on suunatud suurte andmemahtude salvestamisele jaotatud sĂŒsteemis ilma peamasinata. Ülaltoodud CAP-teoreemi kohaselt on Cassandra rohkem AP, see tĂ€hendab andmete kĂ€ttesaadavuse ja jaotuse eraldumise taluvuse suunas. Seega vĂ”ib see tööriist olla suurepĂ€rane, kui tuleb ainult kirjutada sellesse andmebaasi ja harva lugeda. Siinkohal on mĂ”istlik kasutada Cassandrat "kĂŒlma" salvestuslahendusena. See tĂ€hendab pikaajalist ja usaldusvÀÀrset keerukate ajalooliste andmete salvestamist, mida harva vajatakse, kuid vajadusel on need kergesti kĂ€tte saadavad. Siiski, tĂ€iendava pildi saamiseks testime seda ka. Kuid nagu ma varem ĂŒtlesin, ei soovi ma aktiivselt koodi ĂŒmber kirjutada valitud andmebaasi lahendusele, seega testime seda piiratud ulatuses — ilma andmebaasi struktuuri kohandamiseta Cassandrale.

Prometheus

Ja juba huvist otsustasime testida Prometheuse salvestaja jĂ”udlust — lihtsalt, et mĂ”ista, kas oleme praegustest lahendustest kiiremad vĂ”i aeglasemad ja kui palju.

Testimise meetod ja tulemused

Oleme testinud 5 andmebaasi jÀrgnevates 6 konfiguratsioonis: ClickHouse (1 sÔlm), ClickHouse (jaotatud tabel 3 sÔlmele), InfluxDB, Mysql 8, Cassandra (3 sÔlme) ja Prometheus. Testimise plaan on jÀrgmine:

  1. laadime ĂŒles ajaloolisi andmeid nĂ€dala jooksul (840 miljonit vÀÀrtust pĂ€evas; 208 tuhat mÔÔdikut);
  2. genereerime kirjutamiskoormust (vaatlesime 6 koormusreĆŸiimi, vaata allpool);
  3. kirjutamisega samal ajal teeme aeg-ajalt valikuid, simuleerides kasutaja pÀringute esitamist, kes töötleb graafikuid. Lihtsuse huvides valisime andmed 10 mÔÔdiku kaupa (just nii palju on CPU graafikul) nÀdala jooksul.

Koormame, simuleerides meie jÀrelevalveagendi kÀitumist, kes saadab igasse mÔÔdikusse vÀÀrtuseid iga 15 sekundi tagant. Sellega seoses on meil huvi varieerida:

  • mÔÔdikute koguarv, kuhu andmed kirjutatakse;
  • vÀÀrtuste saatmise intervall ĂŒhte mÔÔdikusse;
  • partii suurus.

Partii suurusest. Kuna peaaegu kĂ”igi meie testitavate andmebaaside puhul ei soovitata koormata ĂŒksikute sisestustega, vajame me releed, mis kogub saabuvad mÔÔdikud ja rĂŒhmitab need kokku, kirjutades need andmebaasi partii sisestusega.

Samuti, et paremini mĂ”ista, kuidas hiljem saadud andmeid tĂ”lgendada, kujutame ette, et me ei saada lihtsalt hunnikut mÔÔdikuid, vaid et mÔÔdikud on korraldatud serveritesse — 125 mÔÔdikut serveri kohta. Siin on server lihtsalt virtuaalne entiteet — et mĂ”ista, et nĂ€iteks 10 000 mÔÔdikut vastab umbes 80 serverile.

Ja nĂŒĂŒd, arvestades kĂ”ike seda, on meil kuus koormusreĆŸiimi andmebaasi kirjutamiseks:

Kuidas me testisime mitmeid ajarealt andmebaase

Siin on kaks aspekti. Esiteks, Kassandrale osutus selline partii suurus liiga suureks, seal kasutasime vÀÀrtusi 50 vĂ”i 100. Teiseks, kuna Prometheus töötab rangelt pull-reĆŸiimis, s.t. ta kĂ€ib ja toob mÔÔdikute andmed allikatest (ja isegi pushgateway, vaatamata oma nimele, ei muuda olukorda), vastavad koormused on teostatud staatiliste konfiguratsioonide kombinatsiooniga.

Testimise tulemused on jÀrgmised:

Kuidas me testisime mitmeid ajarealt andmebaase

Kuidas me testisime mitmeid ajarealt andmebaase

Kuidas me testisime mitmeid ajarealt andmebaase

Oluline on mÀrkida: fantastiliselt kiired pÀringud Prometheusest, kohutavalt aeglased pÀringud Cassandrast, vastuvÔetamatult aeglased pÀringud InfluxDB-st; kirjutamise kiiruselt vÔitis kÔik ClickHouse ning Prometheus ei osale konkurssil, kuna ta teeb sisestusi ise endasse ja me ei mÔÔda midagi.

In conclusion,: parimad valikud olid ClickHouse ja InfluxDB, kuid InfluxDB klastrit saab luua ainult Enterprise-versioonil, mis maksab raha, samas kui ClickHouse on tasuta ja toodetud Venemaal. SeetĂ”ttu on loogiline, et USA-s eelistatakse tĂ”enĂ€oliselt InfluxDB-d, meie aga ClickHouse’i.

Allikas: habr.com

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