Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Zabbix se yon sistèm siveyans. Tankou nenpòt lòt sistèm, li fè fas a twa pwoblèm prensipal nan tout sistèm siveyans: kolekte ak trete done, estoke istwa, ak netwaye li.

Etap yo nan resevwa, trete ak anrejistreman done yo pran tan. Pa anpil, men pou yon gwo sistèm sa ka lakòz gwo reta. Pwoblèm nan depo se yon pwoblèm aksè done. Yo itilize yo pou rapò, chèk ak deklannche. Latans nan aksè done tou afekte pèfòmans. Lè baz done grandi, done ki pa enpòtan yo dwe efase. Retire se yon operasyon difisil ki tou manje moute kèk resous.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Pwoblèm reta pandan koleksyon ak depo nan Zabbix yo rezoud pa kachèt: plizyè kalite kachèt, kachèt nan baz done a. Pou rezoud pwoblèm twazyèm lan, kachèt pa apwopriye, kidonk Zabbix itilize TimescaleDB. Li pral di ou sou li Andrey Gushchin - enjenyè sipò teknik Zabbix SIA. Andrey te sipòte Zabbix pou plis pase 6 ane epi li gen eksperyans dirèk ak pèfòmans.

Ki jan TimescaleDB travay, ki pèfòmans li ka bay konpare ak PostgreSQL regilye? Ki wòl Zabbix jwe pou baz done TimescaleDB? Ki jan yo kòmanse nan grafouyen ak ki jan yo imigre soti nan PostgreSQL ak ki konfigirasyon ki gen pi bon pèfòmans? Sou tout bagay sa yo anba koupe a.

Pwodiktivite defi

Chak sistèm siveyans fè fas a defi pèfòmans espesifik. Mwen pral pale sou twa nan yo: koleksyon done ak pwosesis, depo, ak netwaye istwa.

Koleksyon done rapid ak pwosesis. Yon bon sistèm siveyans ta dwe byen vit resevwa tout done epi trete yo dapre ekspresyon deklanche - dapre kritè li yo. Apre pwosesis, sistèm lan dwe byen vit sove done sa yo nan baz done a pou itilize pita.

Depo istwa. Yon bon sistèm siveyans ta dwe estoke istwa nan yon baz done epi bay aksè fasil nan mezi. Istwa nesesè pou itilize nan rapò, graf, deklanche, papòt, ak atik done alèt kalkile.

Netwaye istwa. Pafwa gen yon jou lè ou pa bezwen sere mezi. Poukisa ou bezwen done ki te kolekte 5 ane de sa, yon mwa oswa de: gen kèk nœuds yo te efase, gen kèk lame oswa mezi yo pa nesesè ankò paske yo demode epi yo pa kolekte ankò. Yon bon sistèm siveyans ta dwe estoke done istorik epi efase li de tan zan tan pou baz done a pa grandi.

Netwaye done rasi se yon pwoblèm kritik ki gen anpil enpak sou pèfòmans baz done a.

Caching nan Zabbix

Nan Zabbix, premye ak dezyèm apèl yo rezoud lè l sèvi avèk kachèt. Yo itilize RAM pou kolekte epi trete done. Pou depo - istwa nan deklannche, graf ak eleman done kalkile. Sou bò baz done a gen kèk kachèt pou seleksyon debaz, pou egzanp, graf.

Cache sou bò sèvè Zabbix la li menm se:

  • ConfigurationCache;
  • ValueCache;
  • HistoryCache;
  • TrendsCache.

Ann konsidere yo nan plis detay.

ConfigurationCache

Sa a se kachèt prensipal kote nou estoke mezi, lame, atik done, deklanche - tout sa nou bezwen pou PreProcessing ak pou koleksyon done.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Tout bagay sa yo estoke nan ConfigurationCache pou yo pa kreye demann ki pa nesesè nan baz done a. Apre sèvè a kòmanse, nou aktyalize kachèt sa a, kreye epi mete ajou konfigirasyon yo detanzantan.

