HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Vi kommer att titta pÄ Zabbix arbete med databasen TimescaleDB som backend. Vi visar hur man startar frÄn grunden och hur man migrerar frÄn PostgreSQL. Vi kommer ocksÄ att ge jÀmförande prestandatester av de tvÄ konfigurationerna.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

HighLoad++ Sibirien 2019. Sal "Tomsk". 24 juni, 16:00. Texter och presentation. NÀsta konferens HighLoad++ kommer att hÄllas den 6 och 7 april 2020 i Sankt Petersburg. Detaljer och biljetter via lÀnken.

Andrey Gushin (hĂ€danefter – AG): – Jag Ă€r ingenjör inom teknisk support för ZABBIX (hĂ€danefter – "Zabbix"), trĂ€nare. Jag har arbetat mer Ă€n 6 Ă„r inom teknisk support och har direkt erfarenhet av prestanda. Idag kommer jag att berĂ€tta om den prestanda som TimescaleDB kan erbjuda i jĂ€mförelse med vanlig PostgreSQL 10. Jag ger ocksĂ„ en viss introduktion – om hur det överhuvudtaget fungerar.

De största prestandautmaningarna: frÄn insamling till rensning av data

LÄt oss börja med att det finns vissa prestandautmaningar som varje övervakningssystem stöter pÄ. Den första prestandautmaningen Àr snabb insamling och bearbetning av data.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Ett bra övervakningssystem bör snabbt och i tid fÄ all information, bearbeta den i enlighet med triggeruttryck, det vill sÀga bearbeta den enligt vissa kriterier (detta varierar mellan olika system) och sedan spara den i databasen för framtida anvÀndning.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Den andra prestandautmaningen Àr att lagra historia. Att lagra data i databasen och samtidigt ha snabb och enkel tillgÄng till dessa mÀtvÀrden som samlats in under en viss tidsperiod. Det viktigaste Àr att det ska vara enkelt att fÄ tillgÄng till dessa uppgifter, anvÀnda dem i rapporter, diagram, triggertabeller, i nÄgot tröskelvÀrde, för meddelanden, osv.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Det tredje prestationsutmaningen Àr rensning av historik, det vill sÀga nÀr det kommer en dag dÄ du inte behöver lagra detaljerade mÀtningar som har samlats in under 5 Är (Àven mÄnader eller tvÄ mÄnader). Vissa nÀtverksnoder har tagits bort, eller vissa vÀrdar, mÀtningarna Àr redan onödiga eftersom de har blivit förÄldrade och inte lÀngre samlas in. Allt detta mÄste rensas bort sÄ att din databas inte vÀxer till en storlek. Och överlag Àr rensning av historik ofta en allvarlig prövning för lagringssystemet - det pÄverkar ofta prestandan mycket.

Hur löser man cache-problem?

Jag kommer nu att prata specifikt om "Zabbix". I "Zabbix" har den första och andra utmaningen lösts med hjÀlp av caching.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Insamling och bearbetning av data - vi anvÀnder RAM för att lagra all denna data. Nu kommer jag att berÀtta mer om dessa data.

Det finns ocksÄ viss caching pÄ databasnivÄ för huvudsakliga urval - för grafer och andra saker.

Caching pÄ sidan av sjÀlva Zabbix-servern: vi har ConfigurationCache, ValueCache, HistoryCache, TrendsCache. Vad Àr detta?

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

ConfigurationCache Àr den huvudsakliga cachen dÀr vi lagrar mÀtningar, vÀrdar, datainslag, trigger; allt som behövs för att bearbeta preprocessing, samla data, frÄn vilka vÀrdar man ska samla och med vilken frekvens. Allt detta lagras i ConfigurationCache sÄ att vi inte behöver gÄ till databasen och skapa onödiga förfrÄgningar. Efter serverstart uppdaterar vi denna cache (skapar) och uppdaterar den periodiskt (beroende pÄ konfigurationsinstÀllningarna).

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Caching i Zabbix. Datainsamling

HÀr Àr schemat ganska stort:

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

