Hur vi testade flera databaser för tidsserier

Hur vi testade flera databaser för tidsserier

Under de senaste Ären har databaser för tidsserier (Time-series databases) gÄtt frÄn att vara en ovanlig företeelse (som tillÀmpades antingen i specifika övervakningssystem eller i Big Data-projekt) till en "massmarknadprodukt". I Ryssland Àr det vÀrt att nÀmna Yandex och ClickHouse för detta. Fram tills dess, om du behövde lagra en stor mÀngd tidsseriedata, var du tvungen att antingen acceptera att bygga en monstruös Hadoop-stack och underhÄlla den, eller att hantera protokoll specifika för varje system.

Det kan verka som om artikeln frÄn 2019 om vilken TSDB som Àr vÀrd att anvÀnda skulle bestÄ av en enda mening: "anvÀnd bara ClickHouse". Men
 det finns nyanser.

Verkligen, ClickHouse utvecklas aktivt, anvÀndarbasen vÀxer, och stödet Àr mycket aktivt, men har vi inte blivit fÄngar av ClickHouse:s offentliga framgÄng, som överskuggat andra, kanske mer effektiva/pÄlitliga lösningar?

I början av förra Äret började vi omarbeta vÄrt eget övervakningssystem, dÀr vi stötte pÄ frÄgan om att vÀlja en lÀmplig databas för datalagring. Jag vill berÀtta historien om detta val hÀr.

UppgiftsstÀllande

Först och frÀmst - en nödvÀndig inledning. Varför behöver vi överhuvudtaget vÄrt eget övervakningssystem och hur var det uppbyggt?

Vi började erbjuda supporttjÀnster 2008, och 2010 blev det tydligt att aggregera data om processerna i kundens infrastruktur med de lösningar som fanns dÄ blev svÄrt (vi pratar om, för guds skull, Cacti, Zabbix och det framvÀxande Graphite).

VÄra grundkrav var:

  • att hantera (vid den tiden - tiotals, och pĂ„ sikt - hundratals) kunder inom ett system och dessutom ha ett centraliserat system för hantering av aviseringar;
  • flexibilitet i hanteringen av aviseringar (eskalering av aviseringar mellan vaktmĂ€stare, beaktande av scheman, kunskapsdatabas);
  • möjlighet till djup detaljering av diagram (Zabbix vid den tiden ritade diagram som bilder);
  • lĂ„ngvarig lagring av stora mĂ€ngder data (ett Ă„r eller mer) och möjlighet till snabb hĂ€mtning.

I den hÀr artikeln Àr vi intresserade av den senaste punkten.

NÀr det gÀller lagring var kraven följande:

  • systemet mĂ„ste fungera snabbt;
  • det Ă€r önskvĂ€rt att systemet har ett SQL-grĂ€nssnitt;
  • systemet mĂ„ste vara stabilt och ha en aktiv anvĂ€ndarbas och support (nĂ„gon gĂ„ng stötte vi pĂ„ behovet av att stödja system som MemcacheDB, som slutade utvecklas, eller det distribuerade lagret MooseFS, vars bugtracking sköttes pĂ„ kinesiska: vi ville inte upprepa den historien för vĂ„rt projekt);
  • överensstĂ€mmelse med CAP-teoremet: Consistency (nĂ„got som krĂ€vs) — data mĂ„ste vara aktuella, vi vill inte att systemet för hantering av aviseringar inte fĂ„r nya data och spottar ut varningar om att ingen data kommit in för alla projekt; Partition Tolerance (nĂ„got som krĂ€vs) — vi vill inte fĂ„ ett Split Brain-system; Availability (inte kritiskt, om det finns en aktiv replik) — vi kan sjĂ€lva vĂ€xla till reservsystemet vid en nödsituation, via kod.

Konstigt nog visade sig MySQL vara den perfekta lösningen för oss vid den tiden. VÄr datastruktur var extremt enkel: server-id, rÀknarens id, tidsstÀmpel och vÀrde; snabb hÀmtning av heta data sÀkerstÀlldes genom storleken pÄ buffer pool, och hÀmtning av historiska data genom SSD.

Hur vi testade flera databaser för tidsserier

DÀrmed lyckades vi hÀmta fÀrska tvÄveckorsdata med en detaljeringsgrad ner till sekunden pÄ 200 ms fram till den fullstÀndiga renderingstiden, och vi levde med det systemet ganska lÀnge.

Under tiden gick tiden och mÀngden data vÀxte. Vid 2016 Ärs slut nÄdde datamÀngderna tiotals terabyte, vilket var en betydande kostnad för hyrda SSD-lagringar.

Vid denna tidpunkt hade kolumnbaserade databaser blivit populÀra, som vi började tÀnka pÄ: i kolumnbaserade databaser lagras data, som namnet antyder, i kolumner, och om man ser pÄ vÄra data kan man lÀtt se ett stort antal dubbletter, som i fallet med anvÀndning av en kolumnbaserad databas skulle kunna komprimeras.

Hur vi testade flera databaser för tidsserier

Men det kritiska systemet för företagets verksamhet fortsatte att fungera stabilt, och vi ville inte experimentera med att byta till nÄgot annat.

År 2017 pĂ„ konferensen Percona Live i San Jose gjorde Clickhouse-utvecklarna förmodligen sin första stora presentation. Vid första anblick verka systemet vara produktion-klar (Yandex.Metrica Ă€r trots allt en tuff produktion), supporten var snabb och enkel, och framförallt, driften var okomplicerad. FrĂ„n och med Ă„r 2018 pĂ„började vi övergĂ„ngsprocessen. Men vid den tiden fanns det mĂ„nga 'mogna' och vĂ€lbeprövade TSDB-system, och vi beslutade att avsĂ€tta betydande tid för att jĂ€mföra alternativ, för att sĂ€kerstĂ€lla att det inte fanns nĂ„gra alternativ till Clickhouse som uppfyllde vĂ„ra krav.

Utöver de redan angivna kraven pÄ lagringssystemet tillkom nya:

  • det nya systemet ska ge Ă„tminstone samma prestanda som MySQL, pĂ„ samma hĂ„rdvarukonfiguration;
  • lagringssystemet för den nya plattformen ska ta upp betydligt mindre utrymme;
  • DBMS:en ska fortfarande vara enkel att hantera;
  • vi ville minimera förĂ€ndringarna i applikationen vid byte av DBMS.

Vilka system började vi övervÀga

Apache Hive/Apache Impala
Den gamla pÄlitliga Hadoop-stacken. I grund och botten Àr detta ett SQL-grÀnssnitt byggt ovanpÄ lagring av data i egna format pÄ HDFS.

Fördelar.

  • Vid stabil drift Ă€r det mycket enkelt att skala data.
  • Det finns kolumnbaserade lösningar för datalagring (mindre utrymme).
  • Mycket snabb exekvering av parallella uppgifter med tillrĂ€ckliga resurser.

Nackdelar.

  • Det Ă€r Hadoop, och det Ă€r komplicerat att hantera. Om vi inte Ă€r redo att ta ett fĂ€rdigt molnlösning (vilket vi inte Ă€r kostnadsmĂ€ssigt), mĂ„ste hela stacken byggas och underhĂ„llas av administratörer, vilket vi verkligen vill undvika.
  • Data aggregeras verkligen snabbt.

Men:

Hur vi testade flera databaser för tidsserier

Hastigheten uppnĂ„s genom att öka antalet berĂ€kningsservrar. Enkelt uttryckt, om vi Ă€r ett stort företag, arbetar med analys och det Ă€r kritiskt för affĂ€ren att aggregera informationen sĂ„ snabbt som möjligt (Ă€ven pĂ„ bekostnad av att anvĂ€nda en stor mĂ€ngd berĂ€kningsresurser) — kan detta vara vĂ„rt val. Men vi var inte redo att kraftigt öka hĂ„rdvaruflottan för att uppnĂ„ snabbhet i uppgifternas utförande.

Druid/Pinot

Mycket mer specifikt om TSDB, men Ă„terigen — Hadoop-stacken.

Det finns utmÀrkt artikel som jÀmför fördelarna och nackdelarna med Druid och Pinot i jÀmförelse med ClickHouse .

Om man sammanfattar: Druid/Pinot ser bÀttre ut Àn Clickhouse i fall dÀr:

  • Du har en heterogen datakaraktĂ€r (i vĂ„rt fall registrerar vi bara tidsserier av servermetrik, och i grunden handlar det om en tabell. Men det kan finnas andra fall: tidsserier frĂ„n utrustning, ekonomiska tidsserier osv. — var och en med sin egen struktur, som mĂ„ste aggregeras och bearbetas).
  • Det finns mycket av dessa data.
  • Tabeller och data med tidsserier dyker upp och försvinner (det vill sĂ€ga att en datamĂ€ngd har kommit, har analyserats och sedan tagits bort).
  • Det finns inget tydligt kriterium för hur data kan partitioneras.

I motsatta fall presterar ClickHouse bÀttre, och det Àr vÄrt fall.

ClickHouse

  • SQL-liknande.
  • Enkel att hantera.
  • Folk sĂ€ger att den fungerar.

Kommer med pÄ testlistan.

InfluxDB

Utomland alternativ till ClickHouse. Nackdelar: Hög tillgÀnglighet finns endast i den kommersiella versionen, men det mÄste jÀmföras.

Kommer med pÄ testlistan.

Cassandra

Å ena sidan vet vi att den anvĂ€nds för att lagra metrisk tidsserie av system för övervakning som till exempel SignalFX eller OkMeter. Men det finns specifika aspekter.

Cassandra Àr inte en kolumndatabas i den traditionella bemÀrkelsen. Den ser mer ut som en radbaserad databas, men i varje rad kan det finnas ett varierande antal kolumner, vilket gör det lÀtt att organisera en kolumnrepresentation. DÀrför Àr det förstÄeligt att med en begrÀnsning pÄ 2 miljarder kolumner kan du lagra viss data i kolumner (som tidsserier). Till exempel har MySQL en begrÀnsning pÄ 4096 kolumner och det Àr lÀtt att stöta pÄ felkod 1117 om man försöker göra samma sak.

Cassandra-motorn Ă€r inriktad pĂ„ lagring av stora mĂ€ngder data i ett distribuerat system utan en master, och i den ovan nĂ€mnda CAP-teorin handlar Cassandra mer om AP, det vill sĂ€ga tillgĂ€nglighet av data och motstĂ„ndskraft mot partitionering. DĂ€rför kan detta verktyg vara utmĂ€rkt om det endast behövs skriva till denna databas och sĂ€llan lĂ€sa frĂ„n den. HĂ€r Ă€r det logiskt att anvĂ€nda Cassandra som ett "kallt" lagringsalternativ. Det vill sĂ€ga som en lĂ„ngsiktig och pĂ„litlig plats för att lagra stora mĂ€ngder historiska data som sĂ€llan krĂ€vs, men som kan hĂ€mtas vid behov. För att ge en fullstĂ€ndig bild kommer vi dock att testa det ocksĂ„. Men som jag nĂ€mnde tidigare, finns det ingen önskan att aktivt omarbeta koden för den valda databaslösningen, sĂ„ vi kommer att testa det pĂ„ ett begrĂ€nsat sĂ€tt – utan att anpassa databasstrukturen efter Cassandras specifikationer.

Prometheus

Och av ren nyfikenhet beslöt vi oss för att testa prestandan hos Prometheus-lagringen – helt enkelt för att förstĂ„ om vi Ă€r snabbare eller lĂ„ngsammare Ă€n de nuvarande lösningarna och hur mycket.

Metodik och testresultat

SÄ, vi testade 5 databaser i följande 6 konfigurationer: ClickHouse (1 nod), ClickHouse (distribuerad tabell pÄ 3 noder), InfluxDB, Mysql 8, Cassandra (3 noder) och Prometheus. Testplanen Àr följande:

  1. vi laddar upp historiska data för en vecka (840 miljoner vÀrden per dag; 208 tusen mÀtningar);
  2. vi genererar en skrivbelastning (vi övervÀgde 6 belastningslÀgen, se nedan);
  3. parallellt med skrivningen gör vi periodiska förfrÄgningar, som simulerar anvÀndarfrÄgor som arbetar med grafer. För att inte komplicera för mycket valde vi att anvÀnda data frÄn 10 mÀtningar (just sÄ mÄnga finns pÄ CPU-grafen) under en vecka.

Vi belastar genom att simulera beteendet hos vÄr övervakningsagent, som skickar vÀrden till varje mÀtning var 15:e sekund. Vi Àr intresserade av att variera:

  • det totala antalet mĂ€tningar som data skrivs till;
  • intervallet för att skicka vĂ€rden till en mĂ€tning;
  • batchstorleken.

Om batchstorleken. Eftersom nÀstan alla vÄra testdatabaser inte rekommenderas att belasta med enskilda insÀttningar, behöver vi en relay som samlar in de inkommande mÀtningarna och grupperar dem nÄgot och sedan skriver till databasen med batchinsert.

För att bÀttre förstÄ hur vi senare ska tolka de erhÄllna data, tÀnk pÄ att vi inte bara skickar en massa metrik, utan att metrik Àr organiserade i servrar - med 125 metrik per server. HÀr Àr servern bara en virtuell entitet - för att förstÄ att, till exempel, 10000 metrik motsvarar ungefÀr 80 servrar.

Och med hÀnsyn till allt detta, vÄra 6 lastlÀgen för databasen vid skrivning:

Hur vi testade flera databaser för tidsserier

Det finns tvÄ saker att notera. För det första, för Cassandra visade sig dessa batchstorlekar vara för stora, dÀr anvÀnde vi vÀrdena 50 eller 100. För det andra, eftersom Prometheus fungerar strikt i pull-lÀge, det vill sÀga att den sjÀlv gÄr och hÀmtar data frÄn metrik-kÀllor (och Àven pushgateway, trots namnet, förÀndrar i grunden inte situationen), implementerades motsvarande belastningar med en kombination av statiska konfigurationer.

Testresultaten Àr följande:

Hur vi testade flera databaser för tidsserier

Hur vi testade flera databaser för tidsserier

Hur vi testade flera databaser för tidsserier

Vad som Àr vÀrt att notera: fantastiskt snabba urval frÄn Prometheus, fruktansvÀrt lÄngsamma urval frÄn Cassandra, oacceptabelt lÄngsamma urval frÄn InfluxDB; nÀr det kommer till skrivhastighet vann ClickHouse överlÀgset, och Prometheus deltog inte i tÀvlingen eftersom den gör insÀttningar sjÀlv internt och vi mÀter ingenting.

I slutÀndan: ClickHouse och InfluxDB visade sig vara bÀst, men en kluster av Influx kan bara byggas pÄ grundval av Enterprise-versionen som kostar pengar, medan ClickHouse Àr gratis och tillverkas i Ryssland. Det Àr rimligt att valet i USA, förmodar jag, Àr i riktning mot InfluxDB, medan vi föredrar ClickHouse.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster