HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Byddwn yn edrych ar sut mae Zabbix yn gweithio gyda chronfa ddata TimescaleDB fel y pen ôl. Byddwn yn dangos i chi sut i ddechrau o'r dechrau a sut i fudo o PostgreSQL. Byddwn hefyd yn darparu profion perfformiad cymharol o'r ddau ffurfweddiad.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

HighLoad++ Siberia 2019. Neuadd Tomsk. Mehefin 24, 16:00. traethodau ymchwil a cyflwyniad. Cynhelir y gynhadledd HighLoad ++ nesaf ar Ebrill 6 a 7, 2020 yn St Petersburg. Manylion a thocynnau по ссылке.

Andrey Gushchin (o hyn ymlaen - AG): - Rwy'n beiriannydd cymorth technegol ZABBIX (y cyfeirir ato o hyn ymlaen fel “Zabbix”), hyfforddwr. Rwyf wedi bod yn gweithio ym maes cymorth technegol am fwy na 6 mlynedd ac wedi cael profiad uniongyrchol gyda pherfformiad. Heddiw, byddaf yn siarad am y perfformiad y gall TimescaleDB ei ddarparu o'i gymharu â PostgreSQL 10 rheolaidd. Hefyd, rhywfaint o ran ragarweiniol am sut mae'n gweithio'n gyffredinol.

Prif heriau cynhyrchiant: o gasglu data i lanhau data

I ddechrau, mae heriau perfformiad penodol y mae pob system fonitro yn eu hwynebu. Yr her cynhyrchiant gyntaf yw casglu a phrosesu data yn gyflym.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Dylai system fonitro dda dderbyn yr holl ddata yn gyflym, yn amserol, ei brosesu yn unol â mynegiadau sbardun, hynny yw, ei brosesu yn unol â rhai meini prawf (mae hyn yn wahanol mewn gwahanol systemau) a'i gadw mewn cronfa ddata er mwyn defnyddio'r data hwn yn y dyfodol.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Yr ail her perfformiad yw storio hanes. Storio mewn cronfa ddata yn aml a chael mynediad cyflym a chyfleus i'r metrigau hyn a gasglwyd dros gyfnod o amser. Y peth pwysicaf yw bod y data hwn yn gyfleus i'w gael, ei ddefnyddio mewn adroddiadau, graffiau, sbardunau, mewn rhai gwerthoedd trothwy, ar gyfer rhybuddion, ac ati.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Y trydydd her perfformiad yw clirio hanes, hynny yw, pan fyddwch chi'n cyrraedd y pwynt lle nad oes angen i chi storio unrhyw fetrigau manwl sydd wedi'u casglu dros 5 mlynedd (hyd yn oed fisoedd neu ddau fis). Cafodd rhai nodau rhwydwaith eu dileu, neu rai gwesteiwyr, nid oes angen y metrigau mwyach oherwydd eu bod eisoes wedi dyddio ac nid ydynt yn cael eu casglu mwyach. Mae angen glanhau hyn i gyd fel nad yw'ch cronfa ddata yn tyfu'n rhy fawr. Yn gyffredinol, mae hanes clirio yn aml yn brawf difrifol ar gyfer storio - yn aml mae'n cael effaith gref iawn ar berfformiad.

Sut i ddatrys problemau caching?

Byddaf yn awr yn siarad yn benodol am Zabbix. Yn Zabbix, mae'r alwad gyntaf a'r ail alwad yn cael eu datrys gan ddefnyddio caching.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Casglu a phrosesu data - Rydym yn defnyddio RAM i storio'r holl ddata hwn. Bydd y data hyn yn cael eu trafod yn fanylach yn awr.

Hefyd ar ochr y gronfa ddata mae rhywfaint o caching ar gyfer y prif ddetholiadau - ar gyfer graffiau a phethau eraill.

Caching ar ochr y gweinydd Zabbix ei hun: mae gennym ConfigurationCache, ValueCache, HistoryCache, TrendsCache. Beth yw e?

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

ConfigurationCache yw'r prif storfa lle rydym yn storio metrigau, gwesteiwyr, eitemau data, sbardunau; popeth sydd ei angen arnoch i brosesu rhagbrosesu, casglu data, gan ba westeion i'w casglu, pa mor aml. Mae hyn i gyd yn cael ei storio yn ConfigurationCache er mwyn peidio â mynd i'r gronfa ddata a chreu ymholiadau diangen. Ar ôl i'r gweinydd ddechrau, rydym yn diweddaru'r storfa hon (yn ei greu) ac yn ei ddiweddaru o bryd i'w gilydd (yn dibynnu ar y gosodiadau cyfluniad).

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Caching yn Zabbix. Casglu data