De viktigaste i schemat Àr dessa insamlare:

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Detta Àr sjÀlva insamlingsprocesserna, olika "pollers" som ansvarar för olika typer av insamlingar. De samlar in data via icmp, ipmi, olika protokoll och skickar allt detta för preprocessing.

PreProcessing HistoryCache

Om vi har berÀknade datainslag (de som Àr bekanta med "Zabbix" vet), det vill sÀga berÀknade, aggregationsdata - hÀmtar vi dem direkt frÄn ValueCache. Jag kommer att berÀtta mer om hur den fylls senare. Alla dessa insamlare anvÀnder ConfigurationCache för att hÀmta sina uppgifter och vidarebefordrar sedan till preprocessing.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Preprocesseringen anvÀnder Àven ConfigurationCache för att hÀmta preprocesseringstegen och bearbetar dessa data pÄ olika sÀtt. FrÄn och med version 4.2 har vi flyttat det till en proxy. Detta Àr mycket praktiskt eftersom sjÀlva preprocesseringen Àr en ganska tung operation. Och om du har en mycket stor 'Zabbix', med ett stort antal datatelement och hög insamlingsfrekvens, sÄ underlÀttar det arbetet avsevÀrt.

DÀrför, efter att vi har bearbetat dessa data pÄ nÄgot sÀtt med hjÀlp av preprocessering, sparar vi dem i HistoryCache för att vidare bearbeta dem. HÀr slutar datainsamlingen. Vi gÄr vidare till huvudprocessen.

Arbete med History syncer

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Huvudprocessen i 'Zabbix' (eftersom detta Àr en monolitisk arkitektur) Àr History syncer. Detta Àr huvudprocessen som sysslar med den atomÀra bearbetningen av varje datatelelement, det vill sÀga varje vÀrde:

  • ett vĂ€rde kommer in (den tar det frĂ„n HistoryCache);
  • kontrollerar i Configuration syncer: finns det nĂ„gra triggers för berĂ€kning – berĂ€knar dem;
    om det finns – skapar hĂ€ndelser, skapar eskaleringar för att generera ett meddelande om det Ă€r nödvĂ€ndigt enligt konfigurationen;
  • skriver triggers för vidare bearbetning, aggregering; om du aggregerar för den senaste timmen och sĂ„ vidare, sparar detta vĂ€rde ValueCache, sĂ„ att du inte behöver gĂ„ tillbaka till historiktabellen; pĂ„ sĂ„ sĂ€tt fylls ValueCache med de nödvĂ€ndiga data som behövs för att berĂ€kna triggers, berĂ€knade element och sĂ„ vidare;
  • sedan skriver History syncer all data till databasen;
  • databasen skriver dem till disken – vid denna punkt avslutas bearbetningsprocessen.

Databaser. Cachning

PÄ databassidan, nÀr du vill titta pÄ grafer eller rapporter om hÀndelser, finns det olika caches. Men inom ramen för denna presentation kommer jag inte att gÄ in pÄ dem.

För MySQL finns Innodb_buffer_pool, och en mÀngd olika andra cacher som ocksÄ kan konfigureras.
Men dessa Àr huvudpunkterna:

  • shared_buffers;
  • effective_cache_size;
  • shared_pool.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Jag har angivit för alla databaser att det finns specifika cacher som gör det möjligt att hÄlla i RAM de data som ofta behövs för förfrÄgningar. DÀr har de sina egna teknologier för detta.

Om databasens prestanda

Det finns en konkurrenssituation, vilket innebÀr att «Zabbix»-servern samlar in data och registrerar den. Vid omstart lÀser den ocksÄ frÄn historiken för att fylla ValueCache och sÄ vidare. HÀr kan ni ocksÄ ha skript och rapporter som anvÀnder «Zabbix»-API, som Àr byggt pÄ webbgrÀnssnittet. «Zabbix»-API gÄr in i databasen och hÀmtar nödvÀndig data för att skapa grafer, rapporter eller nÄgon lista över hÀndelser och senaste problem.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