Koleksyon done

Dyagram nan se byen gwo, men bagay prensipal la nan li se pèseptè. Sa yo se divès kalite "polers" - pwosesis asanble. Yo responsab diferan kalite asanble: yo kolekte done atravè SNMP, IPMI, epi transfere li tout nan PreProcessing.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDBPèseptè yo dekri an zoranj.

Zabbix te kalkile atik total ki nesesè pou total chèk yo. Si nou genyen yo, nou chache done yo pou yo dirèkteman nan ValueCache la.

Preprocessing HistoryCache

Tout pèseptè itilize ConfigurationCache pou resevwa travay. Lè sa a, yo transfere yo nan PreProcessing.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

PreProcessing itilize ConfigurationCache pou resevwa etap PreProcessing. Li trete done sa yo nan plizyè fason.

Apre yo fin trete done yo lè l sèvi avèk PreProcessing, nou sove li nan HistoryCache pou trete. Sa a fini koleksyon done yo epi nou ale nan pwosesis prensipal la nan Zabbix - senkronize istwa, depi li se yon achitekti monolitik.

Remak: Preprocessing se byen yon operasyon difisil. Avèk v 4.2 li te deplase nan proxy. Si ou gen yon Zabbix trè gwo ak yon gwo kantite eleman done ak frekans koleksyon, Lè sa a, sa a fè travay la pi fasil.

ValueCache, istwa ak tandans kachèt

History syncer se pwosesis prensipal ki atomikman trete chak eleman done, se sa ki, chak valè.

History Syncer pran valè nan HistoryCache epi tcheke Konfigirasyon pou prezans deklannche pou kalkil yo. Si yo egziste, li kalkile.

History syncer kreye yon evènman, eskalade pou kreye alèt si konfigirasyon sa mande, ak dosye. Si gen deklannche pou pwosesis ki vin apre, Lè sa a, li estoke valè sa a nan ValueCache pou yo pa jwenn aksè nan tablo istwa a. Sa a se ki jan ValueCache ranpli ak done ki nesesè yo kalkile deklannche ak eleman kalkile.

History syncer ekri tout done nan baz done a, epi li ekri sou disk. Pwosesis pwosesis la fini isit la.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Cache nan baz done a

Sou bò baz done a gen plizyè kachèt lè ou vle wè graf oswa rapò sou evènman yo:

  • Innodb_buffer_pool sou bò MySQL;
  • shared_buffers sou bò PostgreSQL;
  • effective_cache_size sou bò Oracle;
  • shared_pool sou bò DB2.

Gen anpil lòt kachèt, men sa yo se prensipal yo pou tout baz done. Yo pèmèt ou estoke done nan RAM ki souvan nesesè pou demann. Yo gen pwòp teknoloji yo pou sa.

Pèfòmans baz done se kritik

Sèvè Zabbix toujou ap kolekte done epi ekri li. Lè rekòmanse, li tou li nan istwa ranpli ValueCache la. Itilize scripts ak rapò Zabbix API, ki bati sou yon koòdone Web. Zabbix API jwenn aksè nan baz done a epi rekipere done ki nesesè pou graf, rapò, lis evènman ak dènye pwoblèm.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Pou vizyalizasyon - grafana. Sa a se yon solisyon popilè nan mitan itilizatè nou yo. Li ka voye demann dirèkteman atravè API Zabbix ak nan baz done a, epi li kreye yon konpetisyon sèten pou resevwa done. Se poutèt sa, pi byen ak pi bon akor nan baz done a bezwen matche ak livrezon an rapid nan rezilta ak tès yo.

Housekeeper

Twazyèm defi pèfòmans nan Zabbix se netwaye istwa lè l sèvi avèk Housekeeper. Li swiv tout anviwònman yo - eleman done yo endike konbyen tan yo sere dinamik chanjman (tandans) nan jou.

