HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Nou pral gade ki jan Zabbix travay ak baz done TimescaleDB kòm backend la. Nou pral montre w kouman pou w kòmanse apati de grafouyen ak kouman pou w emigre nan PostgreSQL. Nou pral bay tou tès pèfòmans konparatif de konfigirasyon yo.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

HighLoad++ Siberia 2019. Tomsk Hall. 24 jen, 16:00. Tèz ak prezantasyon. Pwochen konferans HighLoad++ la ap fèt 6 ak 7 avril 2020 nan Saint Petersburg. Detay ak tikè по ссылке.

Andrey Gushchin (apwe sa - AG): – Mwen se yon enjenyè sipò teknik ZABBIX (ki refere yo kòm "Zabbix"), yon antrenè. Mwen te travay nan sipò teknik pou plis pase 6 ane epi mwen te gen eksperyans dirèk ak pèfòmans. Jodi a mwen pral pale sou pèfòmans ke TimescaleDB ka bay lè yo konpare ak PostgreSQL regilye 10. Epitou, kèk pati entwodiksyon sou fason li fonksyone an jeneral.

Pi gwo defi pwodiktivite: soti nan koleksyon done ak netwayaj done yo

Pou kòmanse, gen sèten defi pèfòmans ke chak sistèm siveyans fè fas a. Premye defi pwodiktivite a se kolekte epi trete done byen vit.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Yon bon sistèm siveyans ta dwe byen vit, alè resevwa tout done, trete yo dapre ekspresyon deklanche, se sa ki, trete li dapre kèk kritè (sa a diferan nan diferan sistèm) epi sove li nan yon baz done yo nan lòd yo sèvi ak done sa yo nan la. lavni.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Dezyèm defi pèfòmans lan se depo istwa. Sere nan yon baz done souvan epi gen aksè rapid ak pratik nan mezi sa yo ki te kolekte sou yon peryòd de tan. Bagay ki pi enpòtan an se ke done sa yo bon pou jwenn, sèvi ak li nan rapò, graf, deklanche, nan kèk valè papòt, pou alèt, elatriye.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Twazyèm defi pèfòmans lan se netwayaj istwa a, se sa ki, lè ou rive nan pwen kote ou pa bezwen sere nenpòt mezi detaye ki te kolekte sou 5 ane (menm mwa oswa de mwa). Gen kèk nœud rezo yo te efase, oswa kèk lame, mezi yo pa nesesè ankò paske yo deja demode epi yo pa kolekte ankò. Tout bagay sa a bezwen netwaye pou baz done ou a pa grandi twò gwo. An jeneral, netwaye istwa se pi souvan yon tès grav pou depo a - li souvan gen yon enpak trè fò sou pèfòmans.

Ki jan yo rezoud pwoblèm kachèt?

Mwen pral kounye a pale espesyalman sou Zabbix. Nan Zabbix, premye ak dezyèm apèl yo rezoud lè l sèvi avèk kachèt.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Koleksyon done ak pwosesis - Nou itilize RAM pou estoke tout done sa yo. Done sa yo pral kounye a ap diskite an plis detay.

Epitou sou bò baz done a gen kèk kachèt pou seleksyon prensipal yo - pou graf ak lòt bagay.

Cache sou bò sèvè Zabbix tèt li: nou gen ConfigurationCache, ValueCache, HistoryCache, TrendsCache. Ki sa li ye?

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

ConfigurationCache se kachèt prensipal kote nou estoke mezi, lame, atik done, deklannche; tout sa ou bezwen nan pwosesis preprocessing, kolekte done, ki soti nan ki gen tout pouvwa a kolekte, ak ki frekans. Tout bagay sa yo estoke nan ConfigurationCache pou yo pa ale nan baz done a ak kreye demann nesesè. Apre sèvè a kòmanse, nou mete ajou kachèt sa a (kreye li) epi mete ajou li detanzantan (ki depann sou paramèt konfigirasyon yo).

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Caching nan Zabbix. Koleksyon done