En annan mycket populÀr lösning för visualisering Àr Grafana, som anvÀnds av vÄra kunder. Den kan direkt ansluta bÄde via «Zabbix»-API och via databasen. Det skapar ocksÄ en viss konkurrens för att hÀmta data: en mer detaljerad och bra instÀllning av databasen krÀvs för att kunna ge snabba resultat och tester.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Rensning av historik. I Zabbix finns Housekeeper.

Det tredje samtalet som anvÀnds i «Zabbix» Àr rensning av historik med hjÀlp av Housekeeper. «Housekeeper» följer alla instÀllningar, det vill sÀga att vi i datatekniskan har angivit hur lÀnge som ska sparas (i dagar), hur mycket som ska sparas av trender och dynamik i förÀndringar.

Jag nÀmnde inte TrendCache, som vi berÀknar i realtid: data kommer in, vi aggregerar dem pÄ en timme (frÀmst dessa Àr siffror frÄn den senaste timmen), medelvÀrde/minimum och registrerar detta en gÄng i timmen i tabellen för dynamik i förÀndringar («Trender»). «Housekeeper» körs och tar bort data frÄn databasen med vanliga select-kommandon, vilket inte alltid Àr effektivt.

Hur gör man för att förstÄ att detta Àr ineffektivt? PÄ prestationsgraferna för interna processer kan man se en sÄdan bild:

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Ert History syncer Àr stÀndigt upptaget (röd graf). Och den «orangea» grafen som gÄr ovanpÄ. Det Àr «Housekeeper», som körs och vÀntar pÄ databasen för att ta bort alla rader som den har angivit.

LĂ„t oss ta ett exempel pĂ„ Item ID: vi behöver ta bort de senaste 5 tusen; sjĂ€lvklart baserat pĂ„ index. Men vanligtvis Ă€r datasetet tillrĂ€ckligt stort – databasen lĂ€ser fortfarande detta frĂ„n disken och laddar upp i cache, vilket Ă€r en vĂ€ldigt kostsam operation för databasen. Beroende pĂ„ dess storlek kan detta orsaka vissa prestationsproblem.

Du kan enkelt stĂ€nga av "Housekeeper" – vi har det bekanta webbgrĂ€nssnittet. I Administration general (instĂ€llningar för "Housekeeper") stĂ€nger vi av intern housekeeping för intern historik och trender. DĂ€rför hanterar inte "Housekeeper" detta lĂ€ngre:

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Vad kan man göra hĂ€rnĂ€st? Du har stĂ€ngt av, dina diagram har stabiliserats
 Vilka problem kan uppstĂ„ hĂ€rnĂ€st? Vad kan hjĂ€lpa?

Partitionering

Detta stÀlls vanligtvis in för varje relationsdatabas som jag har nÀmnt pÄ olika sÀtt. MySQL har sin egen teknologi. Men generellt sett Àr de mycket lika om man pratar om PostgreSQL 10 och MySQL. SjÀlvklart finns det mÄnga interna skillnader i hur detta Àr implementerat och hur det pÄverkar prestandan. Men totalt sett leder skapandet av en ny partition ofta ocksÄ till vissa problem.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Beroende pĂ„ din setup (hur mycket data som skapas pĂ„ en dag), anger man vanligtvis den minsta – det Ă€r 1 dag/partition, och för "trender", dynamiken av förĂ€ndringar – 1 mĂ„nad / ny partition. Detta kan Ă€ndras om du har en vĂ€ldigt stor setup.

LĂ„t mig direkt sĂ€ga nĂ„got om storlekarna pĂ„ setup: upp till 5 000 nya vĂ€rden per sekund (sĂ„ kallade nvps) rĂ€knas som en liten setup. Medium – frĂ„n 5 000 till 25 000 vĂ€rden per sekund. Allt över det Ă€r stora och mycket stora installationer som krĂ€ver mycket noggrann konfiguration av just databasen.

Vid mycket stora installationer Àr 1 dag kanske inte optimalt. Jag har personligen sett MySQL-partitioner pÄ 40 gigabyte per dag (och mer kan förekomma). Detta Àr en mycket stor datavolym som kan orsaka nÄgra problem. Det behöver minskas.

Varför behövs partitionering?

Vad ger partitionering, tror jag att alla vet – det Ă€r sektorisering av tabeller. Ofta Ă€r det separata filer pĂ„ disken och spĂ€nningsfrĂ„gor. Det vĂ€ljer mer optimalt en partition om det ingĂ„r i den vanliga partitioneringen.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

För «Zabbix» anvÀnds det specifikt inom ett intervall, det vill sÀga vi anvÀnder en tidsstÀmpel (ett vanligt nummer, tiden sedan epoken började). Du stÀller in början av dagen / slutet av dagen, och detta fungerar som partition. Om du begÀr data frÄn tvÄ dagar tillbaka, hÀmtas allt detta frÄn databasen snabbare, eftersom endast en fil behöver laddas in i cachen och levereras (och inte en stor tabell).

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

MÄnga databaser snabbar ocksÄ upp insÀttningar (inlÀgg i en child-tabell). Jag pratar fortfarande abstrakt, men detta Àr ocksÄ möjligt. Partitionering hjÀlper ofta.

Elasticsearch för NoSQL

Nyligen, i version 3.4, implementerade vi en lösning för NoSQL. Vi lade till möjligheten att skriva till Elasticsearch. Du kan skriva vissa typer: vĂ€lja – antingen skriva siffror eller specifika tecken; vi har strĂ€ngtext, loggar kan skrivas till Elasticsearch
 WebbgrĂ€nssnittet kommer ocksĂ„ att kommunicera med Elasticsearch. Detta fungerar utmĂ€rkt i vissa fall, men för tillfĂ€llet kan detta anvĂ€ndas.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

TimescaleDB. Hypertabeller

För 4.4.2 observerade vi en sak, kring TimescaleDB. Vad Àr det? Det Àr en tillÀgg för «Postgres», vilket innebÀr att det har ett inhemskt PostgreSQL-grÀnssnitt. Dessutom tillÄter detta tillÀgg att arbeta mycket effektivare med tidsseriedata och ha automatisk partitionering. SÄ hÀr ser det ut:

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Detta Ă€r en hypertabell – det Ă€r ett begrepp inom Timescale. Det Ă€r en hypertabell som du skapar, och i den finns det chunkar. Chunkar Ă€r partitioner, det Ă€r child-tabeller, om jag inte minns fel. Detta Ă€r verkligen effektivt.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

TimescaleDB och PostgreSQL

Som tillverkarna av TimescaleDB försÀkrar, anvÀnder de en mer korrekt algoritm för att bearbeta förfrÄgningar, sÀrskilt insÀttningar, vilket möjliggör ungefÀr konstant prestanda vid ökande storlek pÄ dataset-inlÀgg. Det betyder att efter 200 miljoner rader börjar vanlig «Postgres» att kraftigt försÀmras och tappar prestanda bokstavligen till noll, medan «Timescale» möjliggör insÀttningar sÄ effektivt som möjligt oavsett datamÀngd.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Hur installerar man TimescaleDB? Det Àr enkelt!

Det finns beskrivningar i dokumentationen – det kan installeras frĂ„n paket för alla
 Det beror pĂ„ de officiella paketen för «Postgres». Man kan kompilera manuellt. Det rĂ„kade bli sĂ„ att jag behövde kompilera för databasen.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

PÄ "Zabbix" aktiverar vi bara Extention. Jag tror att de som har anvÀnt Extention i "PostgreSQL"... Du aktiverar bara Extention, skapar den för databasen "Zabbix" som du anvÀnder.

Och det sista steget...

TimescaleDB. Migration av historiktabeller

Du behöver skapa en hypertable. Det finns en speciell funktion för detta – Create hypertable. I den anger du som första parameter den tabell som behövs i denna databas (för vilken du vill skapa hypertabellen).

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

FĂ€ltet som ska skapas och chunk_time_interval (detta Ă€r tidsintervallet för chunkar (partitioner) som ska anvĂ€ndas). 86 400 – det Ă€r en dag.

Parameter migrate_data: om du sÀtter den till true, sÄ flyttar den alla aktuella data till förut skapade chunkar.

Jag anvĂ€nde sjĂ€lv migrate_data – det tar en hel del tid, beroende pĂ„ storleken pĂ„ din databas. Jag hade över en terabyte – skapandet tog mer Ă€n en timme. I vissa fall under testning tog jag bort historiska data för text (history_text) och strĂ€ng (history_str) för att inte flytta dem – jag var egentligen inte intresserad av dem.

Och den sista uppdateringen gör vi i vÄr db_extention: vi installerar timescaledb, sÄ att databasen och, speciellt vÄr "Zabbix", förstÄr att det finns en db_extention. Den aktiverar den och anvÀnder korrekt syntax och frÄgor till databasen, med de "funktioner" som Àr nödvÀndiga för TimescaleDB.

Serverkonfiguration

Jag anvÀnde tvÄ servrar. Den första servern Àr en ganska liten virtuell maskin, 20 processorer, 16 gigabyte RAM. Jag installerade "PostgreSQL" 10.8 pÄ den:

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Operativsystemet var Debian, filsystemet – xfs. Jag gjorde minimala instĂ€llningar för att anvĂ€nda just denna databas, med undantag av vad som kommer att anvĂ€ndas av "Zabbix" sjĂ€lv. PĂ„ samma maskin var "Zabbix"-servern, PostgreSQL och belastningsagenterna installerade.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Jag anvĂ€nde 50 aktiva agenter som anvĂ€nder LoadableModule för att snabbt generera olika resultat. De genererade rader, nummer och sĂ„ vidare. Jag fyllde databasen med en stor mĂ€ngd data. Ursprungligen innehöll konfigurationen 5 000 datakElement per vĂ€rd, och varje datakElement hade en trigger – för att det skulle vara en riktig setup. Ibland krĂ€vs till och med mer Ă€n en trigger för anvĂ€ndning.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Uppdateringsintervallet, sjÀlva belastningen justerade jag genom att inte bara anvÀnda 50 agenter (jag lade till fler) utan ocksÄ med hjÀlp av dynamiska datadelar och sÀnkte uppdateringsintervallet till 4 sekunder.

Prestandatest. PostgreSQL: 36 tusen NVP:er

Den första starten, första installationen hade jag pĂ„ ren PostgreSQL 10 pĂ„ denna hĂ„rdvara (35 tusen vĂ€rden per sekund). Som man kan se pĂ„ skĂ€rmen tar datainförseln brĂ„kdelar av en sekund – allt fungerar bra och snabbt, SSD-enheter (200 gigabyte). Det enda som Ă€r att 20 GB fylls snabbt.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Det kommer att finnas mÄnga sÄdana grafer framöver. Detta Àr den standardprestandaöversikten för Zabbix-servern.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Den första grafen – antalet vĂ€rden per sekund (blĂ„, högst upp till vĂ€nster), 35 tusen vĂ€rden i detta fall. Detta (uppe i mitten) Ă€r belastningen pĂ„ processerna för insamling, och detta (uppe till höger) – belastningen pĂ„ sjĂ€lva interna processerna: history syncers och housekeeper, som hĂ€r (nere i mitten) utfördes under en viss tid.

Denna graf (nere i mitten) visar anvĂ€ndningen av ValueCache – hur mĂ„nga trĂ€ffar ValueCache har för triggers (flera tusen vĂ€rden per sekund). En annan viktig graf – den fjĂ€rde (nere till vĂ€nster), som visar anvĂ€ndningen av HistoryCache, som jag nĂ€mnde, som Ă€r en buffer före införsel i databasen.

Prestandatest. PostgreSQL: 50 tusen NVP:er

DÀrefter ökade jag belastningen till 50 tusen vÀrden per sekund pÄ samma hÄrdvara. Vid insamling med Housekeeper skrevs 10 tusen vÀrden in pÄ 2-3 sekunder med berÀkningar. Det som faktiskt visas pÄ nÀsta skÀrmdump:

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Housekeeper börjat störa arbetet, men i stort sett ligger belastningen pÄ history syncers fortfarande pÄ 60 % (den tredje grafen, uppe till höger). HistoryCache började aktivera och fyllas under Housekeepers arbete (nere till vÀnster). Den var omkring en halv gigabyte, fylldes med 20%.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Prestandatest. PostgreSQL: 80 tusen NVP:er

