Kuidas me testisime mitmeid ajareadade andmebaase

Kuidas me testisime mitmeid ajareadade andmebaase

Viimastel aastatel on ajareaktsioonide andmebaasid muutunud haruldasest nĂ€htusest (spetsialiseeritud peamiselt kas avatud seire-sĂŒsteemides vĂ”i Big Data projektides) „rahvatooteks“. Venemaal on selle eest erilised tĂ€nud Jaandekse ja ClickHouse’i suunas. Enne seda, kui teil oli vajalik salvestada suur hulk ajareaktsioonide andmeid, pidi olema kas valmis ĂŒles tĂ”stma monstratiivse Hadoopi virna ja seda haldama vĂ”i suhtlema teie sĂŒsteemile individuaalsete protokollidega.

VĂ”ib tunduda, et 2019. aastal koosneks artikkel sellest, millist TSDB-d kasutada, ainult ĂŒhest lausest: „lihtsalt kasutage ClickHouse’i“. Kuid... on nĂŒansse.

TĂ”epoolest, ClickHouse areneb kiiresti, kasutajaskond kasvab ja toetus on aktiivne, kuid kas me pole saanud ClickHouse’i avaliku edusöödu vangideks, mis on varju visanud teised, vĂ”ib-olla tĂ”husamad/usaldusvÀÀrsemad lahendused?

Eelmisel aastal alustasime oma seire-sĂŒsteemi ĂŒmberdisainimist, mille kĂ€igus tĂ”usis kĂŒsimus sobiva andmebaasi valimise ĂŒle. Soovin jagada siin selle valiku ajalugu.

Ülesande seadmine

KĂ”igepealt — vajalik eelkommendi. Miks me vajame omamoodi seire-sĂŒsteemi ja kuidas see toimis?

Alustasime tugiteenuste osutamist 2008. aastal, ja 2010. aastaks sai selgeks, et klientide infrastruktuuridest saadud andmete kogumine olemasolevate lahendustega (me rÀÀgime, palun, Cacti’st, Zabbixist ja tekkivast Graphitest) muutus keeruliseks.

Meie peamised nÔuded olid:

  • toetamine (sel hetkel — kĂŒmnete, tulevikus — sadade) klientide raamistikus ja samas keskline teavitamissĂŒsteem;
  • paindlikkus teavitamissĂŒsteemi haldamisel (teavituste eskaleerimine vahetult vastutajate vahel, ajakava arvestamine, teadmusbaas);
  • vĂ”imalus detailseks graafikute detailimiseks (Zabbix joonistas sel hetkel graafikuid piltidena);
  • pikaajaline suurte andmehulkade sĂ€ilitamine (aasta vĂ”i rohkem) ja nende kiire leidmine.

KĂ€esolevas 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 ning tal olema aktiivne kasutajabaas ja tugi (oleme kunagi pidanud toetama selliseid sĂŒsteeme nagu MemcacheDB, mida enam ei arendatud, vĂ”i jaotatud salvestust MooseFS, mille bug tracker oli hiina keeles: me ei tahtnud oma projektiga seda ajalugu korrata);
  • CAP-teoreemi jĂ€rgimine: Consistency (vajalik) — andmed peavad olema ajakohased, me ei soovi, et teavitushaldussĂŒsteem ei saaks uusi andmeid ja annaks hĂ€ireid, et andmeid ei ole jĂ”udnud kĂ”igisse projektidesse; Partition Tolerance (vajalik) — me ei soovi saada Split Brain sĂŒsteemi; Availability (ei ole kriitiline, kui olemas on aktiivne koopia) — saame ise lĂŒlituda varusĂŒsteemile, kui juhtub avarii, koodiga.

Ometi, kummalisel kombel, oli sel hetkel meie jaoks ideaalne lahendus MySQL. Meie andmestruktuur oli ÀÀrmiselt lihtne: serveri id, arvesti id, timestamp ja vÀÀrtus; kiire kuumade andmete valik tagati suure buffer pool'i suuruse, ajalooliste andmete valik — SSD.