Nou kalkile TrendsCache sou vole. Lè done yo rive, nou rasanble li pou yon èdtan epi anrejistre li nan tab pou dinamik chanjman tandans yo.

Housekeeper kòmanse epi efase enfòmasyon ki nan baz done a lè l sèvi avèk "seleksyon" abityèl yo. Sa a se pa toujou efikas, jan yo ka wè nan graf yo pèfòmans nan pwosesis entèn yo.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Graf wouj la montre ke senkronize istwa a toujou okipe. Grafik zoranj nan tèt la se Housekeeper, ki toujou ap kouri. Li tann pou baz done a efase tout ranje yo ke li te espesifye.

Ki lè ou ta dwe enfim Housekeeper? Pou egzanp, gen yon "Atik ID" epi ou bezwen efase dènye 5 mil ranje yo nan yon sèten tan. Natirèlman, sa rive pa endèks. Men, anjeneral dataset la gwo anpil, ak baz done a toujou li nan disk epi li mete l nan kachèt la. Sa a se toujou yon operasyon trè chè pou baz done a epi, tou depann de gwosè a nan baz done a, ka mennen nan pwoblèm pèfòmans.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Housekeeper fasil pou enfim. Nan koòdone entènèt la gen yon anviwònman nan "Administrasyon jeneral" pou Housekeeper. Nou enfim entèn Housekeeping pou istwa tandans entèn epi li pa jere li ankò.

Housekeeper te etenn, graf yo nivelman - ki pwoblèm ki ta ka genyen nan ka sa a ak ki sa ki ka ede rezoud defi a twazyèm pèfòmans?

Partitioning - partitioning oswa partitioning

Tipikman, patisyon se configuré nan yon fason diferan sou chak baz done relasyon ke mwen te nan lis la. Chak gen teknoloji pwòp li yo, men yo sanble an jeneral. Kreye yon nouvo patisyon souvan mennen nan sèten pwoblèm.

Tipikman, patisyon yo configuré depann sou "konfigirasyon an" - kantite done ki kreye nan yon sèl jou. Kòm yon règ, Partitioning se bay nan yon sèl jou, sa a se minimòm la. Pou tandans nan yon pakèt nouvo - 1 mwa.

Valè yo ka chanje si "konfigirasyon an" gwo anpil. Si yon ti "konfigirasyon" se jiska 5 nvps (nouvo valè pou chak segonn), yon mwayen se soti nan 000 a 5, Lè sa a, yon gwo se pi wo a 000 nvps. Sa yo se enstalasyon gwo ak gwo anpil ki mande pou konfigirasyon atansyon nan baz done a.

Sou enstalasyon trè gwo, yon peryòd de yon jou ka pa pi bon. Mwen te wè patisyon MySQL nan 40 GB oswa plis pou chak jou. Sa a se yon gwo kantite done ki ka lakòz pwoblèm ak bezwen redwi.

Ki sa Partitioning bay?

Tablo divize. Souvan sa yo se dosye separe sou disk. Plan rechèch la chwazi yon patisyon pi optimal. Anjeneral patisyon yo itilize pa ranje - sa a se vre tou pou Zabbix. Nou itilize "timestamp" la - tan depi kòmansman epòk la. Sa yo se nimewo òdinè pou nou. Ou mete kòmansman ak fen jounen an - sa a se yon patisyon.

Retire rapid - DELETE. Se yon sèl fichye/soustab chwazi, olye ke yon seleksyon nan ranje pou efase.

Siyifikativman akselere rekipere done SELECT - itilize youn oswa plis patisyon, olye ke tab la tout antye. Si w ap jwenn aksè nan done ki gen de jou, li se rekipere nan baz done a pi vit paske ou sèlman bezwen chaje yon sèl fichye nan kachèt la epi retounen li, pa yon gwo tab.

Souvan anpil baz done yo tou akselere INSERT — ensèsyon nan tab timoun nan.