Jag ökade sedan till 80 tusen vÀrden per sekund:

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Det handlade om cirka 400 000 datapunkter och 280 000 triggers. Införandet, som ni ser, var redan ganska hög med belastningen av history-syncers (det fanns 30 av dem). Jag ökade dĂ€refter olika parametrar: history-syncers, cache
 PĂ„ den hĂ€r hĂ„rdvaran började belastningen av history-syncers öka till max, nĂ€stan 'i taket' – dĂ€rför gick HistoryCache till mycket hög belastning:

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Under hela denna tid har jag övervakat alla systemparametrar (hur CPU:n anvĂ€nds, RAM-minnet) och upptĂ€ckte att diskutnyttjandet var maximalt – jag hade uppnĂ„tt maximal kapacitet pĂ„ denna disk pĂ„ denna hĂ„rdvara, pĂ„ denna virtuella maskin. 'Postgres' började dumpa data ganska aktivt vid denna intensitet, och disken hann inte med att skriva eller lĂ€sa


HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Jag tog en annan server som redan hade 48 processorer och 128 gigabyte RAM-minne:

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Jag 'tunade' ocksĂ„ den – installerade 60 History syncers och uppnĂ„dde acceptabel prestanda. Egentligen Ă€r vi inte 'i taket', men det Ă€r nog redan grĂ€nsen för prestandan dĂ€r man verkligen behöver ta nĂ„got steg.

Prestandatest. TimescaleDB: 80 000 NVPs

Min huvuduppgift var att anvÀnda TimescaleDB. PÄ varje graf syns ett fall:

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Dessa fall Ă€r just datamigreringen. Efter detta har profilen för belastningen av history-syncers i 'Zabbix'-servern, som ni ser, förĂ€ndrats kraftigt. Den möjliggör nĂ€stan tre gĂ„nger snabbare infogning av data och anvĂ€nder mindre HistoryCache – dĂ€rmed kommer ni att fĂ„ data i tid. Återigen, 80 000 vĂ€rden per sekund – det Ă€r ett ganska högt rate (naturligtvis inte för 'Yandex'). Överlag Ă€r detta en ganska stor setup, med en server.

Prestandatest av PostgreSQL: 120 000 NVPs

Sedan ökade jag antalet datapunkter till en halv miljon och fick ett berÀknat vÀrde av 125 000 per sekund:

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Och fick sÄdana hÀr grafer:

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

I princip Àr detta en fungerande setup, den kan fungera ganska lÀnge. Men eftersom jag hade en disk pÄ endast 1,5 terabyte förbrukade jag den pÄ ett par dagar. Det viktigaste Àr att nya partitioner skapades pÄ TimescaleDB samtidigt, och det pÄverkade prestandan helt osynligt, vilket inte gÄr att sÀga om MySQL.

Vanligtvis skapas partitioner pÄ natten eftersom det blockerar all insÀttning och arbete med tabeller, vilket kan leda till degradering av tjÀnsten. I det hÀr fallet Àr det inte sÄ! Huvuduppgiften var att kontrollera möjligheterna med TimescaleDB. Resultatet blev: 120 000 vÀrden per sekund.

Det finns ocksÄ exempel i "communityn":

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

En person aktiverade ocksÄ TimescaleDB och belastningen frÄn io.weight sjönk pÄ processorn; och anvÀndningen av interna processkomponenter minskade ocksÄ tack vare aktiveringen av TimescaleDB. Och det Àr vanliga hÄrddiskar, det vill sÀga en vanlig virtuell maskin pÄ vanliga diskar (inte SSD)!

För vissa smÄ setup:ar som Àr begrÀnsade av diskens prestanda, tycker jag att TimescaleDB Àr en mycket bra lösning. Det lÄter er fortsÀtta arbeta tills ni migrerar till snabbare hÄrdvara för databasen.

