HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

KÀime lÀbi Zabbixi toimimist TimescaleDB andmebaasiga tagaplaanina. NÀitame, kuidas alustada nullist ja kuidas migreerida PostgreSQLilt. Samuti toome vÀlja kahte konfiguratsiooni vÔrdlevad jÔudlustestid.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

HighLoad++ Siberia 2019. Saal "Tomsk". 24. juuni, 16:00. Teemad ja esitlus. JĂ€rgmine HighLoad++ konverents toimub 6. ja 7. aprillil 2020 Peterburis. Üksikasjad ja piletid lingi kaudu.

Andrei Gushchin (edasi – AG): – Olen ZABBIXi (edasi – "Zabbix") tehnilise toe insener, koolitaja. Olen töötanud tehnilises toestuses ĂŒle 6 aasta ja olen otseselt tegelenud jĂ”udluse kĂŒsimustega. TĂ€na rÀÀgin, millist jĂ”udlust TimescaleDB suudab pakkuda vĂ”rreldes tavalise PostgreSQL 10-ga. Samuti annan natuke sissejuhatavat teavet selle kohta, kuidas see ĂŒldse toimib.

Peamised jÔudluse vÀljakutsed: andmete kogumisest kuni nende puhastamiseni

Alustame sellega, et igas jĂ€lgimisse sĂŒsteemis esineb teatud jĂ”udluse vĂ€ljakutseid. Esimene jĂ”udluse vĂ€ljakutse on kiire andmete kogumine ja töötlemine.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Hea jĂ€lgimissĂŒsteem peab kĂ”ik andmed Ă”igeaegselt ja kiiresti kĂ€tte saama, töötlema need vastavalt triggereile, st töötlema neid mingite kriteeriumide alusel (erinevates sĂŒsteemides on see erinev) ja salvestama andmebaasi, et neid hiljem kasutada.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Teine jĂ”udluse vĂ€ljakutse on ajaloo sĂ€ilitamine. Andmete salvestamine andmebaasis ja kiire ning mugav ligipÀÀs nendele mÔÔdikutele, mis on kogutud teatud ajavahemiku jooksul. KĂ”ige olulisem on see, et nendest andmetest oleks lihtne vĂ€lja vĂ”tta ja kasutada neid raportites, graafikutes, triggereites, vĂ€hemalt mĂ”nede kĂŒnniste vÀÀrtuste jaoks, teavitusteks jne.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Kolmas jĂ”udluse vĂ€ljakutse on ajaloo puhastamine, ehk siis pĂ€ev, mil te ei vaja enam sĂ€ilitada ĂŒksikasjalikke mÔÔdikuid, mis on kogutud 5 aasta jooksul (isegi kuude vĂ”i kahe kuu jooksul). MĂ”ned vĂ”rgu sĂ”lmed on eemaldatud vĂ”i mĂ”ned hostid, mÔÔdikud ei ole enam vajalikud, kuna need on juba aegunud ja lĂ”petanud kogumise. KĂ”ik see tuleb eemaldada, et teie andmebaas ei kasvaks liiga suureks. Ja ĂŒldiselt on ajaloo puhastamine enamasti tĂ”sine proovikivi salvestusruumile – see mĂ”jutab sageli jĂ”udlust.

Kuidas lahendada vahemÀlu probleeme?

RÀÀgin nĂŒĂŒd konkreetselt "Zabbixist". "Zabbixis" on esimesed ja teised vĂ€ljakutsed lahendatud vahemĂ€lu abil.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Andmete kogumine ja töötlemine – me kasutame nende andmete salvestamiseks töömĂ€lu. NĂŒĂŒdsest rÀÀgin sellest tulenevatest andmetest lĂ€hemalt.

Samuti on andmebaaside pooles spetsiifiline vahemĂ€lu peamiste pĂ€ringute jaoks – graafikute ja muude asjade jaoks.

VahemÀlu Zabbix serveri poolel: meil on olemas ConfigurationCache, ValueCache, HistoryCache, TrendsCache. Mis need on?

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