Yma mae'r diagram yn eithaf mawr:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Y prif rai yn y cynllun yw'r casglwyr hyn:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Dyma'r prosesau cynulliad eu hunain, amrywiol “bolwyr” sy'n gyfrifol am wahanol fathau o gynulliadau. Maent yn casglu data trwy icmp, ipmi, a phrotocolau amrywiol ac yn trosglwyddo'r cyfan i ragbrosesu.

PreProcessing HistoryCache

Hefyd, os ydym wedi cyfrifo elfennau data (mae'r rhai sy'n gyfarwydd â Zabbix yn gwybod), hynny yw, wedi'i gyfrifo, elfennau data agregu, rydym yn eu cymryd yn uniongyrchol o ValueCache. Byddaf yn dweud wrthych sut y caiff ei lenwi yn nes ymlaen. Mae'r casglwyr hyn i gyd yn defnyddio ConfigurationCache i dderbyn eu swyddi ac yna'n eu trosglwyddo i ragbrosesu.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Mae Preprocessing hefyd yn defnyddio ConfigurationCache i gael camau rhagbrosesu a phrosesu'r data hwn mewn amrywiol ffyrdd. Gan ddechrau o fersiwn 4.2, rydym wedi ei symud i ddirprwy. Mae hyn yn gyfleus iawn, oherwydd mae rhagbrosesu ei hun yn weithrediad eithaf anodd. Ac os oes gennych chi Zabbix mawr iawn, gyda nifer fawr o elfennau data ac amlder casglu uchel, yna mae hyn yn symleiddio'r gwaith yn fawr.

Yn unol â hynny, ar ôl i ni brosesu'r data hwn mewn rhyw ffordd gan ddefnyddio rhagbrosesu, rydym yn ei gadw yn HistoryCache er mwyn ei brosesu ymhellach. Mae hyn yn dod â'r casgliad data i ben. Symudwn ymlaen at y brif broses.

Gwaith cysonwr hanes

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Y brif broses yn Zabbix (gan mai pensaernïaeth monolithig ydyw) yw History syncer. Dyma'r brif broses sy'n delio'n benodol â phrosesu atomig pob elfen ddata, hynny yw, pob gwerth:

  • daw'r gwerth (mae'n ei gymryd o HistoryCache);
  • gwiriadau yn Configuration syncer: a oes unrhyw sbardunau ar gyfer cyfrifo - yn eu cyfrifo;
    if there is - yn creu digwyddiadau, yn creu uwchgyfeirio er mwyn creu rhybudd, os oes angen yn ôl y ffurfwedd;
  • cofnodion sbardunau ar gyfer prosesu dilynol, agregu; os ydych chi'n agregu dros yr awr ddiwethaf ac yn y blaen, mae ValueCache yn cofio'r gwerth hwn er mwyn peidio â mynd i'r tabl hanes; Felly, mae'r ValueCache wedi'i lenwi â'r data angenrheidiol sy'n angenrheidiol i gyfrifo sbardunau, elfennau wedi'u cyfrifo, ac ati;
  • yna mae History syncer yn ysgrifennu'r holl ddata i'r gronfa ddata;
  • mae'r gronfa ddata yn eu hysgrifennu i ddisg - dyma lle mae'r broses brosesu yn dod i ben.

Cronfa Ddata. Caching

Ar ochr y gronfa ddata, pan fyddwch chi eisiau gweld graffiau neu rai adroddiadau ar ddigwyddiadau, mae yna wahanol caches. Ond yn yr adroddiad hwn ni fyddaf yn siarad amdanynt.

Ar gyfer MySQL mae Innodb_buffer_pool, a chriw o wahanol caches y gellir eu ffurfweddu hefyd.
Ond dyma'r prif rai:

  • byfferau wedi'u rhannu;
  • effeithiol_cache_size;
  • rhannu_pwll.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Ar gyfer pob cronfa ddata, dywedais fod yna rai caches sy'n eich galluogi i storio yn RAM y data sydd ei angen yn aml ar gyfer ymholiadau. Mae ganddyn nhw eu technolegau eu hunain ar gyfer hyn.

Ynglŷn â Pherfformiad Cronfa Ddata

Yn unol â hynny, mae amgylchedd cystadleuol, hynny yw, mae gweinydd Zabbix yn casglu data ac yn ei gofnodi. Pan gaiff ei ailgychwyn, mae hefyd yn darllen o hanes i lenwi'r ValueCache ac yn y blaen. Yma gallwch gael sgriptiau ac adroddiadau sy'n defnyddio'r API Zabbix, sydd wedi'i adeiladu ar ryngwyneb gwe. Mae Zabbix API yn mynd i mewn i'r gronfa ddata ac yn derbyn y data angenrheidiol i gael graffiau, adroddiadau, neu ryw fath o restr o ddigwyddiadau, problemau diweddar.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Ateb delweddu poblogaidd iawn hefyd yw Grafana, y mae ein defnyddwyr yn ei ddefnyddio. Yn gallu mewngofnodi'n uniongyrchol trwy'r Zabbix API a thrwy'r gronfa ddata. Mae hefyd yn creu cystadleuaeth benodol ar gyfer cael data: mae angen tiwnio'r gronfa ddata yn fanylach ac yn well i gydymffurfio â chyflawni canlyniadau a phrofion yn gyflym.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Clirio hanes. Mae gan Zabbix Geidwad Tŷ