TimecaleDB

Pou v 4.2, nou te vire atansyon nou sou TimescaleDB. Sa a se yon ekstansyon pou PostgreSQL ak yon koòdone natif natal. Ekstansyon an travay efektivman ak done seri tan, san yo pa pèdi benefis ki genyen nan baz done relasyon yo. TimescaleDB tou patisyon otomatikman.

TimescaleDB gen yon konsèp hypertable (ipèrtab) ke ou kreye. Li genyen ladan li fragman - Partitions. Ti moso yo otomatikman jere fragman hypertable ki pa afekte lòt fragman. Chak moso gen pwòp ranje tan li yo.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

TimescaleDB vs PostgreSQL

TimescaleDB travay vrèman avèk efikasite. Manifaktirè ekstansyon yo reklame ke yo itilize yon algorithm pwosesis rechèch ki pi kòrèk, an patikilye inserts . Kòm gwosè a insert dataset ap grandi, algorithm la kenbe pèfòmans konstan.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Apre 200 milyon ranje, PostgreSQL anjeneral kòmanse sag anpil epi li pèdi pèfòmans nan 0. TimescaleDB pèmèt ou byen insert "insert" pou nenpòt ki kantite done.

Enstalasyon

Enstale TimescaleDB se jistis fasil pou nenpòt ki pake. NAN dokiman tout bagay yo dekri an detay - sa depann de pakè ofisyèl PostgreSQL yo. TimescaleDB kapab tou bati ak konpile manyèlman.

Pou baz done Zabbix nou tou senpleman aktive ekstansyon an:

echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix

Ou aktive extension epi kreye li pou baz done Zabbix la. Dènye etap la se kreye yon hypertable.

Migrasyon tab istwa yo nan TimescaleDB

Gen yon fonksyon espesyal pou sa create_hypertable:

SELECT create_hypertable(‘history’, ‘clock’, chunk_time_interval => 86400, migrate_data => true);
SELECT create_hypertable(‘history_unit’, ‘clock’, chunk_time_interval => 86400, migrate_data => true);
SELECT create_hypertable(‘history_log’, ‘clock’, chunk_time_interval => 86400, migrate_data => true);
SELECT create_hypertable(‘history_text’, ‘clock’, chunk_time_interval => 86400, migrate_data => true);
SELECT create_hypertable(‘history_str’, ‘clock’, chunk_time_interval => 86400, migrate_data => true);
SELECT create_hypertable(‘trends’, ‘clock’, chunk_time_interval => 86400, migrate_data => true);
SELECT create_hypertable(‘trends_unit’, ‘clock’, chunk_time_interval => 86400, migrate_data => true);
UPDATE config SET db_extension=’timescaledb’, hk_history_global=1, hk_trends_global=1

Fonksyon an gen twa paramèt. Premye - tab nan baz done, pou ki ou bezwen kreye yon hypertable. Dezyèm - jaden, dapre ki ou bezwen kreye chunk_time_interval — entèval nan moso patisyon yo dwe itilize. Nan ka mwen an, entèval la se yon jou - 86.

Twazyèm paramèt - migrate_data. Si ou mete true, Lè sa a, tout done aktyèl yo transfere nan fragman pre-kreye. Mwen te itilize li poukont mwen migrate_data. Mwen te gen apeprè 1 TB, ki te pran plis pase yon èdtan. Menm nan kèk ka, pandan tès la, mwen efase done istorik nan kalite karaktè ki pa te obligatwa pou depo, pou yo pa transfere yo.

Dènye etap - UPDATE: nan db_extension mete timescaledbpou baz done a konprann ke ekstansyon sa a egziste. Zabbix aktive li epi kòrèkteman itilize sentaks la ak demann nan baz done a - karakteristik sa yo ki nesesè pou TimescaleDB.

Konfigirasyon pyès ki nan konpitè