Jag bjuder in er alla till vĂ„ra evenemang: Conference – i Moskva, Summit – i Riga. AnvĂ€nd vĂ„ra kanaler – "Telegram", forum, IRC. Om ni har nĂ„gra frĂ„gor – kom gĂ€rna till vĂ„r disk, vi kan prata om allt.

FrÄgor frÄn publiken

FrĂ„ga frĂ„n publiken (nedan – A): – Om TimescaleDB Ă€r sĂ„ enkelt att konfigurera, och ger en sĂ„dan prestandaökning, kanske det Ă€r vĂ€rt att anvĂ€nda som bĂ€sta praxis för att konfigurera "Zabbix" med "Postgres"? Finns det nĂ„gra fallgropar eller nackdelar med denna lösning, eller om jag har bestĂ€mt mig för att anvĂ€nda "Zabbix", kan jag dĂ„ lugnt ta "Postgres", installera "Timescale" dĂ€r direkt, anvĂ€nda det och inte tĂ€nka pĂ„ nĂ„gra problem?

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

AG: – Ja, jag skulle sĂ€ga att det Ă€r en bra rekommendation: att anvĂ€nda "Postgres" direkt med TimescaleDB-tillĂ€gget. Som jag redan har sagt, har jag hört mĂ„nga goda omdömen, trots att denna "funktion" Ă€r experimentell. Men tester visar faktiskt att det Ă€r en utmĂ€rkt lösning (med TimescaleDB), och jag tror att den kommer att utvecklas! Vi följer hur detta tillĂ€gg utvecklas och kommer att justera det som behövs.

Under utvecklingen lutade vi oss till och med pĂ„ en av deras kĂ€nda "funktioner": dĂ€r kunde man arbeta med chunks pĂ„ ett lite annat sĂ€tt. Men sedan tog de bort det i nĂ€sta version, och vi tvingades sluta förlita oss pĂ„ den koden. Jag skulle rekommendera att anvĂ€nda denna lösning pĂ„ mĂ„nga setup:ar. Om du anvĂ€nder MySQL
 För medelstora setup:ar fungerar vilken lösning som helst ganska bra.

A: – PĂ„ de senaste graferna frĂ„n communityn fanns det en graf med "Housekeeper":

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Han fortsatte att arbeta. Vad gör "Housekeeper" i fallet med TimescaleDB?

AG: – Jag kan inte sĂ€ga exakt just nu – jag ska kolla koden och ge en mer detaljerad förklaring. Han anvĂ€nder förfrĂ„gningar exakt frĂ„n TimescaleDB inte för att ta bort chunks, utan han aggregerar pĂ„ nĂ„got sĂ€tt. Jag Ă€r inte redo att svara pĂ„ den tekniska frĂ„gan Ă€n. Vi kommer att klargöra det pĂ„ mĂ€ssan idag eller imorgon.

A: – Jag har en liknande frĂ„ga – om prestandan vid borttagning av data i "Timescale".
A (svar frĂ„n publiken): – NĂ€r du tar bort data frĂ„n tabellen, om du gör det genom delete, sĂ„ mĂ„ste du gĂ„ igenom tabellen – ta bort, rensa, mĂ€rka allt för framtida vakuum. I "Timescale", eftersom du har chunks, kan du droppa. Rent konkret sĂ€ger du bara till filen som ligger i big data: "Ta bort!"

"Timescale" förstĂ„r helt enkelt att den chunken inte lĂ€ngre finns. Och eftersom den integreras i frĂ„geplaneraren fĂ„ngar den upp dina villkor i select-satsen eller andra operationer och förstĂ„r direkt att den chunken inte lĂ€ngre existerar – "Jag gĂ„r inte dit lĂ€ngre!" (data saknas). SĂ„ Ă€r det! Det vill sĂ€ga att tabellscanningen ersĂ€tts med borttagning av en binĂ€r fil, vilket gör det snabbt.