Y trydydd galwad a ddefnyddir yn Zabbix yw clirio hanes gan ddefnyddio Housekeeper. Mae ceidwad tŷ yn dilyn yr holl osodiadau, hynny yw, mae ein helfennau data yn nodi pa mor hir i storio (mewn dyddiau), pa mor hir i storio tueddiadau, a dynameg newidiadau.

Wnes i ddim siarad am TrendCache, rydyn ni'n ei gyfrifo ar y hedfan: mae data'n cyrraedd, rydyn ni'n ei agregu am awr (mae'r rhain yn bennaf yn niferoedd ar gyfer yr awr olaf), mae'r swm yn gyfartalog / lleiaf ac rydyn ni'n ei gofnodi unwaith yr awr yn y tabl o ddeinameg newidiadau (“Tueddiadau”) . Mae “Housekeeper” yn dechrau ac yn dileu data o'r gronfa ddata gan ddefnyddio detholiadau rheolaidd, nad yw bob amser yn effeithiol.

Sut i ddeall ei fod yn aneffeithiol? Gallwch weld y llun canlynol ar graffiau perfformiad prosesau mewnol:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Mae'ch syncer Hanes yn brysur drwy'r amser (graff coch). A'r graff “coch” sy'n mynd ar ei ben. Mae hwn yn “Gofalwr Tŷ” sy'n cychwyn ac yn aros i'r gronfa ddata ddileu'r holl resi y mae wedi'u nodi.

Gadewch i ni gymryd rhywfaint o ID Eitem: mae angen i chi ddileu'r 5 mil diwethaf; wrth gwrs, gan fynegeion. Ond fel arfer mae'r set ddata yn eithaf mawr - mae'r gronfa ddata yn dal i'w ddarllen o ddisg ac yn ei roi yn y storfa, ac mae hwn yn weithrediad drud iawn i'r gronfa ddata. Yn dibynnu ar ei faint, gall hyn arwain at rai problemau perfformiad.

Gallwch analluogi Cadw Tŷ mewn ffordd syml - mae gennym ryngwyneb gwe cyfarwydd. Gosodiadau mewn Gweinyddiaeth gyffredinol (gosodiadau ar gyfer “Housekeeper”) rydym yn analluogi cadw tŷ mewnol ar gyfer hanes mewnol a thueddiadau. Yn unol â hynny, nid yw'r Swyddog Cadw Tŷ yn rheoli hyn mwyach:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Beth allwch chi ei wneud nesaf? Rydych chi wedi'i ddiffodd, mae eich graffiau wedi lefelu... Pa broblemau pellach allai godi yn yr achos hwn? Beth all helpu?

Rhaniadu (rhanu)

