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

Vi kommer att titta pÄ hur Zabbix fungerar med TimescaleDB-databasen som backend. Vi visar dig hur du börjar frÄn början och hur du migrerar frÄn PostgreSQL. Vi kommer ocksÄ att tillhandahÄlla jÀmförande prestandatester av de tvÄ konfigurationerna.

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

HighLoad++ Sibirien 2019. Tomsk Hall. 24 juni, 16:00. Avhandlingar och presentation. NĂ€sta HighLoad++-konferens kommer att hĂ„llas den 6 och 7 april 2020 i St. Petersburg. Detaljer och biljetter ĐżĐŸ ссылĐșĐ”.

Andrey Gushchin (nedan – AG): – Jag Ă€r en ZABBIX teknisk supportingenjör (nedan kallad "Zabbix"), en utbildare. Jag har arbetat med teknisk support i mer Ă€n 6 Ă„r och har haft direkt erfarenhet av prestanda. Idag ska jag prata om prestandan som TimescaleDB kan ge jĂ€mfört med vanlig PostgreSQL 10. Dessutom en introduktionsdel om hur det fungerar i allmĂ€nhet.

De frÀmsta produktivitetsutmaningarna: frÄn datainsamling till datarensning

Till att börja med finns det vissa prestandautmaningar som varje övervakningssystem stÄr inför. Den första produktivitetsutmaningen Àr att snabbt samla in och bearbeta data.

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

Ett bra övervakningssystem bör snabbt, i tid ta emot all data, bearbeta den enligt triggeruttryck, det vill sÀga bearbeta den enligt vissa kriterier (detta Àr olika i olika system) och spara den i en databas för att kunna anvÀnda dessa data i framtida.

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

Den andra prestandautmaningen Àr historiklagring. Lagra i en databas ofta och ha snabb och bekvÀm tillgÄng till dessa mÀtvÀrden som samlades in under en tidsperiod. Det viktigaste Àr att denna data Àr bekvÀm att fÄ, anvÀnda den i rapporter, grafer, triggers, i vissa tröskelvÀrden, för varningar, etc.

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

Den tredje prestandautmaningen Àr historikrensning, det vill sÀga nÀr du kommer till den punkt dÀr du inte behöver lagra nÄgra detaljerade mÀtvÀrden som har samlats in under 5 Är (Àven mÄnader eller tvÄ mÄnader). Vissa nÀtverksnoder togs bort, eller vissa vÀrdar, mÀtvÀrdena behövs inte lÀngre eftersom de redan Àr förÄldrade och inte lÀngre samlade in. Allt detta mÄste rengöras sÄ att din databas inte blir för stor. Generellt sett Àr rensningshistoriken oftast ett allvarligt test för lagringen - det har ofta en mycket stark inverkan pÄ prestandan.

Hur löser man cachningsproblem?

Jag kommer nu att prata specifikt om Zabbix. I Zabbix löses det första och andra anropet med hjÀlp av caching.

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

Datainsamling och bearbetning – Vi anvĂ€nder RAM för att lagra all denna data. Dessa data kommer nu att diskuteras mer i detalj.

Även pĂ„ databassidan finns en del cachning för huvudval - för grafer och annat.

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

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

ConfigurationCache Àr huvudcachen dÀr vi lagrar mÀtvÀrden, vÀrdar, dataobjekt, triggers; allt du behöver för att bearbeta förbearbetning, samla in data, frÄn vilka vÀrdar du ska samla in, med vilken frekvens. Allt detta lagras i ConfigurationCache för att inte gÄ till databasen och skapa onödiga frÄgor. Efter att servern startar uppdaterar vi denna cache (skapar den) och uppdaterar den regelbundet (beroende pÄ konfigurationsinstÀllningarna).

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

Cachar i Zabbix. Datainsamling

HÀr Àr diagrammet ganska stort:

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

De viktigaste i schemat Àr dessa samlare:

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

Det Ă€r sjĂ€lva monteringsprocesserna, olika ”pollare” som ansvarar för olika typer av sammanstĂ€llningar. De samlar in data via icmp, ipmi och olika protokoll och överför allt till förbearbetning.

PreProcessing HistoryCache

Dessutom, om vi har berÀknade dataelement (de som Àr bekanta med Zabbix vet), det vill sÀga berÀknade, aggregerade dataelement, tar vi dem direkt frÄn ValueCache. Jag ska berÀtta hur den fylls pÄ senare. Alla dessa samlare anvÀnder ConfigurationCache för att ta emot sina jobb och skickar dem sedan vidare till förbearbetning.

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

Förbearbetning anvÀnder ocksÄ ConfigurationCache för att hÀmta förbearbetningssteg och bearbetar dessa data pÄ olika sÀtt. FrÄn och med version 4.2 har vi flyttat den till en proxy. Detta Àr mycket bekvÀmt, eftersom förbearbetningen i sig Àr en ganska svÄr operation. Och om du har en mycket stor Zabbix, med ett stort antal dataelement och en hög insamlingsfrekvens, sÄ förenklar detta arbetet avsevÀrt.

Följaktligen, efter att vi har bearbetat denna data pÄ nÄgot sÀtt med förbearbetning, sparar vi den i HistoryCache för att kunna bearbeta den vidare. Detta avslutar datainsamlingen. Vi gÄr vidare till huvudprocessen.

History syncers arbete

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

Huvudprocessen i Zabbix (eftersom det Àr en monolitisk arkitektur) Àr History syncer. Detta Àr huvudprocessen som specifikt handlar om atombehandlingen av varje dataelement, det vill sÀga varje vÀrde:

  • vĂ€rdet kommer (det tar det frĂ„n HistoryCache);
  • kontrollerar i Configuration syncer: om det finns nĂ„gra triggers för berĂ€kning - berĂ€knar dem;
    om det finns - skapar hÀndelser, skapar eskalering för att skapa en varning, om nödvÀndigt enligt konfigurationen;
  • registrerar triggers för efterföljande bearbetning, aggregering; om du aggregerar under den senaste timmen och sĂ„ vidare, kommer detta vĂ€rde att komma ihĂ„g av ValueCache för att inte gĂ„ till historiktabellen; SĂ„ledes fylls ValueCache med nödvĂ€ndig data som Ă€r nödvĂ€ndig för att berĂ€kna triggers, berĂ€knade element, etc.;
  • sedan skriver History syncer all data till databasen;
  • databasen skriver dem till disken - det Ă€r hĂ€r bearbetningsprocessen slutar.

Databas. Cachning

PÄ databassidan, nÀr du vill se grafer eller nÄgra rapporter om hÀndelser, finns det olika cacher. Men i denna rapport kommer jag inte att prata om dem.

För MySQL finns Innodb_buffer_pool, och ett gÀng olika cacher som ocksÄ kan konfigureras.
Men dessa Àr de viktigaste:

  • shared_buffers;
  • effektiv_cache_storlek;
  • shared_pool.

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

För alla databaser sa jag att det finns vissa cacher som gör att du kan lagra i RAM den data som ofta behövs för frÄgor. De har sin egen teknik för detta.

Om databasprestanda

Följaktligen finns det en konkurrensutsatt miljö, det vill sÀga Zabbix-servern samlar in data och registrerar den. NÀr den startas om lÀser den ocksÄ frÄn historiken för att fylla ValueCache och sÄ vidare. HÀr kan du ha skript och rapporter som anvÀnder Zabbix API, som Àr byggt pÄ ett webbgrÀnssnitt. Zabbix API gÄr in i databasen och tar emot nödvÀndig data för att fÄ grafer, rapporter eller nÄgon slags lista över hÀndelser, senaste problem.

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

En mycket populÀr visualiseringslösning Àr ocksÄ Grafana, som vÄra anvÀndare anvÀnder. Kan logga in direkt bÄde via Zabbix API och via databasen. Det skapar ocksÄ en viss konkurrens för att fÄ fram data: en finare, bÀttre justering av databasen krÀvs för att följa den snabba leveransen av resultat och tester.

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

Rensa historik. Zabbix har hushÄllerska

Det tredje samtalet som anvÀnds i Zabbix Àr att rensa historik med hjÀlp av Housekeeper. Housekeeper följer alla instÀllningar, det vill sÀga vÄra dataelement indikerar hur lÀnge som ska lagras (i dagar), hur lÀnge trender ska lagras och dynamiken i förÀndringar.

Jag pratade inte om TrendCache, som vi berÀknar i farten: data kommer, vi aggregerar det under en timme (detta Àr oftast siffror för den senaste timmen), mÀngden Àr genomsnittlig/minimum och vi registrerar den en gÄng i timmen i tabell över förÀndringarnas dynamik ("Trender") . "HushÄllerska" startar och raderar data frÄn databasen med vanliga val, vilket inte alltid Àr effektivt.

Hur förstÄr man att det Àr ineffektivt? Du kan se följande bild pÄ prestandagraferna för interna processer:

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

Din historiksynkronisering Àr stÀndigt upptagen (röd graf). Och den "röda" grafen som gÄr överst. Detta Àr en "hushÄllerska" som startar och vÀntar pÄ att databasen tar bort alla rader som den har angett.

LÄt oss ta lite artikel-ID: du mÄste ta bort de senaste 5 tusen; givetvis genom index. Men vanligtvis Àr datasetet ganska stort - databasen lÀser fortfarande det frÄn disken och lÀgger in det i cachen, och detta Àr en mycket dyr operation för databasen. Beroende pÄ dess storlek kan detta leda till vissa prestandaproblem.

Du kan inaktivera Housekeeper pÄ ett enkelt sÀtt - vi har ett bekant webbgrÀnssnitt. InstÀllningar i Administration generellt (instÀllningar för "HushÄllerska") vi inaktiverar intern hushÄllning för intern historik och trender. Följaktligen kontrollerar Housekeeper inte lÀngre detta:

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

Vad kan du göra hÀrnÀst? Du stÀngde av den, dina grafer har planat ut... Vilka ytterligare problem kan uppstÄ i det hÀr fallet? Vad kan hjÀlpa?

Partitionering (sektionering)

Vanligtvis konfigureras detta pÄ olika sÀtt pÄ varje relationsdatabas jag har listat. MySQL har sin egen teknologi. Men överlag Àr de vÀldigt lika nÀr det kommer till PostgreSQL 10 och MySQL. Naturligtvis finns det mÄnga interna skillnader i hur det hela implementeras och hur det pÄverkar prestanda. Men i allmÀnhet leder skapandet av en ny partition ofta ocksÄ till vissa problem.

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

Beroende pÄ din instÀllning (hur mycket data du skapar pÄ en dag) sÀtter de vanligtvis minimum - det hÀr Àr 1 dag / batch och för "trender", förÀndringsdynamik - 1 mÄnad / ny batch. Detta kan Àndras om du har en mycket stor instÀllning.

LÄt oss sÀga direkt om storleken pÄ installationen: upp till 5 tusen nya vÀrden per sekund (sÄ kallade nvps) - detta kommer att betraktas som en liten "instÀllning". Genomsnitt - frÄn 5 till 25 tusen vÀrden per sekund. Allt som stÄr ovan Àr redan stora och mycket stora installationer som krÀver mycket noggrann konfiguration av databasen.

PÄ mycket stora installationer kanske 1 dag inte Àr optimalt. Jag har personligen sett partitioner pÄ MySQL pÄ 40 gigabyte per dag (och det kan finnas fler). Detta Àr en mycket stor mÀngd data, vilket kan leda till vissa problem. Det mÄste minskas.

Varför behöver du partitionering?

Det som partitionering ger, tror jag att alla vet, Àr tabellpartitionering. Ofta Àr dessa separata filer pÄ disk och span-förfrÄgningar. Den vÀljer en partition mer optimalt om den Àr en del av normal partitionering.

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

För Zabbix, i synnerhet, anvÀnds det av intervall, efter intervall, det vill sÀga vi anvÀnder en tidsstÀmpel (ett vanligt tal, tid sedan epokens början). Du anger början pÄ dagen/slutet pÄ dagen, och detta Àr partitionen. Följaktligen, om du frÄgar efter data som Àr tvÄ dagar gammal, hÀmtas allt frÄn databasen snabbare, eftersom du bara behöver ladda en fil i cachen och returnera den (istÀllet för en stor tabell).

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

MÄnga databaser gör ocksÄ snabbare infogning (infogning i en underordnad tabell). Jag talar abstrakt för nu, men detta Àr ocksÄ möjligt. Partitonering hjÀlper ofta.

Elasticsearch för NoSQL

Nyligen, i 3.4, implementerade vi en NoSQL-lösning. Lade till möjligheten att skriva i Elasticsearch. Du kan skriva vissa typer: du vÀljer - antingen skriv siffror eller nÄgra tecken; vi har strÀngtext, du kan skriva loggar till Elasticsearch... Följaktligen kommer webbgrÀnssnittet ocksÄ att komma Ät Elasticsearch. Detta fungerar utmÀrkt i vissa fall, men för tillfÀllet kan det anvÀndas.

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

TidsskalaDB. Hypertabeller

För 4.4.2 uppmÀrksammade vi en sak som TimescaleDB. Vad det Àr? Detta Àr en tillÀgg för PostgreSQL, det vill sÀga den har ett inbyggt PostgreSQL-grÀnssnitt. Dessutom lÄter detta tillÀgg dig arbeta mycket mer effektivt med tidsseriedata och ha automatisk partitionering. Vad det liknar:

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

Det hÀr Àr hypertabell - det finns ett sÄdant koncept i Timescale. Det hÀr Àr en hypertabell som du skapar, och den innehÄller bitar. Chunks Àr partitioner, det hÀr Àr underordnade tabeller, om jag inte har fel. Det Àr riktigt effektivt.

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

TimescaleDB och PostgreSQL

Som TimescaleDB-tillverkarna försÀkrar anvÀnder de en mer korrekt algoritm för att bearbeta frÄgor, sÀrskilt inlÀgg, vilket gör att de kan ha ungefÀr konstant prestanda med en ökande storlek pÄ datasetinlÀgget. Det vill sÀga, efter 200 miljoner rader med Postgres börjar den vanliga sjunka vÀldigt mycket och tappar prestanda bokstavligen till noll, medan Timescale lÄter dig infoga inlÀgg sÄ effektivt som möjligt med vilken mÀngd data som helst.

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

Hur installerar man TimescaleDB? Det Àr enkelt!

Det finns i dokumentationen, det beskrivs - du kan installera det frÄn paket för alla... Det beror pÄ de officiella Postgres-paketen. Kan kompileras manuellt. Det blev sÄ att jag var tvungen att kompilera för databasen.

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

PÄ Zabbix aktiverar vi helt enkelt Extention. Jag tror att de som anvÀnde Extention i Postgres... Du aktiverar helt enkelt Extention, skapar den för Zabbix-databasen som du anvÀnder.

Och det sista steget...

TidsskalaDB. Migrering av historiktabeller

Du mĂ„ste skapa en hypertabell. Det finns en speciell funktion för detta – Skapa hypertabell. I den Ă€r den första parametern tabellen som behövs i den hĂ€r databasen (för vilken du mĂ„ste skapa en hypertabell).

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

FÀltet för att skapa, och chunk_time_interval (detta Àr intervallet för chunks (partitioner som mÄste anvÀndas). 86 400 Àr en dag.

Migrate_data-parameter: Om du infogar till true kommer detta att migrera all aktuell data till förskapade bitar.

Jag har sjÀlv anvÀnt migrate_data - det tar ganska lÄng tid, beroende pÄ hur stor din databas Àr. Jag hade över en terabyte - det tog över en timme att skapa. I vissa fall, under testningen, tog jag bort historiska data för text (history_text) och string (history_str) för att inte överföra dem - de var inte riktigt intressanta för mig.

Och vi gör den sista uppdateringen i vÄr db_extention: vi installerar timescaledb sÄ att databasen och i synnerhet vÄr Zabbix förstÄr att det finns db_extention. Han aktiverar den och anvÀnder rÀtt syntax och frÄgor till databasen, med hjÀlp av 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 konfigurerade Postgres 10.8 pÄ den:

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

Operativsystemet var Debian, filsystem – xfs. Jag gjorde minimala instĂ€llningar för att anvĂ€nda just den hĂ€r databasen, förutom vad Zabbix sjĂ€lv kommer att anvĂ€nda. Zabbix-servern, PostgreSQL och load agents installerades ocksĂ„ pĂ„ den hĂ€r maskinen.

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

Jag har anvÀnt 50 aktiva agenter som anvÀnder LoadableModule för att snabbt generera olika resultat. Det Àr de som genererade strÀngarna, siffrorna och sÄ vidare. Jag fyllde databasen med mycket data. Inledningsvis innehöll konfigurationen 5 tusen dataelement per vÀrd, och ungefÀr varje dataelement innehöll en trigger - för att detta skulle vara en riktig instÀllning. Ibland behöver du till och med mer Àn en trigger för att anvÀnda.

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

Jag reglerade uppdateringsintervallet och sjÀlva belastningen genom att inte bara anvÀnda 50 agenter (lÀgga till fler), utan Àven anvÀnda dynamiska dataelement och minska uppdateringsintervallet till 4 sekunder.

UtvÀrderingsprov. PostgreSQL: 36 tusen NVP

Den första lanseringen, den första installationen jag hade var pÄ ren PostreSQL 10 pÄ denna hÄrdvara (35 tusen vÀrden per sekund). I allmÀnhet, som du kan se pÄ skÀrmen, tar det brÄkdelar av en sekund att infoga data - allt Àr bra och snabbt, SSD-enheter (200 gigabyte). Det enda Àr att 20 GB fylls upp ganska snabbt.

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

Det kommer att bli ganska mÄnga sÄdana grafer i framtiden. Detta Àr en standardinstrumentpanel för Zabbix-serverprestanda.

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

Den första grafen Àr antalet vÀrden per sekund (blÄ, överst till vÀnster), 35 tusen vÀrden i det hÀr fallet. Detta (överst i mitten) Àr laddningen av byggprocesser, och detta (överst till höger) Àr laddningen av interna processer: historiksyncer och hushÄllerska, som hÀr (lÀngst ner i mitten) har varit igÄng ganska lÀnge.

Den hÀr grafen (lÀngst ner i mitten) visar ValueCache-anvÀndning - hur mÄnga ValueCache-trÀffar för utlösare (flera tusen vÀrden per sekund). En annan viktig graf Àr den fjÀrde (nederst till vÀnster), som visar anvÀndningen av HistoryCache, som jag pratade om, som Àr en buffert innan den infogas i databasen.

UtvÀrderingsprov. PostgreSQL: 50 tusen NVP

DÀrefter ökade jag belastningen till 50 tusen vÀrden per sekund pÄ samma hÄrdvara. NÀr den laddades av hushÄllerskan, registrerades 10 tusen vÀrden pÄ 2-3 sekunder med berÀkning. Vad som faktiskt visas i följande skÀrmdump:

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

"HushÄllerska" börjar redan störa arbetet, men generellt sett Àr belastningen pÄ historiesÀnkare fortfarande pÄ nivÄn 60% (tredje grafen, uppe till höger). HistoryCache börjar redan fyllas aktivt medan Housekeeper körs (nedre till vÀnster). Den var ungefÀr en halv gigabyte, 20 % full.

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

UtvÀrderingsprov. PostgreSQL: 80 tusen NVP

Sedan ökade jag det till 80 tusen vÀrden per sekund:

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

Det var ungefÀr 400 tusen dataelement, 280 tusen triggers. Insatsen, som du kan se, nÀr det gÀller belastningen av historiesÀnkor (det fanns 30 stycken) var redan ganska hög. Sedan ökade jag olika parametrar: historiksÀnkor, cache ... PÄ den hÀr hÄrdvaran började belastningen pÄ historiksÀnkor att öka till det maximala, nÀstan "pÄ hyllan" - följaktligen gick HistoryCache i en mycket hög belastning:

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

Hela denna tid övervakade jag alla systemparametrar (hur processorn anvÀnds, RAM) och upptÀckte att diskutnyttjandet var maximalt - jag uppnÄdde den maximala kapaciteten för denna disk pÄ den hÀr hÄrdvaran, pÄ den hÀr virtuella maskinen. "Postgres" började dumpa data ganska aktivt med sÄdan intensitet, och disken hade inte lÀngre tid att skriva, lÀsa ...

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

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

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

Jag "justerade" den ocksĂ„ - installerade History syncer (60 stycken) och uppnĂ„dde acceptabel prestanda. I sjĂ€lva verket Ă€r vi inte "pĂ„ hyllan", men detta Ă€r förmodligen grĂ€nsen för produktivitet, dĂ€r det redan Ă€r nödvĂ€ndigt att göra nĂ„got Ă„t ​​det.

UtvÀrderingsprov. TidskalaDB: 80 tusen NVP

Min huvudsakliga uppgift var att anvÀnda TimescaleDB. Varje graf visar en dipp:

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

Dessa misslyckanden Ă€r just datamigrering. Efter det, i Zabbix-servern, förĂ€ndrades laddningsprofilen för historiesĂ€nkare, som du kan se, mycket. Det lĂ„ter dig infoga data nĂ€stan 3 gĂ„nger snabbare och anvĂ€nda mindre HistoryCache - följaktligen kommer du att fĂ„ data levererad i tid. Återigen, 80 tusen vĂ€rden per sekund Ă€r en ganska hög hastighet (naturligtvis inte för Yandex). Sammantaget Ă€r detta en ganska stor installation, med en server.

PostgreSQL prestandatest: 120 tusen NVP

DÀrefter ökade jag vÀrdet pÄ antalet dataelement till en halv miljon och fick ett berÀknat vÀrde pÄ 125 tusen per sekund:

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

Och jag fick dessa grafer:

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

I princip Àr detta ett fungerande setup, det kan fungera ganska lÀnge. Men eftersom jag bara hade en 1,5 terabyte disk anvÀnde jag den pÄ ett par dagar. Det viktigaste Àr att det samtidigt skapades nya partitioner pÄ TimescaleDB, och detta var helt obemÀrkt för prestanda, vilket inte kan sÀgas om MySQL.

Vanligtvis skapas partitioner pÄ natten, eftersom detta i allmÀnhet blockerar insÀttning och arbete med tabeller och kan leda till försÀmring av tjÀnsten. I det hÀr fallet Àr det inte sÄ! Huvuduppgiften var att testa funktionerna i TimescaleDB. Resultatet blev följande siffra: 120 tusen vÀrden per sekund.

Det finns ocksÄ exempel i samhÀllet:

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

Personen slog ocksÄ pÄ TimescaleDB och belastningen pÄ att anvÀnda io.weight sjönk pÄ processorn; och anvÀndningen av interna processelement har ocksÄ minskat pÄ grund av införandet av TimescaleDB. Dessutom Àr det vanliga pannkaksdiskar, det vill sÀga en vanlig virtuell maskin pÄ vanliga diskar (inte SSD)!

För vissa smÄ instÀllningar som begrÀnsas av diskprestanda Àr TimescaleDB enligt min mening en mycket bra lösning. Det gör att du kan fortsÀtta arbeta innan du migrerar till snabbare hÄrdvara för databasen.

Jag inbjuder er alla till vÄra evenemang: Konferens i Moskva, toppmöte i Riga. AnvÀnd vÄra kanaler - Telegram, forum, IRC. Om du har nÄgra frÄgor, kom till vÄrt skrivbord, vi kan prata om allt.

Publikens frÄgor

FrÄga frÄn publiken (nedan - A): - Om TimescaleDB Àr sÄ lÀtt att konfigurera, och det ger en sÄdan prestandaboost, sÄ kanske detta bör anvÀndas som en bÀsta praxis för att konfigurera Zabbix med Postgres? Och finns det nÄgra fallgropar och nackdelar med denna lösning, eller trots allt, om jag bestÀmde mig för att göra Zabbix för mig sjÀlv, kan jag enkelt ta Postgres, installera Timescale dÀr direkt, anvÀnda den och inte tÀnka pÄ nÄgra problem?

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

AG: – Ja, jag skulle sĂ€ga att det hĂ€r Ă€r en bra rekommendation: anvĂ€nd Postgres omedelbart med TimescaleDB-tillĂ€gget. Som jag redan sa, mĂ„nga bra recensioner, trots att denna "funktion" Ă€r experimentell. Men faktiskt tester visar att detta Ă€r en bra lösning (med TimescaleDB) och jag tror att den kommer att utvecklas! Vi övervakar hur denna förlĂ€ngning utvecklas och kommer att göra Ă€ndringar vid behov.

Även under utvecklingen förlitade vi oss pĂ„ en av deras vĂ€lkĂ€nda "funktioner": det var möjligt att arbeta med bitar lite annorlunda. Men sedan klippte de bort det i nĂ€sta release, och vi var tvungna att sluta lita pĂ„ den hĂ€r koden. Jag skulle rekommendera att du anvĂ€nder den hĂ€r lösningen pĂ„ mĂ„nga instĂ€llningar. Om du anvĂ€nder MySQL... För genomsnittliga instĂ€llningar fungerar vilken lösning som helst bra.

A: – PĂ„ de sista graferna frĂ„n samhĂ€llet fanns det en graf med "HushĂ„llerska":

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

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

AG: – Nu kan jag inte sĂ€ga sĂ€kert – jag ska titta pĂ„ koden och berĂ€tta mer detaljerat. Den anvĂ€nder TimescaleDB-frĂ„gor för att inte ta bort bitar, utan för att pĂ„ nĂ„got sĂ€tt aggregera dem. Jag Ă€r inte redo att svara pĂ„ den hĂ€r tekniska frĂ„gan Ă€nnu. Vi fĂ„r veta mer i montern idag eller imorgon.

A: – Jag har en liknande frĂ„ga – om utförandet av raderingsoperationen i Timescale.
A (svar frĂ„n publiken): – NĂ€r du raderar data frĂ„n en tabell, om du gör det via delete, mĂ„ste du gĂ„ igenom tabellen - radera, rensa, markera allt för framtida vakuum. I Timescale, eftersom du har bitar, kan du slĂ€ppa. Grovt sett sĂ€ger du helt enkelt till filen som Ă€r i big data: "Radera!"

Timescale förstÄr helt enkelt att en sÄdan bit inte lÀngre existerar. Och eftersom den Àr integrerad i frÄgeplaneraren anvÀnder den krokar för att fÄnga dina villkor i utvalda eller andra operationer och förstÄr omedelbart att den hÀr biten inte lÀngre existerar - "Jag kommer inte att gÄ dit lÀngre!" (data ej tillgÀngliga). Det Àr allt! Det vill sÀga, en tabellskanning ersÀtts av en binÀr filradering, sÄ det gÄr snabbt.

A: – Vi har redan berört Ă€mnet icke-SQL. SĂ„vitt jag förstĂ„r behöver Zabbix egentligen inte Ă€ndra data, och allt detta Ă€r ungefĂ€r som en logg. GĂ„r det att anvĂ€nda specialiserade databaser som inte kan Ă€ndra sin data, men samtidigt spara, ackumulera och distribuera mycket snabbare - Clickhouse, till exempel, nĂ„got Kafka-likt?.. Kafka Ă€r ocksĂ„ en logg! Är det möjligt att pĂ„ nĂ„got sĂ€tt integrera dem?

AG: – Avlastning kan göras. Vi har en viss "funktion" sedan version 3.4: du kan skriva alla historiska filer, hĂ€ndelser, allt annat till filer; och sedan skicka den till vilken annan databas som helst med nĂ„gon hanterare. Faktum Ă€r att mĂ„nga omarbetar och skriver direkt till databasen. I farten skriver historiesĂ€nkare allt detta till filer, roterar dessa filer och sĂ„ vidare, och du kan överföra detta till Clickhouse. Jag kan inte sĂ€ga nĂ„got om planerna, men kanske kommer ytterligare stöd för NoSQL-lösningar (som Clickhouse) att fortsĂ€tta.

A: – Generellt sett visar det sig att man helt kan bli av med postgres?

AG: – Den svĂ„raste delen i Zabbix Ă€r förstĂ„s de historiska tabellerna, som skapar flest problem och hĂ€ndelser. I det hĂ€r fallet, om du inte lagrar hĂ€ndelser under en lĂ„ng tid och lagrar historiken med trender i nĂ„gon annan snabblagring, sĂ„ tror jag generellt att det inte kommer att vara nĂ„gra problem.

A: – Kan du uppskatta hur mycket snabbare allt kommer att fungera om du till exempel byter till Clickhouse?

AG: – Jag har inte testat det. Jag tror att Ă„tminstone samma siffror kan uppnĂ„s helt enkelt, med tanke pĂ„ att Clickhouse har sitt eget grĂ€nssnitt, men jag kan inte sĂ€ga sĂ€kert. Det Ă€r bĂ€ttre att testa. Allt beror pĂ„ konfigurationen: hur mĂ„nga vĂ€rdar du har och sĂ„ vidare. Att infoga Ă€r en sak, men du mĂ„ste ocksĂ„ hĂ€mta denna data - Grafana eller nĂ„got annat.

A: – SĂ„ vi talar om en jĂ€mlik kamp, ​​och inte om den stora fördelen med dessa snabba databaser?

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

A: – Vart tog gamla goda RRD vĂ€gen? Vad fick dig att byta till SQL-databaser? Till en början samlades alla mĂ€tvĂ€rden pĂ„ RRD.

AG: – Zabbix hade RRD, kanske i en vĂ€ldigt gammal version. Det har alltid funnits SQL-databaser – ett klassiskt tillvĂ€gagĂ„ngssĂ€tt. Det klassiska tillvĂ€gagĂ„ngssĂ€ttet Ă€r MySQL, PostgreSQL (de har funnits vĂ€ldigt lĂ€nge). Vi anvĂ€nde nĂ€stan aldrig ett gemensamt grĂ€nssnitt för SQL- och RRD-databaser.

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

Spela upp video

NĂ„gra annonser 🙂

Tack för att du stannar hos oss. Gillar du vĂ„ra artiklar? Vill du se mer intressant innehĂ„ll? Stöd oss ​​genom att lĂ€gga en bestĂ€llning eller rekommendera till vĂ€nner, moln VPS för utvecklare frĂ„n $4.99, en unik analog av ingĂ„ngsservrar, som uppfanns av oss för dig: Hela sanningen om VPS (KVM) E5-2697 v3 (6 kĂ€rnor) 10GB DDR4 480GB SSD 1Gbps frĂ„n $19 eller hur delar man en server? (tillgĂ€nglig med RAID1 och RAID10, upp till 24 kĂ€rnor och upp till 40 GB DDR4).

Dell R730xd 2 gÄnger billigare i Equinix Tier IV datacenter i Amsterdam? Bara hÀr 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV 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 infrastructure corp. klass med anvÀndning av Dell R730xd E5-2650 v4-servrar vÀrda 9000 XNUMX euro för en slant?

KĂ€lla: will.com

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