Kuidas me testisime mitmeid ajareadade andmebaase

Nii saavutasime vĂ€rskete kahe nĂ€dala andmete valiku, sekundi detailsusega 200 ms enne andmete tĂ€ielikku joonistamist, ja elasime selles sĂŒsteemis ĂŒsna kaua.

Vahepeal möödus aeg ja andmete hulk kasvas. 2016. aastaks ulatus andmehulk kĂŒmnete terabaitideni, mis renditud SSD-salvestuste puhul oli mĂ€rkimisvÀÀrne kulu.

Selleks ajaks oli suurenenud kolonnandmebaaside levik, mille ĂŒle hakkasime aktiivselt mĂ”tlema: kolonnandmebaasides hoitakse andmeid, nagu vĂ”ime aru saada, kolonnide kaupa, ja kui vaadata meie andmeid, on lihtne nĂ€ha suurt hulka dublette, mida vĂ”iks kolonnandmebaasi kasutamisel tihendamisega kokku suruda.

Kuidas me testisime mitmeid ajareadade andmebaase

Siiski töötas ettevĂ”tte jaoks vĂ”tmesĂŒsteem stabiilselt edasi ja ei olnud soovi katsetada millegi teisega ĂŒleminekut.

2017. aastal toimunud Percona Live konverentsil San JosĂ©'s teatas esmakordselt endast Clickhouse'i arendajad. Esmapilgul nĂ€is sĂŒsteem tootmisvalmis olevat (noh, Yandex.Metrika — see on karm tootmine), tugi oli kiire ja lihtne ning mis kĂ”ige tĂ€htsam, haldamine oli lihtne. Alates 2018. aastast alustasime ĂŒlemineku protsessi. Kuid toona oli palju 'kĂŒpseid' ja ajaga proovitud TSDB-sĂŒsteeme ning otsustasime eraldada mĂ€rkimisvÀÀrse aja alternatiivide vĂ”rdlemiseks, et veenduda, et meie nĂ”uetega vastavaid alternatiive Clickhouse'ile ei ole.

Lisaks juba mainitud nÔuetele andmete hoidmiseks ilmusid uued:

  • uus sĂŒsteem peab tagama vĂ€hemalt sama jĂ”udluse nagu MySQL, samade riistvararessursside juures;
  • uue sĂŒsteemi andmehoidla maht peab olema oluliselt vĂ€iksem;
  • Andmebaas peab endiselt olema lihtne hallata;
  • soovisime, et rakendust oleks minimaalne muuta andmebaasi vahetusel.

Milliseid sĂŒsteeme hakkasime vaatama

Apache Hive/Apache Impala
KĂŒps ja laialdaselt testitud Hadoopi tehnoloogiast. Tegelikult on see SQL-liides, mis on ĂŒles ehitatud andmete hoidmisele oma formaatides HDFS-is.

Plussid.

  • Stabiilses töökorralduses on andmete skaleerimine vĂ€ga lihtne.
  • On olemas veergude lahendused andmete hoidmiseks (vĂ€hem ruumi).
  • Paralleelsete ĂŒlesannete tĂ€itmine on ressursside olemasolul vĂ€ga kiire.

Miinused.

  • See on Hadoop ja selle kasutamine on keeruline. Kui me ei ole valmis kasutama valmislahendust pilves (ja me ei ole hinna tĂ”ttu valmis), on kogu tehnoloogiaadministraatorite kĂ€tesse kokku koguda ja hallata ning seda ei oleks me vĂ€ga soovinud.
  • Andmed koondatakse tĂ”eliselt kiiresti.

Siiski:

Kuidas me testisime mitmeid ajareadade andmebaase

Kiirus saavutatakse arvutusserverite arvu skaleerimisega. TeisisĂ”nu, kui me oleme suur ettevĂ”te, tegeleme analĂŒĂŒtikaga ja Ă€ri jaoks on kriitiliselt oluline maksimumkiirusel teavet koondada (isegi kui see tĂ€hendab suurt hulka arvutusressursse), vĂ”ib see olla meie valik. Kuid me ei olnud valmis oluliselt suurendama riistvara parki ĂŒlesannete tĂ€itmise kiiruse nimel.