Yn nodweddiadol mae hyn wedi'i ffurfweddu mewn ffordd wahanol ar bob cronfa ddata berthynol rydw i wedi'i rhestru. Mae gan MySQL ei dechnoleg ei hun. Ond ar y cyfan maent yn debyg iawn o ran PostgreSQL 10 a MySQL. Wrth gwrs, mae yna lawer o wahaniaethau mewnol o ran sut mae'r cyfan yn cael ei weithredu a sut mae'r cyfan yn effeithio ar berfformiad. Ond yn gyffredinol, mae creu rhaniad newydd yn aml hefyd yn arwain at rai problemau.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Yn dibynnu ar eich setup (faint o ddata rydych chi'n ei greu mewn un diwrnod), maen nhw fel arfer yn gosod yr isafswm - mae hyn yn 1 diwrnod / swp, ac ar gyfer “tueddiadau”, dynameg newidiadau - 1 mis / swp newydd. Gall hyn newid os oes gennych chi osodiad mawr iawn.

Gadewch i ni ddweud ar unwaith am faint y setup: hyd at 5 mil o werthoedd newydd yr eiliad (nvps fel y'i gelwir) - bydd hyn yn cael ei ystyried yn “setup” bach. Cyfartaledd - o 5 i 25 mil o werthoedd yr eiliad. Y cyfan sydd uchod yw gosodiadau mawr a mawr iawn sydd angen cyfluniad gofalus iawn o'r gronfa ddata.

Ar osodiadau mawr iawn, efallai na fydd 1 diwrnod yn optimaidd. Yn bersonol, rwyf wedi gweld rhaniadau ar MySQL o 40 gigabeit y dydd (ac efallai y bydd mwy). Mae hwn yn swm mawr iawn o ddata, a all arwain at rai problemau. Mae angen ei leihau.

Pam mae angen rhaniad arnoch chi?

Yr hyn y mae Partitioning yn ei ddarparu, rwy'n meddwl bod pawb yn ei wybod, yw rhaniad bwrdd. Yn aml mae'r rhain yn ffeiliau ar wahân ar ddisgiau a cheisiadau rhychwant. Mae'n dewis un rhaniad yn fwy optimaidd os yw'n rhan o raniad arferol.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Ar gyfer Zabbix, yn arbennig, fe'i defnyddir yn ôl amrediad, yn ôl amrediad, hynny yw, rydym yn defnyddio stamp amser (rhif rheolaidd, amser ers dechrau'r epoc). Rydych chi'n nodi dechrau'r diwrnod / diwedd y dydd, a dyma'r rhaniad. Yn unol â hynny, os ydych chi'n gofyn am ddata sy'n ddau ddiwrnod oed, mae popeth yn cael ei adfer o'r gronfa ddata yn gyflymach, oherwydd dim ond un ffeil sydd angen i chi ei lwytho i'r storfa a'i dychwelyd (yn hytrach na thabl mawr).

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Mae llawer o gronfeydd data hefyd yn cyflymu mewnosod (gosod mewn un tabl plentyn). Rwy'n siarad yn haniaethol am y tro, ond mae hyn hefyd yn bosibl. Mae cymryd rhan yn aml yn helpu.

Elasticsearch ar gyfer NoSQL

Yn ddiweddar, yn 3.4, fe wnaethom weithredu datrysiad NoSQL. Ychwanegwyd y gallu i ysgrifennu yn Elasticsearch. Gallwch ysgrifennu rhai mathau: rydych chi'n dewis - naill ai ysgrifennu rhifau neu rai arwyddion; mae gennym destun llinynnol, gallwch ysgrifennu logiau i Elasticsearch... Yn unol â hynny, bydd y rhyngwyneb gwe hefyd yn cyrchu Elasticsearch. Mae hyn yn gweithio'n wych mewn rhai achosion, ond ar hyn o bryd gellir ei ddefnyddio.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

AmserlenDB. Gorfyrddau

Ar gyfer 4.4.2 talwyd sylw i un peth fel TimescaleDB. Beth yw e? Mae hwn yn estyniad ar gyfer PostgreSQL, hynny yw, mae ganddo ryngwyneb PostgreSQL brodorol. Hefyd, mae'r estyniad hwn yn caniatáu ichi weithio'n llawer mwy effeithlon gyda data cyfres amser a chael rhaniad awtomatig. Sut mae'n edrych:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Mae hyn yn hypertable - mae cysyniad o'r fath yn yr Amserlen. Mae hwn yn hypertable rydych chi'n ei greu, ac mae'n cynnwys talpiau. Rhaniadau yw talpiau, byrddau plant yw'r rhain, os nad wyf yn camgymryd. Mae'n wirioneddol effeithiol.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

AmserlenDB a PostgreSQL

Fel y mae gweithgynhyrchwyr TimescaleDB yn ei sicrhau, maent yn defnyddio algorithm mwy cywir ar gyfer prosesu ymholiadau, yn enwedig mewnosodiadau, sy'n caniatáu iddynt gael perfformiad eithaf cyson gyda maint cynyddol y mewnosodiad set ddata. Hynny yw, ar ôl 200 miliwn o resi o Postgres, mae'r un arferol yn dechrau sagio'n fawr iawn ac yn colli perfformiad yn llythrennol i sero, tra bod Amserlen yn caniatáu ichi fewnosod mewnosodiadau mor effeithlon â phosibl gydag unrhyw swm o ddata.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Sut i osod TimescaleDB? Mae'n syml!

Mae yn y ddogfennaeth, fe'i disgrifir - gallwch ei osod o becynnau ar gyfer unrhyw ... Mae'n dibynnu ar becynnau swyddogol Postgres. Gellir ei lunio â llaw. Digwyddodd felly bod yn rhaid i mi lunio ar gyfer y gronfa ddata.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Ar Zabbix rydym yn syml actifadu Estyniad. Rwy'n meddwl bod y rhai a ddefnyddiodd Estyniad yn Postgres... Yn syml, rydych chi'n actifadu Extention, yn ei greu ar gyfer y gronfa ddata Zabbix rydych chi'n ei defnyddio.

A'r cam olaf...

AmserlenDB. Mudo tablau hanes

Mae angen i chi greu hypertable. Mae swyddogaeth arbennig i hyn - Creu hypertable. Ynddo, y paramedr cyntaf yw'r tabl sydd ei angen yn y gronfa ddata hon (y mae angen i chi greu hypertable ar ei gyfer).

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Y maes ar gyfer creu, a chunk_time_interval (dyma'r cyfwng talpiau (rhaniadau sydd angen eu defnyddio). 86 yw un diwrnod.

Paramedr Migrate_data: Os mewnosodwch i wir, yna bydd hyn yn mudo'r holl ddata cyfredol i dalpiau a grëwyd ymlaen llaw.

Rwyf wedi defnyddio migrate_data fy hun - mae'n cymryd cryn dipyn o amser, yn dibynnu ar ba mor fawr yw eich cronfa ddata. Cefais dros terabyte - cymerodd dros awr i greu. Mewn rhai achosion, yn ystod y profion, fe wnes i ddileu data hanesyddol ar gyfer testun (history_text) a llinyn (history_str) er mwyn peidio â'u trosglwyddo - nid oeddent yn ddiddorol iawn i mi.

Ac rydym yn gwneud y diweddariad diwethaf yn ein db_extention: rydym yn gosod timescaledb fel bod y gronfa ddata ac, yn benodol, ein Zabbix yn deall bod db_extention. Mae'n ei actifadu ac yn defnyddio'r gystrawen gywir ac ymholiadau i'r gronfa ddata, gan ddefnyddio'r “nodweddion” hynny sy'n angenrheidiol ar gyfer TimescaleDB.

Cyfluniad gweinydd

Defnyddiais ddau weinydd. Mae'r gweinydd cyntaf yn beiriant rhithwir eithaf bach, 20 prosesydd, 16 gigabeit o RAM. Fe wnes i ffurfweddu Postgres 10.8 arno:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Y system weithredu oedd Debian, y system ffeiliau oedd xfs. Gwneuthum y gosodiadau lleiaf posibl i ddefnyddio'r gronfa ddata benodol hon, namyn yr hyn y bydd Zabbix ei hun yn ei ddefnyddio. Ar yr un peiriant roedd gweinydd Zabbix, PostgreSQL ac asiantau llwyth.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Rwyf wedi defnyddio 50 o asiantau gweithredol sy'n defnyddio LoadableModule i gynhyrchu canlyniadau gwahanol yn gyflym. Nhw yw'r rhai a gynhyrchodd y llinynnau, y niferoedd, ac ati. Llenwais y gronfa ddata gyda llawer o ddata. I ddechrau, roedd y cyfluniad yn cynnwys 5 mil o elfennau data fesul gwesteiwr, ac roedd oddeutu pob elfen ddata yn cynnwys sbardun - er mwyn i hwn fod yn setup go iawn. Weithiau mae hyd yn oed angen mwy nag un sbardun i'w ddefnyddio.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Rheoleiddiais y cyfwng diweddaru a'r llwyth ei hun trwy nid yn unig ddefnyddio 50 o asiantau (ychwanegu mwy), ond hefyd gan ddefnyddio elfennau data deinamig a lleihau'r cyfwng diweddaru i 4 eiliad.

Prawf perfformiad. PostgreSQL: 36 mil NVPs

Y lansiad cyntaf, y setup cyntaf a gefais oedd ar PostreSQL 10 pur ar y caledwedd hwn (35 mil o werthoedd yr eiliad). Yn gyffredinol, fel y gwelwch ar y sgrin, mae mewnosod data yn cymryd ffracsiynau o eiliad - mae popeth yn dda ac yn gyflym, gyriannau SSD (200 gigabeit). Yr unig beth yw bod 20 GB yn llenwi'n eithaf cyflym.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Bydd cryn dipyn o graffiau o'r fath yn y dyfodol. Mae hwn yn ddangosfwrdd perfformiad gweinydd safonol Zabbix.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Y graff cyntaf yw nifer y gwerthoedd yr eiliad (glas, chwith uchaf), 35 mil o werthoedd yn yr achos hwn. Hwn (canol uchaf) yw llwytho prosesau adeiladu, a dyma (dde uchaf) yw llwytho prosesau mewnol: syncers hanes a chadw tŷ, sydd yma (canol gwaelod) wedi bod yn rhedeg ers cryn amser.

Mae'r graff hwn (canol gwaelod) yn dangos defnydd ValueCache - faint o drawiadau ValueCache ar gyfer sbardunau (sawl mil o werthoedd yr eiliad). Graff pwysig arall yw'r pedwerydd un (gwaelod chwith), sy'n dangos y defnydd o HistoryCache, y soniais amdano, sef byffer cyn ei fewnosod yn y gronfa ddata.

Prawf perfformiad. PostgreSQL: 50 mil NVPs

Nesaf, cynyddais y llwyth i 50 mil o werthoedd yr eiliad ar yr un caledwedd. Pan gafodd ei lwytho gan Housekeeper, cofnodwyd 10 mil o werthoedd mewn 2-3 eiliad gyda chyfrifiad. Beth, mewn gwirionedd, sy'n cael ei ddangos yn y sgrinlun canlynol:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Mae “Ceidwad tŷ” eisoes yn dechrau ymyrryd â gwaith, ond yn gyffredinol, mae'r llwyth ar draperwyr hanes-sinker yn dal i fod ar lefel 60% (trydydd graff, ar y dde uchaf). Mae HistoryCache eisoes yn dechrau llenwi'n weithredol tra bod Cadw Tŷ yn rhedeg (gwaelod chwith). Roedd tua hanner gigabeit, 20% yn llawn.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Prawf perfformiad. PostgreSQL: 80 mil NVPs

Yna cynyddais ef i 80 mil o werthoedd yr eiliad:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Roedd tua 400 mil o elfennau data, 280 mil o sbardunau. Roedd y mewnosodiad, fel y gwelwch, o ran y llwyth o sinkers hanes (roedd 30 ohonynt) eisoes yn eithaf uchel. Yna cynyddais baramedrau amrywiol: sinkers hanes, storfa ... Ar y caledwedd hwn, dechreuodd y llwyth ar sinwyr hanes gynyddu i'r eithaf, bron “ar y silff” - yn unol â hynny, aeth HistoryCache i mewn i lwyth uchel iawn:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Trwy'r amser hwn, fe wnes i fonitro holl baramedrau'r system (sut mae'r prosesydd yn cael ei ddefnyddio, RAM) a darganfod bod y defnydd o ddisg yn uchaf - cyflawnais gapasiti mwyaf y ddisg hon ar y caledwedd hwn, ar y peiriant rhithwir hwn. Dechreuodd "Postgres" ddympio data yn eithaf gweithredol ar ddwyster o'r fath, ac nid oedd gan y ddisg amser i ysgrifennu, darllen ...

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Cymerais weinydd arall a oedd eisoes â 48 o broseswyr a 128 gigabeit o RAM:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Fe wnes i ei “diwnio” hefyd - gosod Syncer Hanes (60 darn) a chyflawni perfformiad derbyniol. Mewn gwirionedd, nid ydym “ar y silff,” ond mae'n debyg mai dyma derfyn cynhyrchiant, lle mae eisoes yn angenrheidiol gwneud rhywbeth yn ei gylch.

Prawf perfformiad. AmserlenDB: 80 mil NVPs

Fy mhrif dasg oedd defnyddio TimescaleDB. Mae pob graff yn dangos gostyngiad:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Mudo data yn union yw'r methiannau hyn. Ar ôl hynny, yn y gweinydd Zabbix, mae proffil llwytho sinkers hanes, fel y gwelwch, wedi newid llawer. Mae'n caniatáu ichi fewnosod data bron i 3 gwaith yn gyflymach a defnyddio llai o HistoryCache - yn unol â hynny, bydd gennych ddata wedi'i ddosbarthu mewn pryd. Unwaith eto, mae 80 mil o werthoedd yr eiliad yn gyfradd eithaf uchel (wrth gwrs, nid ar gyfer Yandex). Ar y cyfan mae hwn yn osodiad eithaf mawr, gydag un gweinydd.

Prawf perfformiad PostgreSQL: 120 mil o NVPs

Nesaf, cynyddais werth nifer yr elfennau data i hanner miliwn a derbyniais werth cyfrifedig o 125 mil yr eiliad:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

A chefais y graffiau hyn:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Mewn egwyddor, mae hwn yn setup gweithio, gall weithio am amser eithaf hir. Ond gan mai dim ond disg 1,5 terabyte oedd gen i, fe wnes i ei ddefnyddio mewn cwpl o ddiwrnodau. Y peth pwysicaf yw bod rhaniadau newydd wedi'u creu ar yr un pryd ar TimescaleDB, ac roedd hyn yn gwbl ddisylw ar gyfer perfformiad, na ellir ei ddweud am MySQL.

Yn nodweddiadol, mae rhaniadau'n cael eu creu yn y nos, oherwydd mae hyn yn gyffredinol yn rhwystro gosod a gweithio gyda thablau a gall arwain at ddiraddio'r gwasanaeth. Yn yr achos hwn nid yw hyn yn wir! Y brif dasg oedd profi galluoedd TimescaleDB. Y canlyniad oedd y ffigur canlynol: 120 mil o werthoedd yr eiliad.

Mae yna hefyd enghreifftiau yn y gymuned:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Trodd y person hefyd TimescaleDB ymlaen a gostyngodd y llwyth ar ddefnyddio io.weight ar y prosesydd; ac mae'r defnydd o elfennau proses fewnol hefyd wedi lleihau oherwydd cynnwys AmserlenDB. Ar ben hynny, disgiau crempog cyffredin yw'r rhain, hynny yw, peiriant rhithwir cyffredin ar ddisgiau cyffredin (nid SSDs)!

Ar gyfer rhai gosodiadau bach sy'n gyfyngedig gan berfformiad disg, mae TimescaleDB, yn fy marn i, yn ateb da iawn. Bydd yn caniatáu ichi barhau i weithio cyn mudo i galedwedd cyflymach ar gyfer y gronfa ddata.

Rwy'n eich gwahodd i gyd i'n digwyddiadau: Cynhadledd ym Moscow, Uwchgynhadledd yn Riga. Defnyddiwch ein sianeli - Telegram, fforwm, IRC. Os oes gennych unrhyw gwestiynau, dewch at ein desg, gallwn siarad am bopeth.

Cwestiynau Cynulleidfa

Cwestiwn gan y gynulleidfa (o hyn ymlaen - A): - Os yw TimescaleDB mor hawdd i'w ffurfweddu, a'i fod yn rhoi hwb perfformiad o'r fath, yna efallai y dylid defnyddio hwn fel arfer gorau ar gyfer ffurfweddu Zabbix gyda Postgres? Ac a oes unrhyw beryglon ac anfanteision i'r ateb hwn, neu wedi'r cyfan, os penderfynais wneud Zabbix i mi fy hun, gallaf gymryd Postgres yn hawdd, gosod Amserlen yno ar unwaith, ei ddefnyddio a pheidio â meddwl am unrhyw broblemau?

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

AG: – Ydw, byddwn yn dweud bod hwn yn argymhelliad da: defnyddiwch Postgres ar unwaith gyda'r estyniad TimescaleDB. Fel y dywedais eisoes, mae llawer o adolygiadau da, er gwaethaf y ffaith bod y "nodwedd" hon yn arbrofol. Ond mewn gwirionedd mae profion yn dangos bod hwn yn ateb gwych (gydag TimescaleDB) a chredaf y bydd yn esblygu! Rydym yn monitro sut mae'r estyniad hwn yn datblygu a byddwn yn gwneud newidiadau yn ôl yr angen.

Hyd yn oed yn ystod datblygiad, roeddem yn dibynnu ar un o'u “nodweddion” adnabyddus: roedd yn bosibl gweithio gyda thapiau ychydig yn wahanol. Ond yna fe wnaethon nhw ei dorri allan yn y datganiad nesaf, a bu'n rhaid i ni roi'r gorau i ddibynnu ar y cod hwn. Byddwn yn argymell defnyddio'r datrysiad hwn ar lawer o setiau. Os ydych chi'n defnyddio MySQL... Ar gyfer gosodiadau arferol, mae unrhyw ddatrysiad yn gweithio'n dda.

A: - Ar y graffiau olaf o'r gymuned, roedd graff gyda “Housekeeper”:

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Parhaodd i weithio. Beth mae Ceidwad Tŷ yn ei wneud ag AmserlenDB?

AG: - Nawr ni allaf ddweud yn sicr - edrychaf ar y cod a dweud wrthych yn fanylach. Mae'n defnyddio ymholiadau TimescaleDB i beidio â dileu talpiau, ond i'w hagregu rywsut. Nid wyf yn barod i ateb y cwestiwn technegol hwn eto. Cawn wybod mwy ar y stondin heddiw neu yfory.

A: – Mae gennyf gwestiwn tebyg – am berfformiad y gweithrediad dileu yn yr Amserlen.
A (ateb gan y gynulleidfa): - Pan fyddwch chi'n dileu data o dabl, os gwnewch hynny trwy ddileu, yna mae angen i chi fynd drwy'r tabl - dileu, glanhau, marcio popeth ar gyfer gwactod yn y dyfodol. Yn yr Amserlen, gan fod gennych chi dalpiau, gallwch chi ollwng. Yn fras, rydych chi'n dweud wrth y ffeil sydd mewn data mawr: "Dileu!"

Yn syml, mae'r amserlen yn deall nad yw talp o'r fath yn bodoli mwyach. A chan ei fod wedi'i integreiddio i'r cynlluniwr ymholiad, mae'n defnyddio bachau i ddal eich amodau mewn gweithrediadau dethol neu weithrediadau eraill ac mae'n deall ar unwaith nad yw'r darn hwn yn bodoli mwyach - "Ni fyddaf yn mynd yno mwyach!" (data ddim ar gael). Dyna i gyd! Hynny yw, mae sgan tabl yn cael ei ddisodli gan ddileu ffeil deuaidd, felly mae'n gyflym.

A: – Rydym eisoes wedi cyffwrdd â'r pwnc nad yw'n SQL. Cyn belled ag y deallaf, nid oes angen i Zabbix addasu'r data mewn gwirionedd, ac mae hyn i gyd yn rhywbeth fel log. A yw'n bosibl defnyddio cronfeydd data arbenigol na allant newid eu data, ond ar yr un pryd arbed, cronni, a dosbarthu'n llawer cyflymach - Clickhouse, er enghraifft, rhywbeth tebyg i Kafka?... Mae Kafka hefyd yn log! A yw'n bosibl eu hintegreiddio rywsut?

AG: - Gellir dadlwytho. Mae gennym “nodwedd” benodol ers fersiwn 3.4: gallwch chi ysgrifennu pob ffeil hanesyddol, digwyddiad, popeth arall i ffeiliau; ac yna ei anfon i unrhyw gronfa ddata arall gan ddefnyddio rhyw driniwr. Mewn gwirionedd, mae llawer o bobl yn ail-weithio ac yn ysgrifennu'n uniongyrchol i'r gronfa ddata. Ar y hedfan, mae sinwyr hanes yn ysgrifennu hyn i gyd i mewn i ffeiliau, yn cylchdroi'r ffeiliau hyn, ac yn y blaen, a gallwch chi drosglwyddo hyn i Clickhouse. Ni allaf ddweud am gynlluniau, ond efallai y bydd cefnogaeth bellach i atebion NoSQL (fel Clickhouse) yn parhau.

A: - Yn gyffredinol, mae'n ymddangos y gallwch chi gael gwared ar y postgres yn llwyr?

AG: - Wrth gwrs, y rhan anoddaf yn Zabbix yw'r tablau hanesyddol, sy'n creu'r problemau a'r digwyddiadau mwyaf. Yn yr achos hwn, os na fyddwch chi'n storio digwyddiadau am amser hir ac yn storio'r hanes gyda thueddiadau mewn rhai storio cyflym eraill, yna yn gyffredinol, rwy'n meddwl, ni fydd unrhyw broblemau.

A: - A allwch chi amcangyfrif faint yn gyflymach y bydd popeth yn gweithio os byddwch chi'n newid i Clickhouse, er enghraifft?

AG: - Nid wyf wedi ei brofi. Credaf y gellir cyflawni o leiaf yr un niferoedd yn eithaf syml, o ystyried bod gan Clickhouse ei ryngwyneb ei hun, ond ni allaf ddweud yn sicr. Mae'n well profi. Mae'r cyfan yn dibynnu ar y ffurfweddiad: faint o westeion sydd gennych, ac ati. Mae mewnosod yn un peth, ond mae angen i chi hefyd adfer y data hwn - Grafana neu rywbeth arall.

A: - Felly rydym yn sôn am frwydr gyfartal, ac nid am fantais fawr y cronfeydd data cyflym hyn?

AG: - Rwy'n meddwl pan fyddwn yn integreiddio, bydd profion mwy cywir.

A: – Ble aeth hen RRD da? Beth wnaeth i chi newid i gronfeydd data SQL? I ddechrau, casglwyd yr holl fetrigau ar RRD.

AG: - Roedd gan Zabbix RRD, efallai mewn fersiwn hynafol iawn. Bu cronfeydd data SQL erioed - dull clasurol. Y dull clasurol yw MySQL, PostgreSQL (maen nhw wedi bodoli ers amser maith). Ni wnaethom bron erioed ddefnyddio rhyngwyneb cyffredin ar gyfer cronfeydd data SQL a RRD.

HighLoad++, Andrey Gushchin (Zabbix): perfformiad uchel a rhaniad brodorol

Rhai hysbysebion 🙂

Diolch am aros gyda ni. Ydych chi'n hoffi ein herthyglau? Eisiau gweld cynnwys mwy diddorol? Cefnogwch ni trwy osod archeb neu argymell i ffrindiau, cwmwl VPS i ddatblygwyr o $4.99, analog unigryw o weinyddion lefel mynediad, a ddyfeisiwyd gennym ni ar eich cyfer chi: Y gwir i gyd am VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps o $ 19 neu sut i rannu gweinydd? (ar gael gyda RAID1 a RAID10, hyd at 24 craidd a hyd at 40GB DDR4).

Dell R730xd 2 gwaith yn rhatach yng nghanolfan ddata Equinix Haen IV yn Amsterdam? Dim ond yma 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV o $199 yn yr Iseldiroedd! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - o $99! Darllenwch am Sut i adeiladu seilwaith Corp. dosbarth gyda'r defnydd o weinyddion Dell R730xd E5-2650 v4 gwerth 9000 ewro am geiniog?

Ffynhonnell: hab.com

Ychwanegu sylw