ConfigurationCache – see on peamine vahemĂ€lu, kus salvestame mÔÔdikud, hostid, andmeelemendid, triggereid; kĂ”ik, mis on vajalik andmete ettevalmistamiseks, kogumiseks, millistelt hostidelt andmeid koguda ja kui tihti. KĂ”ik see salvestatakse ConfigurationCache’i, et mitte minna andmebaasi ja luua liigseid pĂ€ringuid. PĂ€rast serveri kĂ€ivitamist uuendame (loome) selle vahemĂ€lu ja uuendame seda perioodiliselt (vastavalt konfiguratsiooniseadetele).

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

VahemÀlu Zabbixis. Andmete kogumine

Siin on skeem piisavalt suur:

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Kesksetes skeemides on need andmete kogujad:

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Need on ise kogumise protsessid, erinevad "poller’id", mis vastutavad erinevate kogumise liikide eest. Nad koguvad andmeid icmp, ipmi, erinevate protokollide kaudu ja edastavad need kĂ”ik ettevalmistamiseks.

PreProcessing HistoryCache

Kui meil on ka arvutuslikud andmeelemendid (kes tunneb "Zabbixit" – teab), siis korjame need otse ValueCache’st. RÀÀgin hiljem, kuidas see tĂ€itub. KĂ”ik need kogujad kasutavad ConfigurationCache’i oma ĂŒlesannete saamiseks ja edastavad need edasi ettevalmistamiseks.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Ettevalmistamine kasutab samuti ConfigurationCache’i ettevalmistamise sammude saamiseks, töötleb neid andmeid erinevatel viisidel. Alates versioonist 4.2 on see meil vĂ€lja viidud proksi peale. See on vĂ€ga mugav, kuna ettevalmistamine on piisavalt keeruline operatsioon. Ja kui teil on vĂ€ga suur "Zabbix", koos suure hulga andmeelementidega ja suure kogumise sagedusega, siis see lihtsustab tööd oluliselt.

Seega, pĂ€rast seda, kui oleme neid andmeid mingil moel ettevalmistuse abil töötlenud, salvestame need HistoryCache’i, et neid hiljem töödelda. Sellega lĂ”peb andmete kogumine. Liigume peamise protsessi juurde.