A: – Vi har redan berört Ă€mnet icke-SQL. SĂ„vitt jag förstĂ„r behöver "Zabbix" inte modifiera data sĂ€rskilt mycket, utan allt detta Ă€r nĂ„got som ett logg. Kan man anvĂ€nda specialiserade databaser som inte kan förĂ€ndra sina data, men som samtidigt mycket snabbare lagrar, ackumulerar och ger – Clickhouse, till exempel nĂ„got kafkaliknande? .. Kafka Ă€r ju ocksĂ„ en logg! Kan de integreras pĂ„ nĂ„got sĂ€tt?

AG: – Export kan göras. Vi har en viss "funktion" frĂ„n version 3.4: du kan skriva alla historiska filer, hĂ€ndelser och allt annat till filer; och sedan skickar du det med nĂ„gon typ av processor till vilken annan databas som helst. Faktiskt Ă€r det mĂ„nga som gör om det och skriver direkt till databasen. Ögonblickligt skriver histori-synkronisatorerna allt detta till filer, roterar dessa filer med mera, och detta kan du överföra till "Clickhouse". Jag kan inte sĂ€ga nĂ„got om planerna, men det Ă€r möjligt att vidare stöd för NoSQL-lösningar (som "Clickhouse") kommer att fortsĂ€tta.

A: – SĂ„ det gĂ„r verkligen att helt bli av med PostgreSQL?

AG: – SjĂ€lvklart, den mest utmanande delen i "Zabbix" Ă€r historiska tabeller som skapar flest problem, och hĂ€ndelser. I det hĂ€r fallet, om du inte lagrar hĂ€ndelser för lĂ€nge och istĂ€llet lagrar historik med trender i nĂ„got annat snabbt lagringsutrymme, sĂ„ bör det inte bli nĂ„gra problem, tror jag.

A: – Kan du uppskatta hur mycket snabbare allt skulle fungera om man gĂ„r över till "ClickHouse", till exempel?

AG: – Jag har inte testat. Jag tror att man Ă„tminstone kan nĂ„ samma siffror ganska enkelt, med tanke pĂ„ att "ClickHouse" har sitt eget grĂ€nssnitt, men kan inte sĂ€ga det definitivt. BĂ€ttre att testa. Det beror helt pĂ„ konfigurationen: hur mĂ„nga vĂ€rdar ni har och sĂ„ vidare. Införsel Ă€r en sak, men man mĂ„ste ocksĂ„ hĂ€mta dessa data – med Grafana eller nĂ„got annat.

A: – SĂ„ det handlar om en jĂ€mlik kamp, inte ett stort övertag hos dessa snabba databaser?

AG: – Jag tror att vi nĂ€r vi integrerar kommer att fĂ„ mer exakta tester.

A: – Men vart tog den gamla goda RRD vĂ€gen? Vad fick er att gĂ„ över till SQL-databaser? Ursprungligen samlades ju alla metrik i RRD.

AG: – I "Zabbix" fanns RRD kanske i en mycket gammal version. Det har alltid funnits SQL-databaser – den klassiska metoden. Den klassiska metoden Ă€r MySQL, PostgreSQL (som faktiskt funnits lĂ€nge nu). Vi har ett gemensamt grĂ€nssnitt för SQL-databaser och RRD har vi knappt anvĂ€nt.

HighLoad++, Andrey Gushin (Zabbix): hög prestanda och inbyggd partitionering

Spela video

Lite reklam 🙂

Tack för att ni stannar kvar hos oss. Gillar ni vÄra artiklar? Vill ni se fler intressanta material? Stöd oss genom att göra en bestÀllning eller rekommendera oss till era vÀnner, moln-VPS för utvecklare frÄn $4,99, en unik motsvarighet till entry-level servrar som vi har skapat för er: Allt om VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps frÄn $19 eller hur man korrekt delar en server? (alternativ med RAID1 och RAID10 finns tillgÀngliga, upp till 24 kÀrnor och upp till 40GB DDR4).

Dell R730xd Ă€r tvĂ„ gĂ„nger billigare i datacentret Equinix Tier IV i Amsterdam? Bara hos oss 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB frĂ„n $199 i NederlĂ€nderna! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — frĂ„n $99! LĂ€s om Hur man bygger en företagsinfrastruktur med Dell R730xd E5-2650 v4-servrar som kostar 9000 euro för en brĂ„kdel?

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