Isit la dyagram nan se byen gwo:

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Prensipal yo nan konplo a se pèseptè sa yo:

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Sa yo se pwosesis yo asanble tèt yo, divès kalite "polers" ki responsab pou diferan kalite asanble. Yo kolekte done atravè icmp, ipmi, ak divès pwotokòl epi transfere li tout nan pre-pwosesis.

Preprocessing HistoryCache

Epitou, si nou te kalkile eleman done (moun ki abitye ak Zabbix konnen), se sa ki kalkile, eleman done agrégasyon, nou pran yo dirèkteman nan ValueCache. Mwen pral di w kouman li ranpli pita. Tout pèseptè sa yo sèvi ak ConfigurationCache pou resevwa travay yo epi pase yo nan preprocessing.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Preprocessing tou itilize ConfigurationCache pou jwenn etap preprocessing epi trete done sa yo nan divès fason. Kòmanse soti nan vèsyon 4.2, nou te deplase li nan yon prokurasyon. Sa a se trè pratik, paske preprocessing tèt li se yon operasyon olye difisil. Men, si ou gen yon Zabbix gwo anpil, ak yon gwo kantite eleman done ak yon frekans koleksyon segondè, Lè sa a, sa a anpil senplifye travay la.

An konsekans, apre nou fin trete done sa yo nan kèk fason lè l sèvi avèk preprocessing, nou sove yo nan HistoryCache yo nan lòd yo trete yo pi lwen. Sa a fini koleksyon done yo. Nou ale nan pwosesis prensipal la.

Travay syncer istwa a

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Pwosesis prensipal la nan Zabbix (depi li se yon achitekti monolitik) se History syncer. Sa a se pwosesis prensipal la ki fè fas espesyalman ak pwosesis atomik nan chak eleman done, se sa ki, chak valè:

  • valè a vini (li pran li nan HistoryCache);
  • chèk nan Syncer Configuration: si gen nenpòt deklanche pou kalkil - kalkile yo;
    si gen - kreye evènman, kreye eskalade yo nan lòd yo kreye yon alèt, si sa nesesè dapre konfigirasyon an;
  • dosye deklanche pou pwosesis ki vin apre, agrégation; si ou total sou dènye èdtan an ak sou sa, valè sa a vin chonje pa ValueCache pou yo pa ale nan tablo istwa a; Kidonk, ValueCache a ranpli ak done ki nesesè yo ki nesesè pou kalkile deklannche, eleman kalkile, elatriye;
  • Lè sa a, History syncer ekri tout done nan baz done a;
  • baz done a ekri yo sou disk - sa a se kote pwosesis pwosesis la fini.

Baz done. Cache

Sou bò baz done a, lè ou vle wè graf oswa kèk rapò sou evènman yo, gen divès kalite kachèt. Men nan rapò sa a mwen pap pale de yo.

Pou MySQL gen Innodb_buffer_pool, ak yon pakèt kachèt diferan ki kapab tou configuré.
Men, sa yo se prensipal yo:

  • shared_buffers;
  • efektif_cache_size;
  • shared_pool.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Pou tout baz done, mwen te di ke gen sèten kachèt ki pèmèt ou estoke nan RAM done yo souvan bezwen pou demann. Yo gen pwòp teknoloji yo pou sa.

Konsènan Pèfòmans baz done

An konsekans, gen yon anviwònman konpetitif, se sa ki, sèvè Zabbix kolekte done epi anrejistre li. Lè rekòmanse, li tou li nan istwa ranpli ValueCache la ak sou sa. Isit la ou ka gen scripts ak rapò ki sèvi ak Zabbix API, ki bati sou yon koòdone entènèt. Zabbix API antre nan baz done a epi li resevwa done ki nesesè yo jwenn graf, rapò, oswa kèk kalite lis evènman, pwoblèm ki sot pase yo.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Epitou yon solisyon vizyalizasyon trè popilè se Grafana, ki itilizatè nou yo itilize. Kapab konekte dirèkteman nan API Zabbix ak nan baz done a. Li tou kreye yon konpetisyon sèten pou jwenn done: yon pi bon, pi bon akor nan baz done a bezwen konfòme yo ak livrezon an rapid nan rezilta ak tès.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Netwaye istwa. Zabbix gen Housekeeper

Twazyèm apèl ki itilize nan Zabbix se netwaye istwa lè l sèvi avèk Housekeeper. Housekeeper swiv tout paramèt yo, se sa ki, eleman done nou yo endike konbyen tan yo estoke (an jou), konbyen tan yo sere tandans, ak dinamik chanjman yo.

Mwen pa t 'pale sou TrendCache, ke nou kalkile sou vole: done yo rive, nou rasanble li pou yon èdtan (sitou sa yo se nimewo pou dènye èdtan an), kantite lajan an se mwayèn/minimòm epi nou anrejistre li yon fwa pa èdtan nan la. tablo dinamik chanjman ("tandans"). "Housekeeper" kòmanse ak efase done nan baz done a lè l sèvi avèk seleksyon regilye, ki pa toujou efikas.

Ki jan yo konprann ke li se efikas? Ou ka wè foto sa a sou graf pèfòmans pwosesis entèn yo:

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Syncer Istwa w la toujou okipe (graf wouj). Ak "wouj" graf la ki ale sou tèt. Sa a se yon "Housekeeper" ki kòmanse epi tann pou baz done a efase tout ranje yo ke li te espesifye.

Ann pran kèk ID atik: ou bezwen efase dènye 5 mil yo; nan kou, pa endèks. Men, anjeneral, dataset la se byen gwo - baz done a toujou li li nan disk epi li mete l nan kachèt la, e sa a se yon operasyon trè chè pou baz done a. Tou depan de gwosè li yo, sa ka mennen nan sèten pwoblèm pèfòmans.

Ou ka enfim Housekeeper nan yon fason ki senp - nou gen yon koòdone entènèt abitye. Anviwònman nan Administrasyon jeneral (anviwònman pou "Housekeeper") nou enfim antretyen entèn pou istwa entèn ak tandans. An konsekans, Housekeeper pa kontwole sa ankò:

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Kisa ou ka fè apre? Ou etenn li, graf ou yo nivelman... Ki lòt pwoblèm ki ka parèt nan ka sa a? Ki sa ki ka ede?

Seksyon (seksyon)

Tipikman sa a se configuré nan yon fason diferan sou chak baz done relasyon mwen te nan lis la. MySQL gen pwòp teknoloji li yo. Men, an jeneral, yo sanble anpil lè li rive PostgreSQL 10 ak MySQL. Natirèlman, gen yon anpil nan diferans entèn nan fason li tout aplike ak ki jan li tout afekte pèfòmans. Men, an jeneral, kreyasyon yon nouvo patisyon souvan tou mennen nan sèten pwoblèm.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Tou depan de konfigirasyon ou (konbyen done ou kreye nan yon sèl jou), yo anjeneral mete minimòm nan - sa a se 1 jou / pakèt, ak pou "tandans", dinamik nan chanjman - 1 mwa / nouvo pakèt. Sa a ka chanje si ou gen yon konfigirasyon trè gwo.

Ann di touswit sou gwosè a nan konfigirasyon an: jiska 5 mil nouvo valè pou chak segonn (sa yo rele nvps) - sa a pral konsidere kòm yon ti "konfigirasyon". Mwayèn - soti nan 5 a 25 mil valè pou chak segonn. Tout sa ki anwo a se deja gwo ak gwo enstalasyon ki mande anpil atansyon konfigirasyon baz done a.

Sou enstalasyon trè gwo, 1 jou ka pa pi bon. Mwen pèsonèlman te wè patisyon sou MySQL nan 40 jigokte pou chak jou (e ka gen plis). Sa a se yon gwo kantite done, ki ka mennen nan kèk pwoblèm. Li bezwen redwi.

Poukisa ou bezwen patisyon?

Sa Partitioning bay, mwen panse ke tout moun konnen, se tab partitioning. Souvan sa yo se dosye separe sou disk ak demann span. Li chwazi yon patisyon pi optimal si li se yon pati nan patisyon nòmal.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Pou Zabbix, an patikilye, yo itilize li pa ranje, pa ranje, se sa ki, nou itilize yon timestamp (yon nimewo regilye, tan depi kòmansman epòk la). Ou presize kòmansman jounen an/fen jounen an, epi sa a se patisyon an. An konsekans, si w ap mande pou done ki gen de jou, tout bagay yo rekipere nan baz done a pi vit, paske ou sèlman bezwen chaje yon dosye nan kachèt la epi retounen li (olye ke yon gwo tab).

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Anpil baz done tou akselere insert (ensèsyon nan yon tab pitit). M ap pale abstrè pou kounye a, men sa posib tou. Partitoning souvan ede.

Elasticsearch pou NoSQL

Dènyèman, nan 3.4, nou aplike yon solisyon NoSQL. Te ajoute kapasite pou ekri nan Elasticsearch. Ou ka ekri sèten kalite: ou chwazi - swa ekri nimewo oswa kèk siy; nou gen tèks fisèl, ou ka ekri mòso bwa nan Elasticsearch... An konsekans, koòdone entènèt la pral tou jwenn aksè nan Elasticsearch. Sa a travay gwo nan kèk ka, men nan moman sa a li ka itilize.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

TimecaleDB. Hypertables

Pou 4.4.2 nou te peye atansyon sou yon sèl bagay tankou TimescaleDB. Ki sa li ye? Sa a se yon ekstansyon pou PostgreSQL, se sa ki, li gen yon koòdone natif natal PostgreSQL. Anplis de sa, ekstansyon sa a pèmèt ou travay pi plis efikasite ak done timeseries epi yo gen otomatik patisyon. Ki sa li sanble:

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Sa a se hypertable - gen yon konsèp konsa nan Timecale. Sa a se yon hypertable ke ou kreye, epi li gen fragman. Ti moso yo se patisyon, sa yo se tab timoun, si mwen pa fè erè. Li vrèman efikas.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

TimescaleDB ak PostgreSQL

Kòm manifaktirè TimescaleDB yo asire yo, yo itilize yon algorithm ki pi kòrèk pou trete demann, an patikilye foure, ki pèmèt yo gen pèfòmans apeprè konstan ak yon gwosè ogmante nan insert done a. Sa vle di, apre 200 milyon ranje Postgres, yon sèl abityèl la kòmanse sag anpil epi li pèdi pèfòmans literalman a zewo, pandan y ap Timecale pèmèt ou insert foure kòm efikasite ke posib ak nenpòt kantite done.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Ki jan yo enstale TimescaleDB? Li senp!

Li nan dokiman an, li dekri - ou ka enstale li nan pakè pou nenpòt ki... Sa depann de pakè ofisyèl Postgres yo. Èske yo ka konpile manyèlman. Li te rive ke mwen te konpile pou baz done a.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Sou Zabbix nou tou senpleman aktive Extension. Mwen panse ke moun ki te itilize Extension nan Postgres... Ou senpleman aktive Extension, kreye li pou baz done Zabbix ke w ap itilize a.

Ak dènye etap la ...

TimecaleDB. Migrasyon nan tablo istwa

Ou bezwen kreye yon hypertable. Gen yon fonksyon espesyal pou sa a - Kreye hypertable. Nan li, premye paramèt la se tab la ki nesesè nan baz done sa a (pou ki ou bezwen kreye yon hypertable).

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Jaden pou kreye, ak chunk_time_interval (sa a se entèval moso (patisyon ki bezwen itilize). 86 se yon jou.

Migrate_data paramèt: Si ou mete nan vre, Lè sa a, sa a pral imigre tout done aktyèl yo nan fragman pre-kreye.

Mwen te itilize migrate_data tèt mwen - li pran yon bon kantite tan, tou depann de ki jan gwo baz done ou a. Mwen te gen plis pase yon teraocte - li te pran plis pase inèdtan pou kreye. Nan kèk ka, pandan tès la, mwen efase done istorik pou tèks (history_text) ak fisèl (history_str) pou yo pa transfere yo - yo pa te reyèlman enteresan pou mwen.

Epi nou fè dènye aktyalizasyon nan db_extention nou an: nou enstale timescaledb pou baz done a ak, an patikilye, Zabbix nou an konprann ke gen db_extention. Li aktive li epi sèvi ak sentaks ki kòrèk la ak demann nan baz done a, lè l sèvi avèk "karakteristik" sa yo ki nesesè pou TimescaleDB.

Konfigirasyon sèvè

Mwen te itilize de serveurs. Premye sèvè a se yon ti machin vityèl, 20 processeurs, 16 jigokte RAM. Mwen konfigirasyon Postgres 10.8 sou li:

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Sistèm operasyon an te Debian, sistèm fichye a te xfs. Mwen te fè paramèt minim pou itilize baz done patikilye sa a, mwens sa Zabbix li menm pral itilize. Sou machin nan menm te gen yon sèvè Zabbix, PostgreSQL ak ajan chaj.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Mwen te itilize 50 ajan aktif ki itilize LoadableModule rapidman jenere rezilta diferan. Se yo menm ki te pwodwi fisèl yo, nimewo, ak sou sa. Mwen te ranpli baz done a ak anpil done. Okòmansman, konfigirasyon an te genyen 5 mil eleman done pou chak lame, ak apeprè chak eleman done gen yon deklanche - nan lòd pou sa a yo dwe yon konfigirasyon reyèl. Pafwa ou menm bezwen plis pase yon deklanche pou itilize.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Mwen reglemante entèval aktyalizasyon a ak chaj nan tèt li pa sèlman lè l sèvi avèk 50 ajan (ajoute plis), men tou, lè l sèvi avèk eleman done dinamik epi redwi entèval aktyalizasyon a a 4 segonn.

Tès pèfòmans. PostgreSQL: 36 mil NVPs

Premye lansman, premye konfigirasyon mwen te genyen sou pi PostreSQL 10 sou pyès ki nan konpitè sa a (35 mil valè pou chak segonn). An jeneral, jan ou ka wè sou ekran an, mete done pran fraksyon nan yon segonn - tout bagay se bon ak vit, SSD kondui (200 jigokte). Bagay la sèlman se ke 20 GB ranpli byen vit.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Pral gen anpil nan graf sa yo nan tan kap vini an. Sa a se yon tablodbò estanda pèfòmans sèvè Zabbix.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Premye graf la se kantite valè pou chak segonn (ble, anlè agoch), 35 mil valè nan ka sa a. Sa a (anwo sant) se chaj la nan pwosesis bati, ak sa a (anwo adwat) se chaj la nan pwosesis entèn: senkronize istwa ak mennaj, ki isit la (anba sant) te kouri pou kèk tan.

Grafik sa a (sant anba) montre itilizasyon ValueCache - konbyen fwa ValueCache frape pou deklanche (plizyè mil valè pou chak segonn). Yon lòt graf enpòtan se katriyèm lan (anba goch), ki montre itilizasyon HistoryCache, ke mwen te pale de, ki se yon tanpon anvan mete nan baz done a.

Tès pèfòmans. PostgreSQL: 50 mil NVPs

Apre sa, mwen ogmante chaj la a 50 mil valè pou chak segonn sou menm pyès ki nan konpitè. Lè Housekeeper chaje, 10 mil valè yo te anrejistre nan 2-3 segonn ak kalkil. Ki sa ki, an reyalite, yo montre nan ekran sa a:

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

"Housekeeper" deja kòmanse entèfere ak travay, men an jeneral, chaj la sou istwa-sinker trappers se toujou nan nivo 60% (twazyèm graf, anwo adwat). HistoryCache deja kòmanse ranpli aktivman pandan Housekeeper ap kouri (anba agoch). Li te apeprè mwatye yon gigaocte, 20% plen.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Tès pèfòmans. PostgreSQL: 80 mil NVPs

Lè sa a, mwen ogmante li a 80 mil valè pou chak segonn:

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Se te apeprè 400 mil eleman done, 280 mil deklanche. Insert la, jan ou ka wè, an tèm de chaj la nan istwa sinkers (te gen 30 nan yo) te deja byen wo. Lè sa a, mwen ogmante paramèt divès kalite: platin istwa, kachèt ... Sou pyès ki nan konpitè sa a, chaj la sou platin istwa yo te kòmanse ogmante nan yon maksimòm, prèske "sou etajè a" - kòmsadwa, HistoryCache te antre nan yon chaj trè wo:

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Pandan tout tan sa a, mwen kontwole tout paramèt sistèm yo (ki jan processeur a itilize, RAM) epi dekouvri ke itilizasyon disk te maksimòm - mwen reyalize kapasite maksimòm disk sa a sou pyès ki nan konpitè sa a, sou machin vityèl sa a. "Postgres" te kòmanse jete done byen aktivman nan entansite sa yo, ak disk la pa gen tan ankò ekri, li ...

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Mwen te pran yon lòt sèvè ki te deja gen 48 processeurs ak 128 jigokte RAM:

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Mwen menm mwen "branche" li - enstale History syncer (60 moso) ak reyalize pèfòmans akseptab. An reyalite, nou pa "sou etajè a," men sa a se pwobableman limit la nan pwodiktivite, kote li deja nesesè fè yon bagay sou li.

Tès pèfòmans. TimecaleDB: 80 mil NVPs

Travay prensipal mwen an se te sèvi ak TimescaleDB. Chak graf montre yon plonje:

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Echèk sa yo se jisteman migrasyon done. Apre sa, nan sèvè Zabbix la, pwofil loading istwa a, jan ou ka wè, chanje anpil. Li pèmèt ou mete done prèske 3 fwa pi vit epi sèvi ak mwens HistoryCache - kòmsadwa, w ap gen done delivre alè. Yon fwa ankò, 80 mil valè pou chak segonn se yon pousantaj jistis wo (nan kou, pa pou Yandex). An jeneral sa a se yon konfigirasyon jistis gwo, ak yon sèl sèvè.

Tès pèfòmans PostgreSQL: 120 mil NVP

Apre sa, mwen te ogmante valè a nan kantite eleman done a mwatye yon milyon dola epi mwen te resevwa yon valè kalkile 125 mil pou chak segonn:

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Apre sa, mwen te resevwa graf sa yo:

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Nan prensip, sa a se yon konfigirasyon k ap travay, li ka travay pou byen yon tan long. Men, kòm mwen te gen sèlman yon disk 1,5 terabyte, mwen te itilize li moute nan yon koup de jou. Bagay ki pi enpòtan an se ke an menm tan an nouvo patisyon yo te kreye sou TimescaleDB, e sa a te konplètman inapèsi pou pèfòmans, ki pa ka di sou MySQL.

Tipikman, patisyon yo kreye nan mitan lannwit, paske sa a jeneralman bloke ensèsyon ak travay ak tab epi li ka mennen nan degradasyon nan sèvis la. Nan ka sa a se pa ka a! Travay prensipal la se te teste kapasite TimescaleDB. Rezilta a te figi sa a: 120 mil valè pou chak segonn.

Genyen tou egzanp nan kominote a:

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Moun nan tou vire sou TimescaleDB ak chaj la sou lè l sèvi avèk io.weight tonbe sou processeur a; epi itilizasyon eleman pwosesis entèn yo diminye tou akòz enklizyon TimescaleDB. Anplis, sa yo se disk galèt òdinè, se sa ki, yon machin vityèl òdinè sou disk òdinè (pa SSD)!

Pou kèk ti konfigirasyon ki limite pa pèfòmans disk, TimescaleDB, nan opinyon mwen, se yon solisyon trè bon. Li pral pèmèt ou kontinye travay anvan emigre nan pyès ki nan konpitè pi vit pou baz done a.

Mwen envite nou tout nan evènman nou yo: Konferans nan Moskou, Somè nan Riga. Sèvi ak chanèl nou yo - Telegram, fowòm, IRC. Si ou gen nenpòt kesyon, vin nan biwo nou an, nou ka pale sou tout bagay.

Kesyon odyans lan

Kesyon ki soti nan odyans lan (apwe sa a - A): - Si TimescaleDB tèlman fasil pou konfigirasyon, epi li bay tankou yon ogmantasyon pèfòmans, Lè sa a, petèt sa a ta dwe itilize kòm yon pi bon pratik pou konfigirasyon Zabbix ak Postgres? Epi èske gen nenpòt enkonvenyans ak dezavantaj nan solisyon sa a, oswa apre tout, si mwen deside fè Zabbix pou tèt mwen, mwen ka fasilman pran Postgres, enstale Timescale la touswit, sèvi ak li epi pa panse sou okenn pwoblèm?

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

AG: – Wi, mwen ta di ke sa a se yon bon rekòmandasyon: sèvi ak Postgres imedyatman ak ekstansyon TimescaleDB la. Kòm mwen te deja di, yon anpil nan bon revize, malgre lefèt ke "karakteristik" sa a se eksperimantal. Men, aktyèlman tès yo montre ke sa a se yon gwo solisyon (ak TimescaleDB) e mwen panse ke li pral evolye! N ap kontwole fason ekstansyon sa a devlope epi n ap fè chanjman jan sa nesesè.

Menm pandan devlopman, nou te konte sou youn nan "karakteristik" byen li te ye yo: li te posib yo travay ak fragman yon ti kras diferan. Men, Lè sa a, yo koupe li soti nan pwochen lage a, epi nou te oblije sispann konte sou kòd sa a. Mwen ta rekòmande pou itilize solisyon sa a sou anpil konfigirasyon. Si ou sèvi ak MySQL... Pou konfigirasyon mwayèn, nenpòt solisyon travay byen.

A: – Sou dènye graf ki soti nan kominote a, te gen yon graf ki gen "Housekeeper":

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Li te kontinye travay. Kisa Housekeeper fè ak TimescaleDB?

AG: - Koulye a, mwen pa ka di pou asire w - Mwen pral gade nan kòd la epi di ou nan plis detay. Li itilize demann TimescaleDB pa efase moso, men pou yon jan kanmenm rasanble yo. Mwen poko pare poum reponn kesyon teknik sa a. Nou pral jwenn plis enfòmasyon nan stand a jodi a oswa demen.

A: – Mwen gen yon kesyon ki sanble – sou pèfòmans operasyon an efase nan Timecale.
Yon (repons nan odyans lan): – Lè ou efase done ki soti nan yon tab, si ou fè li atravè efase, Lè sa a, ou bezwen ale nan tab la - efase, netwaye, make tout bagay pou vakyòm nan lavni. Nan Timecale, depi ou gen fragman, ou ka gout. Apeprè pale, ou tou senpleman di fichye a ki nan gwo done: "Efase!"

Timecale tou senpleman konprann ke tankou yon moso pa egziste ankò. Epi kòm li entegre nan planifikatè rechèch la, li sèvi ak kwòk pou kenbe kondisyon ou yo nan seleksyon oswa lòt operasyon epi imedyatman konprann ke moso sa a pa egziste ankò - "Mwen p ap ale la ankò!" (done pa disponib). Se tout! Sa vle di, yon eskanè tab ranplase pa yon efase dosye binè, kidonk li rapid.

A: – Nou te deja manyen sou sijè ki pa SQL. Osi lwen ke mwen konprann, Zabbix pa reyèlman bezwen modifye done yo, ak tout bagay sa a se yon bagay tankou yon boutèy demi lit. Èske li posib pou itilize baz done espesyalize ki pa ka chanje done yo, men an menm tan sove, akimile, epi distribye pi vit - Clickhouse, pou egzanp, yon bagay ki sanble ak Kafka? .. Kafka se tou yon boutèy demi lit! Èske li posib yon jan kanmenm entegre yo?

AG: - Dechaje ka fèt. Nou gen yon sèten "karakteristik" depi vèsyon 3.4: ou ka ekri tout dosye istorik, evènman, tout lòt bagay nan dosye; epi voye li nan nenpòt lòt baz done lè l sèvi avèk kèk moun kap okipe. An reyalite, anpil moun retravay epi ekri dirèkteman nan baz done a. Sou vole, istwa sinkers ekri tout bagay sa yo nan dosye, Thorne dosye sa yo, ak sou sa, epi ou ka transfere sa a nan Clickhouse. Mwen pa ka di sou plan, men petèt plis sipò pou solisyon NoSQL (tankou Clickhouse) ap kontinye.

A: – An jeneral, li sanble ke ou ka konplètman debarase m de postgres?

AG: – Natirèlman, pati ki pi difisil nan Zabbix se tab istorik yo, ki kreye plis pwoblèm, ak evènman yo. Nan ka sa a, si ou pa estoke evènman pou yon tan long epi estoke istwa a ak tandans nan kèk lòt depo vit, Lè sa a, an jeneral, mwen panse, pa pral gen okenn pwoblèm.

A: – Èske ou ka estime konbyen pi vit tout bagay pral travay si ou chanje nan Clickhouse, pou egzanp?

AG: - Mwen pa te teste li. Mwen panse ke omwen menm nimewo yo ka reyalize byen tou senpleman, bay Clickhouse gen koòdone pwòp li yo, men mwen pa ka di pou asire w. Li pi bon pou teste. Li tout depann sou konfigirasyon an: konbyen lame ou genyen, ak sou sa. Mete se yon sèl bagay, men ou bezwen tou rekipere done sa yo - Grafana oswa yon lòt bagay.

A: – Se konsa, nou ap pale sou yon batay egal, epi yo pa sou gwo avantaj nan baz done vit sa yo?

AG: – Mwen panse ke lè nou entegre, pral gen tès pi egzak.

A: – Ki kote bon ansyen RRD te ale? Ki sa ki fè ou chanje nan baz done SQL? Okòmansman, tout mezi yo te kolekte sou RRD.

AG: – Zabbix te gen RRD, petèt nan yon vèsyon trè ansyen. Te toujou gen baz done SQL - yon apwòch klasik. Apwòch klasik la se MySQL, PostgreSQL (yo te egziste pou yon tan trè lontan). Nou prèske pa janm itilize yon koòdone komen pou baz done SQL ak RRD.

HighLoad++, Andrey Gushchin (Zabbix): pèfòmans segondè ak patisyon natif natal

Kèk piblisite 🙂

Mèsi paske w rete avèk nou. Ou renmen atik nou yo? Vle wè plis kontni enteresan? Sipòte nou pa mete yon lòd oswa rekòmande pou zanmi, nwaj VPS pou devlopè soti nan $ 4.99, yon analogue inik nan sèvè nivo antre, ki te envante pa nou pou ou: Tout verite sou VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps soti nan $ 19 oswa ki jan yo pataje yon sèvè? (disponib ak RAID1 ak RAID10, jiska 24 nwayo ak jiska 40GB DDR4).

Dell R730xd 2 fwa pi bon mache nan sant done Equinix Tier IV nan Amstèdam? Sèlman isit la 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV soti nan $199 nan Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - soti nan $ 99! Li sou Ki jan yo bati enfrastrikti corp. klas ak itilizasyon Dell R730xd E5-2650 v4 serveurs ki vo 9000 ero pou yon jounen travay?

Sous: www.habr.com

Add nouvo kòmantè