Druid/Pinot

Oleme juba palju lÀhemal konkreetselt TSDB-le, kuid jÀlle - Hadoopi tehnoloogia.

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

KokkuvÔttes: Druid/Pinot nÀivad Clickhouse'ist paremad olukordades, kui:

  • Teie andmed on heterogeensed (meie puhul salvestame ainult serveri mÔÔdikute ajaseeriaid ning see on sisuliselt ĂŒks tabel. Ent vĂ”ivad olla ka teised juhtumid: seadmete ajaseeriad, majanduslikud ajaseeriad jne — igaĂŒhel oma struktuur, mida tuleb kokku koguda ja töödelda).
  • Samuti on neid andmeid vĂ€ga palju.
  • Tabelid ja ajaseeriad tulevad ja kaovad (see tĂ€hendab, et mingisugune andmekogum saabub, seda analĂŒĂŒsitakse ja seejĂ€rel kustutatakse).
  • Pole selget kriteeriumi, mille alusel andmeid partitsioneerida.

Vastupidistes juhtudel töötab ClickHouse paremini, see kehtib meie kohta.

ClickHouse

  • SQL-sarnane.
  • Lihtne hallata.
  • Inimesed ĂŒtlevad, et see toimib.

JĂ”uab testimise lĂŒhinimekirja.

InfluxDB

VÀlismaine alternatiiv ClickHouse'ile. Puudusteks on: kÔrge saadavus on olemas ainult kommertsversioonis, kuid tuleks vÔrrelda.

JĂ”uab testimise lĂŒhinimekirja.

Cassandra

Ühest kĂŒljest teame, et seda kasutatakse mÔÔtmisajaseeriate salvestamiseks sellistes monitooringusĂŒsteemides nagu nĂ€iteks, SignalFX vĂ”i OkMeter. Siiski on siin omad eripĂ€rad.

Cassandra ei ole kolonnibaas andmebaas traditsioonilises mÔttes. See nÀeb pigem vÀlja nagu rea-aga igas reas vÔib olla erinev arv veerge, millega on lihtne korraldada kolonnide esitamist. Sel moel on mÔistetav, et 2 miljardi veeru piiri korral on vÔimalik salvestada andmeid just veergude kaupa (nÀiteks samu ajaseeriesid). NÀiteks MySQL-is on piirmÀÀraks 4096 veergu ja seal vÔivad kergesti esineda vead koodiga 1117, kui proovitakse teha sama.

Cassandra mootor on suunatud suurte andmehulkade salvestamisele jaotatud sĂŒsteemis ilma peamasterita, ning eelnevalt mainitud CAP-teoorias kaldub Cassandra rohkem AP-ile, st andmete kĂ€ttesaadavusele ja partitsioonide jagunemise taluvusele. SeetĂ”ttu sobib see tööriist suurepĂ€raselt, kui on vaja ainult kirjutada sellesse andmebaasi ja harva lugeda. Siin on loogiline kasutada Cassandrat kui „kĂŒlma“ salvestust. See tĂ€hendab, et tegemist on pikaajalise usaldusvÀÀrse kohaga suurte ajalooliste andmehulkade sĂ€ilitamiseks, mis on harva vajalikud, kuid kui vaja, saab neid kĂ€tte. Siiski, tĂ€ielikkuse huvides testime seda ka. Kuid nagu ma varem ĂŒtlesin, ei ole soovi aktiivselt koodi valitud andmebaasi lahenduse jĂ€rgi ĂŒmber kirjutada, seega testime seda veidi piiratud viisil — ilma andmebaasi struktuuri kohandamiseta Cassandra spetsiifilistele omadustele.

Prometheus

No ja juba huvi pĂ€rast otsustasime testida Prometheuse salvestusvĂ”imekust — lihtsalt selleks, et mĂ”ista, kas oleme kiiremad vĂ”i aeglasemad kui meie praegused lahendused ja kui palju.