Ajalugu synceri töö

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Zabbixi peamine protsess (kuna see on monoliitne arhitektuur) on History syncer. See on pÔhiprotsess, mis tegeleb iga andmeelementi, st iga vÀÀrtuse aatomaarse töötlemisega.

  • Saab vÀÀrtuse (vĂ”tab selle HistoryCache'ist);
  • kontrollib Configuration syncer'is: kas on olemas teatud kĂ€ivitajad arvutamiseks – arvutab need vĂ€lja;
    kui neid on – loob sĂŒndmusi, teeb eskaleerimise, et luua teade, kui see on konfigureerimise kohaselt vajalik;
  • salvestab kĂ€ivitajad jĂ€rgnevalt töötlemiseks, aggregeerimiseks; kui te aggregeerite viimase tunni jooksul jne, salvestab selle vÀÀrtuse ValueCache, et mitte pöörduda ajaloo tabeli poole; seega tĂ€idetakse ValueCache vajalike andmetega, mis on vajalikud kĂ€ivitajate, arvutatavate elementide jms arvutamiseks;
  • edasi History syncer salvestab kĂ”ik andmed andmebaasi;
  • andmebaas salvestab need kettale – sellega protsessi töötlemine lĂ”peb.

Andmebaasid. VahemÀlu

Andmebaasi kĂŒljel, kui soovite vaadata graafikuid vĂ”i teatud aruandeid sĂŒndmuste kohta, on erinevad vahemĂ€lud. Kuid selles ettekandes ei rÀÀgi ma neist.

MySQL jaoks on olemas Innodb_buffer_pool, ning rida erinevaid vahemÀlusid, mida saab ka seadistada.
Kuid need on peamised:

  • shared_buffers;
  • effective_cache_size;
  • shared_pool.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Ma toomasin kÔikide andmebaaside jaoks, et on olemas teatud vahemÀlud, mis vÔimaldavad hoida RAM-is andmeid, mis on sageli vajalikud pÀringute jaoks. Seal on nende jaoks oma tehnoloogiad.

Andmebaasi jÔudlusest

Seega on olemas konkurentsikeskkond, st Zabbixi server kogub andmeid ja salvestab need. Ta loeb ka ajaloo andmeid ValueCache'i tĂ€itmiseks jne. Samuti vĂ”ivad teil olla skriptid ja aruanded, mis kasutavad Zabbixi API-d, mis on ehitatud veebiliidese pĂ”hjal. Zabbixi API pÀÀseb andmebaasi ja saab vajalikud andmed graafikute, aruannete vĂ”i mingite sĂŒndmuste, viimaste probleemide loendite jaoks.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Samuti on vÀga populaarne lahendus visualiseerimiseks Grafana, mida meie kasutajad kasutavad. See oskab otse siseneda nii Zabbixi API kaudu kui ka andmebaasi kaudu. See loob ka teatud konkurentsi andmete saamiseks: on vajalik peen, hea andmebaasi seadistus, et tagada kiire tulemuste vÀljund ja testimine.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Ajaloo puhastamine. Zabbixis on Housekeeper

Kolmas kutse, mida Zabbixis kasutatakse – on ajaloo puhastamine Housekeeperi abil. Housekeeper jĂ€rgib kĂ”iki seadeid, st meie andmeelementides on mĂ€rgitud, kui kaua andmeid hoida (pĂ€evades), kui kaua hoida trende, muutuste dĂŒnaamikat.

Ma ei rÀÀkinud TrendCache'ist, mida me arvutame kohapeal: andmed saabuvad, me aggregeerime need tunni jooksul (peamiselt need on numbrid viimase tunni jooksul), keskmine/minimaalne kogus ja salvestame selle tunni ajal muutuste dĂŒnaamika tabelisse (Trends). Housekeeper kĂ€ivitatakse ja kustutab andmed andmebaasist tavaliste valikutega, mis ei ole alati tĂ”husad.

Kuidas mÔista, et see ei ole tÔhus? Te nÀete sisemiste protsesside jÔudluse graafikutelt sellist pilti:

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Teie History syncer on pidevalt hĂ”ivatud (punane graafik). Ja ĂŒlevalt liigub 'oranĆŸ' graafik. See on Housekeeper, mis kĂ€ivitatakse ja ootab andmebaasist, millal ta kustutab kĂ”ik read, mis ta mÀÀras.

VĂ”tame mĂ”ne Item ID: tuleb kustutada viimased 5000; loomulikult indeksite pĂ”hjal. Kuid ĂŒldiselt on andmehulk piisavalt suur – andmebaas loeb selle ikkagi kettalt ja tĂ”stab see mĂ€llu, mis on andmebaasi jaoks vĂ€ga kulukas operatsioon. SĂ”ltuvalt selle suurusest vĂ”ib see tekitada teatud jĂ”udlusprobleeme.

Housekeeper'i saab vĂ€lja lĂŒlitada lihtsal viisil – meil on tuttav veebiliides. Seadistus Administration general'is (seaded Housekeeper'i jaoks), lĂŒlitame vĂ€lja sisemise housekeeping'i sisemiste ajaloo ja trendide jaoks. Seega, Housekeeper ei halda enam seda:

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Kuidas edasi minna? Olete vĂ€lja lĂŒlitanud, teie graafikud on tasakaalustunud... Millised vĂ”ivad olla jĂ€rgmised probleemid? Mis vĂ”iks abiks olla?

Partitsioneerimine (sektsioneerimine)

Tavaliselt seadistatakse see iga rikkaandmebaasi puhul, mida olen nimetunud, erineval viisil. MySQL-l on oma tehnoloogia. Kuid ĂŒldiselt on need vĂ€ga sarnased, kui rÀÀkida PostgreSQL 10 ja MySQL-st. Loomulikult on seal palju sisemisi erinevusi, kuidas kĂ”ik see on rakendatud ja kuidas see kĂ”ik mĂ”jutab jĂ”udlust. Kuid ĂŒldiselt toob uue partitsiooni loomine sageli ka teatud probleeme.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

SĂ”ltuvalt teie seadistusest (kui palju andmeid luuakse pĂ€evas) on tavaliselt mÀÀratud kĂ”ige minimaalne – 1 pĂ€ev/partei, ning „trendide”, muutuste dĂŒnaamika jaoks – 1 kuu/uue partei. See vĂ”ib muutuda, kui teil on vĂ€ga suur seadistus.

Las ma ĂŒtlen kohe seadise suuruste kohta: kuni 5000 uut vÀÀrtust sekundis (nn nvps) - seda peetakse vĂ€ikseks seadiseks. Keskmine - 5 kuni 25 tuhat vÀÀrtust sekundis. KĂ”ik, mis on ĂŒle - on juba suured ja vĂ€ga suured installatsioonid, mis vajavad andmebaasi eriti hoolikat seadistamist.

VĂ€ga suurtes installatsioonides vĂ”ib 1 pĂ€ev olla mitteoptimaalne. Olen isiklikult nĂ€inud MySQL’is parteisid 40 gigabaiti pĂ€evas (ja rohkem vĂ”ib olla). See on vĂ€ga suur andmemahu, mis vĂ”ib tekitada probleeme. Seda tuleb vĂ€hendada.

Miks on vajalik partitsioneerimine?

Mida annab partitsioneerimine, arvan ma, et kĂ”ik teavad - see on tabelite sektsioneerimine. Sageli on need eraldi failid kettal ja span-pĂ€ringud. See valib ĂŒhe partei optimaalsemalt, kui see kuulub tavalisse partitsioneerimisse.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Zabbix'i puhul kasutatakse eriti vahemikku, st kasutame ajatemplit (tavalis number, aeg alates ajaloost). MÀÀrate pĂ€eva alguse/lĂ”pu ja see on partei. Seega, kui te kĂŒsite kahe pĂ€eva taguste andmete jĂ€rele, valitakse see kĂ”ik andmebaasist kiiremini, sest tuleb alla laadida vaid ĂŒks fail vahemĂ€lu ja anda vĂ€lja (mitte suur tabel).

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Paljud andmebaasid kiirendavad ka sisestamist (ĂŒhe lapse-tabelisse). Kuigi ma rÀÀgin abstraktselt, on see samuti vĂ”imalik. Partitsioneerimine aitab sageli.

Elasticsearch NoSQL jaoks

Hiljuti, versioonis 3.4, kĂ€ivitasime lahenduse NoSQL. Lisatud on vĂ”imalus kirjutada Elasticsearch'i. Saate kirjutada erinevaid tĂŒĂŒpe: valite - kas kirjutate numbreid vĂ”i mingeid mĂ€rke; meil on string-tekst, logisid saate kirjutada Elasticsearch'i... Seega, veebiliides hakkab samuti pöörduma Elasticsearch'i poole. See töötab mĂ”nel juhul suurepĂ€raselt, kuid praegu on seda vĂ”imalik kasutada.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

TimescaleDB. HĂŒper tabelid

Versioonis 4.4.2 pöörasime tĂ€helepanu ĂŒhele asjale, nimelt TimescaleDB-le. Mis see on? See on laiendus PostgreSQL’ile, st see omab natiivset PostgreSQL liidest. Pluss, see laiendus vĂ”imaldab palju efektiivsemalt töötada ajaseeriate andmetega ja omada automaatset partitsioneerimist. Kuidas see vĂ€lja nĂ€eb:

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

See on hĂŒper tabel - selline mĂ”isted on Timescale’is. See on hĂŒper tabel, mille loote, ja seal asuvad tĂŒkid (chunk). TĂŒkid - need on parteid, need on lapse tabelid, kui ma ei eksi. See on tĂ”eliselt efektiivne.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

TimescaleDB ja PostgreSQL

TimescaleDB tootjad kinnitavad, et nad kasutavad Ôiget pÀringute töötlemise algoritmi, eriti insertide puhul, mis vÔimaldab omada enam-vÀhem konstantset jÔudlust andmestiku sisestamise suuruse suurenedes. See tÀhendab, et pÀrast 200 miljonit rida tavalisel PostgreSQL'il hakkab jÔudlus vÀga kiiresti langema ning see kaob peaaegu nullini, samas kui Timescale vÔimaldab sisestada insertid vÔimalikult efektiivselt olenemata andmete hulgast.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Kuidas installida TimescaleDB? KÔik on lihtne!

Dokumentatsioonis on see kirjas - saate installida ĂŒkskĂ”ik millistelt
 see sĂ”ltub ametlikest PostgreSQL paketidest. Saate kompileerida kĂ€sitsi. Nii juhtus, et ma pidin andmebaasi jaoks kompileerima.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Zabbix'is aktiveerime lihtsalt laiendi. Ma arvan, et need, kes on kasutanud PostgreSQL’i laiendit... Lihtsalt aktiveerite laiendi, loote selle Zabbix’i andmebaasile, mida kasutate.

Ja viimane samm


TimescaleDB. Ajalooliste tabelite migreerimine

Teil on vaja luua hĂŒper tabel. Selle jaoks on eriline funktsioon – Create hypertable. Esimeses parameetris mÀÀrate tabeli, mis on selles andmebaasis vajalik (mille jaoks tuleb luua hĂŒper tabel).

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

VĂ€li, mille alusel tuleb luua, ja chunk_time_interval (see on tĂŒkkide (parteide, mida tuleb kasutada) intervall). 86 400 – see on ĂŒks pĂ€ev.

Parameeter migrate_data: kui sisestate true, siis see kolib kÔik olemasolevad andmed eelnevalt loodud chunkidesse.

Ma ise kasutasin migrate_data – see vĂ”tab mĂ€rkimisvÀÀrselt aega, sĂ”ltuvalt teie andmebaasi suurusest. Mul oli ĂŒle terabaiti – loomine vĂ”ttis rohkem kui tunni. MĂ”nes olukorras, testimise kĂ€igus, kustutasin ajaloolised andmed tekstide (history_text) ja stringide (history_str) kohta, et mitte migreerida – need ei olnud mulle tegelikult huvitavad.

Ja viimane uuendus, mille me teeme meie db_extentionis: seadistame timescaledb, et andmebaas ja eriti meie "Zabbix" mĂ”istaks, et on olemas db_extention. See aktiveerib selle ja kasutab Ă”igesti sĂŒntaksi ja pĂ€ringuid andmebaasi, kasutades juba neid "funktsioone", mis on vajalikud TimescaleDB jaoks.

Serveri konfiguratsioon

Kasutasin kahte serverit. Esimene server on piisavalt vĂ€ike virtuaalmasin, 20 protsessorit, 16 gigabaiti operatiivmĂ€lu. Seadsin sellel ĂŒles "PostgreSQL" 10.8:

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

OperatsioonisĂŒsteem oli Debian, failisĂŒsteem – xfs. Tehtud olid minimaalne seadistused, et kasutada just seda andmebaasi, arvestamata, et kasutab ka "Zabbix". Samas masinas töötas "Zabbix" server, PostgreSQL ja koormuseagentid.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Kasutasin 50 aktiivset agenti, kes kasutavad LoadableModule, et kiiresti genereerida erinevaid tulemusi. Need genereerisid ridu, numbreid ja nii edasi. TĂ€itsin andmebaasi suure hulga andmetega. Esialgne konfiguratsioon sisaldas 5000 andmeelementi iga hosti jaoks ning igal andmeelemendil oli ligikaudu ĂŒks triger – et see oleks tĂ”eline seadistus. MĂ”nikord on kasutamise jaoks isegi vajalik rohkem kui ĂŒks triger.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Uuendamise intervalli, koormust reguleerisin sellega, et kasutasin mitte ainult 50 agenti (lisades veel), vaid ka dĂŒnaamiliste andmeelementide abil ning alandasin uuendamisintervalli 4 sekundini.

JÔudluse test. PostgreSQL: 36 tuhat NVP-d

Esimene kĂ€ivitamine, esimene seadistus oli mul puhtal PostgreSQL 10 sellel riistvaral (35 tuhat vÀÀrtust sekundis). Kuidas nĂ€ha ekraanilt, andmete sisestamine kestab murdosa sekundist – kĂ”ik on hĂ€sti ja kiiresti, SSD-d (200 gigabaiti). Ainus probleem on see, et 20 GB tĂ€ituvad piisavalt kiiresti.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Edasi on piisavalt palju selliseid graafikuid. See on Zabbixi serveri standardne jÔudluse armatuurlaud.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Esimene graafik – vÀÀrtuste arv sekundis (sinine, vasakul ĂŒlal), 35 tuhat vÀÀrtust antud juhul. See (ĂŒleval keskel) on kogumise protsesside koormus, ja see (ĂŒleval paremal) – sisemiste protsesside koormus: ajaloosĂŒnergid ja housekeeper, mis siin (alumisel keskel) tegutses piisavalt pikka aega.

See graafik (alumisel keskel) nĂ€itab ValueCache kasutust – kui palju ValueCache hitte triggereid (mitu tuhat vÀÀrtust sekundis). Veel oluline graafik – neljas (alumisel vasakul), mis nĂ€itab HistoryCache kasutust, millest rÀÀkisin, mis on bufer enne andmebaasi sisestamist.

JÔudluse test. PostgreSQL: 50 tuhat NVP-d

SeejÀrel suurendasin koormust 50 tuhande vÀÀrtuseni sekundis sellel samal riistvaral. Koormuse all "Housekeeper" 10 tuhat vÀÀrtust salvestati juba 2-3 sekundiga koos arvutamisega. See on tegelikult nÀidatud jÀrgmises ekraanipildis:

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

"Housekeeper" hakkab juba tööle segama, kuid ĂŒldiselt jÀÀb trapperite ajaloosĂŒnergite koormus ikka 60 % tasemele (kolmas graafik, paremal ĂŒlal). HistoryCache hakkab juba "Housekeeperi" töö ajal aktiivselt tĂ€ituma (alumisel vasakul). See oli umbes pool gigabaiti, tĂ€itus 20%.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

JÔudluse test. PostgreSQL: 80 tuhat NVP-d

Edasi suurendasin 80 tuhande vÀÀrtuseni sekundis:

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

See oli umbes 400 tuhat andmeelementi, 280 tuhat triggereid. Sisestamise, nagu nĂ€ete, pĂ”hjal on ajaloosĂŒngerite koormus (neid oli 30) juba piisavalt kĂ”rge. Hiljem suurendasin erinevaid parameetreid: ajaloosĂŒngerid, cache
 Selles olekus ajaloosĂŒngerite koormus hakkas maksimaalset taset saavutama, praktiliselt "sellel kohal" – vastavalt, HistoryCache lĂ€ks vĂ€ga kĂ”rge koormuse alla:

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Kogu selle aja jĂ€lgisin kĂ”iki sĂŒsteemi parameetreid (kuidas protsessorit kasutatakse, operatiivmĂ€lu) ja avastasin, et ketaste utiliteerimine oli maksimaalne – saavutasin selle kettaseadmest maksimaalse vĂ”imaluse, sellel riistvaral, sellel virtuaalses masinas. "PostgreSQL" hakkas selle intensiivsuse juures aktiivselt andmeid koormama ja ketas ei jĂ”udnud enam kirjutada, lugeda...

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

VÔtsin teise serveri, millel oli juba 48 protsessorit ja 128 gigabaiti operatiivmÀlu:

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Samuti "tuunisin" selle – panin ajaloosĂŒngerite (60 tk) ja saavutasin vastuvĂ”etava jĂ”udluse. Tegelikult me ei ole "sellel kohal", aga see on ilmselt juba jĂ”udluse piir, kus tuleb midagi ette vĂ”tta.

JÔudluse test. TimescaleDB: 80 tuhat NVP-d

Minu peamine ĂŒlesanne oli kasutada TimescaleDB. Iga graafiku pealt on nĂ€ha langus:

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Need-to-know data migrations are crucial. After this, as you can see, the profile of the history syncers in the 'Zabbix' server changed significantly. It now allows data insertion nearly three times faster while using less HistoryCache, ensuring timely data delivery. Again, 80 thousand values per second is a fairly high rate (of course, not for 'Yandex'). Overall, this is quite a large setup with one server.

PostgreSQL performance test: 120 thousand NVPs

Next, I increased the number of data elements to half a million and achieved a calculated value of 125 thousand per second:

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

I obtained these graphs:

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Essentially, this is a working setup and can operate effectively for a significant duration. However, since I only had a 1.5 terabyte disk, I exhausted it within a few days. Importantly, as new partitions were created in TimescaleDB, the performance impact went unnoticed, unlike MySQL.

Usually, partitions are created overnight since it blocks any insertions and operations with tables, potentially leading to service degradation. In this case, that was not an issue! The main task was to test TimescaleDB's capabilities. The resulting figure: 120 thousand values per second.

There are examples in the community:

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Another individual also implemented TimescaleDB, and the load on io.weight decreased on the processor; the usage of internal process elements also dropped thanks to TimescaleDB. And this was on ordinary spinning disks, meaning a standard virtual machine on traditional disks (not SSD)!

For smaller setups that are limited by disk performance, TimescaleDB seems to be an excellent solution. It allows you to continue operation before upgrading to faster database hardware.

I invite all of you to our events: Conference in Moscow, Summit in Riga. Use our channels – Telegram, forum, IRC. If you have any questions, come visit us at our booth; we can discuss everything.

Audience Questions

Audience question (A): – If TimescaleDB is so easy to set up and provides such performance boosts, perhaps it should be used as best practice for configuring 'Zabbix' with 'Postgres'? Are there any hidden pitfalls or downsides to this solution, or can I confidently use 'Postgres' with 'Timescale' right from the start?

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

AG: – Yes, I would say that it's a good recommendation to use 'Postgres' right along with the TimescaleDB extension. As I mentioned, there are many positive reviews even though this 'feature' is experimental. But tests show that it’s an excellent solution (with TimescaleDB), and I believe it will continue to evolve! We're monitoring the development of this extension and will address necessary adjustments.

During development, we relied on one of its well-known 'features': where chunk handling was slightly different. However, they removed that in the next release, and we had to discard that code. I would recommend this solution for many setups. If you're using MySQL... it works well for medium setups regardless.

A: – In the latest graphs shared by the community, there was one with 'Housekeeper':

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

It continued to operate. What does 'Housekeeper' do with TimescaleDB?

AG: – I can’t say for certain right now – I'll check the code and provide more details. It uses TimescaleDB queries not for chunk deletion but perhaps for aggregation. For now, I’m not prepared to answer this technical question. We will clarify at the booth today or tomorrow.

A: – I have a similar question regarding the performance of deletion operations in 'Timescale'.
A (audience response): – When you delete data from a table, if you do it via delete, you have to scan through the table – remove, clean, and mark everything for future vacuuming. In 'Timescale', as you have chunks, you can simply drop them. Basically, you just tell the file in big data: 'Delete!'

'Timescale' simply understands that such a chunk no longer exists. And since it integrates into the query planner, it catches your conditions in the select or other operations and immediately realizes that this chunk is no longer available – 'I won’t go there!' (the data is absent). That’s it! So, scanning the table is replaced by deleting a binary file, making it fast.

A: – Oleme juba puudutanud teemat, mis ei ole SQL. Nagu ma aru saan, ei vajada „Zabbix“ andmete muutmist vĂ€ga, vaid see on pigem midagi nagu logi. Kas on vĂ”imalik kasutada spetsialiseeritud andmebaase, mis ei suuda oma andmeid muuta, kuid on samas palju kiirem andmete salvestamisel, kogumisel ja edastamisel – nĂ€iteks Clickhouse, midagi Kafka sarnast?.. Kafka on ju samuti logi! Kas on vĂ”imalik neid kuidagi integreerida?

AG: – Andmeid saab eksportida. Meil on versioonis 3.4 teatav „funktsioon“: saate kirjutada kĂ”iki ajaloolisi faile, sĂŒndmusi ja muud failidesse ning seejĂ€rel saata need mĂ”ne töötlejaga teise andmebaasi. Tegelikult palju inimesi kirjutab ja kuvab andmed otse andmebaasi. „Live history-sinkers“ kirjutavad kĂ”ik need andmed failidesse, roteerivad need failid ja nii edasi, ja need saab seejĂ€rel saata „Clickhouse'i“. Ei oska tulevikuperspektiivide kohta midagi öelda, kuid vĂ”ib-olla jĂ€tkub edaspidine toetus NoSQL-lahendustele (nĂ€iteks „Clickhouse“) ka edaspidi.

A: – Kas on vĂ”imalik tĂ€iesti loobuda PostgreSQL-ist?

AG: – Muidugi, kĂ”ige keerulisem osa „Zabbixis“ on ajaloolised tabelid, mis tekitavad kĂ”ige rohkem probleeme, ja sĂŒndmused. Sel juhul, kui te ei hoia sĂŒndmusi kaua ja hoidate ajalugu trendidega mĂ”nes muus kiiremas salvestis, ei tohiks ĂŒldiselt mingeid probleeme tekkida.

A: – Kas saate hinnata, kui palju kiirem kĂ”ik töötab, kui nĂ€iteks minna ĂŒle „Clickhouse’ile“?

AG: – Ma ei ole testinud. Arvan, et minimaalselt samu numbreid on suhteliselt lihtne saavutada, arvestades, et „Clickhouse“ omab oma liidest, kuid ei saa kindlalt öelda. Parim on testida. KĂ”ik sĂ”ltub konfiguratsioonist: kui palju teil on hoste ja nii edasi. Andmete sisestamine on ĂŒks asi, aga neid andmeid tuleb ka vĂ€lja vĂ”tta – nĂ€iteks Grafana vĂ”i muu tarkvaraga.

A: – Kas rÀÀgime seega tasavĂ€gisest vĂ”itlusest, mitte nendest kiiretest andmebaasidest tulenevast suurest eelisest?

AG: – Arvan, et kui integreerime, siis saavad tĂ€psemad testid.

A: – Kuhu jĂ€i vana hea RRD? Mis sundis liikuma SQL andmebaaside poole? Alguses koguti kĂ”ik meetmed RRD-sse.

AG: – „Zabbixis“ oli RRD, vĂ”ib-olla vĂ€ga vanas versioonis. Alati on olnud SQL andmebaasid – klassikaline lĂ€henemine. Klassikaline lĂ€henemine on MySQL ja PostgreSQL (on juba vĂ€ga kaua olemas). Meil on ĂŒhine liides SQL andmebaaside jaoks ja RRD-d oleme praktiliselt kunagi kasutanud.

HighLoad++, Andrei Gushchin (Zabbix): kÔrge jÔudlus ja kohandatud partitsioneerimine.

Vaata videot

Veidi reklaami 🙂

AitĂ€h, et olete meiega. Kas teile meeldivad meie artiklid? Kas soovite nĂ€ha rohkem huvitavaid materjale? Toetage meid, tehes tellimuse vĂ”i soovitades meid tuttavatele. pilve VPS arendajatele alates $4,99, ainulaadne sisenemise taseme serverite analoog, mille oleme teie jaoks vĂ€lja mĂ”elnud: Kogu tĂ”de VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps alates $19 vĂ”i kuidas Ă”ieti serverit jagada? (saadaval on RAID1 ja RAID10 variandid, kuni 24 sĂŒdamikku ja kuni 40GB DDR4).

Kas Dell R730xd on kaks korda odavam Equinixi Tier IV andmete keskuses Amsterdamis? Ainult meie juures 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB alates $199 Hollandi turul! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — alates $99! Lugege, kuidas Luua ettevĂ”tte tasemel infrastruktuur Dell R730xd E5-2650 v4 serveritega, mille hind on 9000 eurot, madala hinnaga?

Allikas: habr.com

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