Mwen te itilize de serveurs. Premye - VMware machin. Li se byen piti: 20 Intel® Xeon® CPU E5-2630 v 4 @ 2.20GHz processeurs, 16 GB RAM ak yon SSD 200 GB.

Mwen enstale PostgreSQL 10.8 sou li ak Debian 10.8-1.pgdg90+1 OS ak sistèm dosye xfs. Mwen configured tout bagay yon minimòm pou itilize baz done patikilye sa a, mwens sa Zabbix tèt li pral itilize.

Sou machin nan menm te gen yon sèvè Zabbix, PostgreSQL ak chaj ajan yo. Mwen te gen 50 ajan aktif ki te itilize LoadableModuletrè vit jenere rezilta diferan: nimewo, fisèl. Mwen te ranpli baz done a ak anpil done.

Okòmansman konfigirasyon an genyen 5 eleman done pou chak lame. Prèske chak eleman te genyen yon deklanche pou fè li sanble ak enstalasyon reyèl. Nan kèk ka te gen plis pase yon deklanche. Pou yon sèl rezo ne te gen 3-000 deklanche.

Entèval Mizajou Atik Done − 4-7 segonn. Mwen regle chay tèt li lè m sèvi ak pa sèlman 50 ajan, men ajoute plis. Epitou, lè l sèvi avèk eleman done, mwen dinamik ajiste chaj la epi redwi entèval aktyalizasyon a 4 s.

PostgreSQL. 35 nvps

Premye kouri mwen sou pyès ki nan konpitè sa a te sou PostgreSQL pi - 35 mil valè pou chak segonn. Kòm ou ka wè, mete done pran fraksyon nan yon segonn - tout bagay se bon ak vit. Bagay la sèlman se ke yon disk SSD 200 GB ranpli byen vit.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Sa a se yon tablodbò estanda pèfòmans sèvè Zabbix.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Premye graf ble a se kantite valè pa segonn. Dezyèm graf sou bò dwat la se chajman nan pwosesis bati. Twazyèm lan ap chaje pwosesis konstriksyon entèn yo: senkronize istwa ak Housekeeper, ki te kouri isit la pou kèk tan.

Katriyèm graf la montre itilizasyon HistoryCache. Sa a se yon kalite tanpon anvan mete nan baz done a. Vèt senkyèm graf la montre itilizasyon ValueCache, se sa ki, konbyen valè ValueCache frape pou deklannche - sa a se plizyè mil valè pou chak segonn.

PostgreSQL. 50 nvps

Lè sa a, mwen ogmante chaj la a 50 mil valè pou chak segonn sou pyès ki nan konpitè menm.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Lè chaje soti nan Housekeeper, mete 10 mil valè te pran 2-3 segonn.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB
Housekeeper deja kòmanse entèfere ak travay.

Twazyèm graf la montre ke, an jeneral, chaj la sou trappers ak synchers istwa toujou nan 60%. Nan katriyèm graf la, HistoryCache deja kòmanse ranpli byen aktivman pandan operasyon Housekeeper. Li se 20% plen, ki se sou 0,5 GB.

PostgreSQL. 80 nvps

Lè sa a, mwen ogmante chaj la a 80 mil valè pou chak segonn. Sa a se apeprè 400 mil eleman done ak 280 mil deklanche.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB
Pri a chaje nan trant synchers istwa deja byen wo.

Mwen menm mwen te ogmante paramèt divès kalite: senkronize istwa, kachèt.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Sou pyès ki nan konpitè mwen an, loading nan senkronize istwa ogmante nan maksimòm la. HistoryCache byen vit ranpli ak done - done pou tretman te akimile nan tanpon an.

Pandan tout tan sa a mwen te obsève ki jan processeur a, RAM ak lòt paramèt sistèm yo te itilize, epi li te jwenn ke itilizasyon disk te nan maksimòm li yo.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Mwen te reyalize itilizasyon an kapasite maksimòm disk sou pyès ki nan konpitè sa a ak sou machin vityèl sa a. Avèk entansite sa a, PostgreSQL te kòmanse kole done byen aktivman, ak disk la pa gen tan ankò ekri ak li.

Dezyèm sèvè

Mwen te pran yon lòt sèvè, ki te deja gen 48 processeurs ak 128 GB RAM. Mwen ranje li - mete l 'a 60 senkronize istwa, ak reyalize pèfòmans akseptab.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

An reyalite, sa a se deja limit la nan pwodiktivite kote yon bagay bezwen fè.

TimecaleDB. 80 nvps

Travay prensipal mwen an se teste kapasite TimescaleDB kont chaj Zabbix. 80 mil valè pou chak segonn se yon anpil, frekans nan kolekte mezi (eksepte Yandex, nan kou) ak yon "konfigirasyon" jistis gwo.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Gen yon plonje nan chak graf - sa a se jisteman migrasyon an done. Apre echèk nan sèvè Zabbix la, pwofil loading nan senkronize istwa chanje anpil - li tonbe twa fwa.

TimescaleDB pèmèt ou mete done prèske 3 fwa pi vit epi sèvi ak mwens HistoryCache.

An konsekans, ou pral resevwa done nan yon fason apwopriye.

TimecaleDB. 120 nvps

Lè sa a, mwen ogmante kantite eleman done a 500 mil. Travay prensipal la se te teste kapasite TimescaleDB - mwen te resevwa yon valè kalkile 125 mil valè pou chak segonn.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Sa a se yon "konfigirasyon" k ap travay ki ka travay pou yon tan long. Men, depi disk mwen an te sèlman 1,5 TB, mwen ranpli li nan yon koup de jou.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Bagay ki pi enpòtan an se ke an menm tan an te kreye nouvo patisyon TimescaleDB.

Sa a se konplètman inapèsi pou pèfòmans. Lè patisyon yo kreye nan MySQL, pou egzanp, tout bagay diferan. Sa a anjeneral rive nan mitan lannwit paske li bloke ensèsyon jeneral, travay ak tab epi li ka kreye degradasyon sèvis. Sa a se pa ka a ak TimescaleDB.

Kòm yon egzanp, mwen pral montre yon graf ki soti nan anpil nan kominote a. Nan foto a, TimescaleDB pèmèt, gras a ki chaj la sou lè l sèvi avèk io.weight sou processeur a te tonbe. Itilize nan eleman pwosesis entèn tou diminye. Anplis, sa a se yon machin vityèl òdinè sou disk galèt òdinè, pa yon SSD.

Pèfòmans segondè ak patisyon natif natal: Zabbix ak sipò TimescaleDB

Jwenn

TimescaleDB se yon bon solisyon pou ti "konfigirasyon", ki afekte pèfòmans disk. Li pral pèmèt ou kontinye travay byen jiskaske baz done a imigre nan pyès ki nan konpitè pi vit ke posib.

TimescaleDB se fasil konfigirasyon, bay pwogrè pèfòmans, travay byen ak Zabbix ak gen avantaj sou PostgreSQL.

Si ou itilize PostgreSQL epi ou pa planifye pou chanje li, mwen rekòmande sèvi ak PostgreSQL ak ekstansyon TimescaleDB an konjonksyon avèk Zabbix. Solisyon sa a travay efektivman jiska yon mwayen "konfigirasyon".

Lè nou di "wo pèfòmans" nou vle di HighLoad ++. Ou p'ap gen tan tann pou aprann sou teknoloji ak pratik ki pèmèt sèvis yo sèvi plizyè milyon itilizatè yo. Lis rapò pou 7 ak 8 novanm nou te deja konpile, men isit la rankont yo plis ka sijere.

Abònman ak nou bilten nouvèl и telegram, nan ki nou revele karakteristik yo nan konferans kap vini an, epi chèche konnen ki jan yo jwenn pi plis nan li.

Sous: www.habr.com

Add nouvo kòmantè