Testimise metoodika ja tulemused

Nii, testisime 5 andmebaasi jÀrgmistes 6 konfiguratsioonis: ClickHouse (1 sÔlm), ClickHouse (jaotatud tabel 3 sÔlmega), InfluxDB, Mysql 8, Cassandra (3 sÔlme) ja Prometheus. Testimise plaan on jÀrgmine:

  1. laadime nÀdalase ajaloolise andmesisalduse (840 miljonit vÀÀrtust pÀevas; 208 tuhat mÔÔdikut);
  2. genereerime kirjutuskoormust (vaatasime 6 koormuse reĆŸiimi, vt allpool);
  3. samuti teeme perioodiliselt valimisi kirjutamise ajal, simuleerides kasutaja pÀringute tegemist, kes töötab diagrammidega. Liialt keeruliseks minemata valisime andmed 10 mÔÔdiku kohta (just nii palju neid CPU diagrammil on) nÀdalaks.

Koormame, simuleerides meie monitooringu agendi kÀitumist, kes saadab iga mÔÔdiku vÀÀrtused iga 15 sekundi tagant. Sellega seoses on meil huvi varieerida:

  • mÔÔdikutega, kuhu andmeid kirjutatakse;
  • vÀÀrtuste edastamise intervalli ĂŒhte mÔÔdikut;
  • partii suurust.

Partii suurusest. Kuna peaaegu kĂ”ik meie katseandmebaasid ei soovita koormata ĂŒksikute sissekannetega, on meil vaja relaat, mis kogub saabuvad mÔÔdikud ja grupeerib need mingisuguste jĂ€rgi ning kirjutab need andmebaasi partii sissekandega.

Samuti, et paremini mĂ”ista, kuidas hiljem saadud andmeid tĂ”lgendada, kujutame ette, et me ei saada lihtsalt kuhja mÔÔdikuid, vaid mÔÔdikud on korraldatud serverite kaupa — 125 mÔÔdikut serveri kohta. Siin on server lihtsalt virtuaalne entiteet — lihtsalt selleks, et mĂ”ista, et nĂ€iteks 10000 mÔÔdikut vastavad umbes 80 serverile.

Nii et silmas pidades meie kuut kirjutamisreĆŸiimi koormust:

Kuidas me testisime mitmeid ajareadade andmebaase

Siin on kaks aspekti. Esiteks, Cassandra jaoks olid sellised partiide suurused liiga suured, seal kasutasime vÀÀrtusi 50 vĂ”i 100. Teiseks, kuna Prometheus töötab rangelt pull-reĆŸiimis, st see lĂ€heb ise ja vĂ”tab andmeid mÔÔdikute allikatest (isegi pushgateway, vaatamata oma nimele, ei muuda olukorda), siis vastavad koormused olid realiseeritud statiilsete konfiguratsioonide kombinatsiooniga.

Testimise tulemused on jÀrgmised:

Kuidas me testisime mitmeid ajareadade andmebaase

Kuidas me testisime mitmeid ajareadade andmebaase

Kuidas me testisime mitmeid ajareadade andmebaase

Mida tasub mÀrkida: fantastiliselt kiired pÀringud Prometheuses, hÀbivÀÀrselt aeglased pÀringud Cassandra's, vastuvÔetamatult aeglased pÀringud InfluxDB-s; kirjutamise kiiruselt vÔitis ClickHouse, ning Prometheus ei osale konkursil, sest see teeb sisestused ise enda sees ja me ei mÔÔda midagi.

KokkuvÔttes: said parimaid tulemusi ClickHouse ja InfluxDB, kuid Influxi klastrit saab ehitada ainult Enterprise-versiooni pÔhjal, mis maksab raha, samas kui ClickHouse ei maksa midagi ja on valmistatud Venemaal. Loogiliselt, et USA-s eelistatakse tÔenÀoliselt InfluxDB-d, meie aga ClickHouse'i.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster