{"id":55734,"date":"2020-01-27T00:00:00","date_gmt":"2020-01-26T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie"},"modified":"2020-02-18T14:03:52","modified_gmt":"2020-02-18T11:03:52","slug":"highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie","title":{"rendered":"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Budeme se zab\u00fdvat prac\u00ed Zabbix s datab\u00e1z\u00ed TimescaleDB jako backendem. Uk\u00e1\u017eeme, jak ji spustit od nuly a jak migrovat z PostgreSQL. Tak\u00e9 p\u0159ineseme srovn\u00e1vac\u00ed testy v\u00fdkonu dvou konfigurac\u00ed.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/fb4f7ea4585b6dcdafec9d0d1e3a71e4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHighLoad++ Sibi\u0159 2019. S\u00e1l \u201eTomsk\u201c. 24. \u010dervna, 16:00. T\u00e9my a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/siberia\/2019\/abstracts\/5390\">prezentace<\/a><\/noindex>. Dal\u0161\u00ed konference HighLoad++ se uskute\u010dn\u00ed 6. a 7. dubna 2020 v Petrohrad\u011b. Podrobnosti a vstupenky <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2sSxgBx\">na odkazu<\/a><\/noindex>.<\/p>\n<p><b>Andrej Gu\u0161\u010din (d\u00e1le \u2013 AG):<\/b> \u2013 Jsem in\u017een\u00fdr technick\u00e9 podpory ZABBIX (d\u00e1le \u2013 \u201eZabbix\u201c), \u0161kolitel. Pracuji v\u00edce ne\u017e 6 let v technick\u00e9 podpo\u0159e a p\u0159\u00edmo se zab\u00fdv\u00e1m v\u00fdkonem. Dnes budu hovo\u0159it o v\u00fdkonu, kter\u00fd m\u016f\u017ee poskytnout TimescaleDB v porovn\u00e1n\u00ed s b\u011b\u017en\u00fdm PostgreSQL 10. Tak\u00e9 budu m\u00edt ur\u010ditou \u00favodn\u00ed \u010d\u00e1st \u2013 o tom, jak v\u016fbec syst\u00e9m funguje.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Hlavn\u00ed v\u00fdzvy v\u00fdkonu: od sb\u011bru po \u010di\u0161t\u011bn\u00ed dat<\/h3>\n<p>\nZa\u010dn\u011bme t\u00edm, \u017ee existuj\u00ed ur\u010dit\u00e9 v\u00fdzvy v\u00fdkonu, se kter\u00fdmi se setk\u00e1v\u00e1 ka\u017ed\u00fd monitorovac\u00ed syst\u00e9m. Prvn\u00ed v\u00fdzvou v\u00fdkonu je rychl\u00e9 shroma\u017e\u010fov\u00e1n\u00ed a zpracov\u00e1n\u00ed dat.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/a2cb78b549a55c3b59d7fcdb8b8865b3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDobr\u00fd monitorovac\u00ed syst\u00e9m by m\u011bl rychle a v\u010das z\u00edsk\u00e1vat v\u0161echna data, zpracov\u00e1vat je podle triggerov\u00fdch v\u00fdraz\u016f, tedy je zpracov\u00e1vat podle ur\u010dit\u00fdch krit\u00e9ri\u00ed (v r\u016fzn\u00fdch syst\u00e9mech to funguje r\u016fzn\u011b), a ukl\u00e1dat je do datab\u00e1ze, aby bylo mo\u017en\u00e9 tato data pozd\u011bji pou\u017e\u00edt.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/a3ce55c3aec3eb93948150684838a5b3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDruhou v\u00fdzvou v\u00fdkonu je uchov\u00e1v\u00e1n\u00ed historie. Udr\u017eovat v datab\u00e1zi \u010dasto a m\u00edt rychl\u00fd a pohodln\u00fd p\u0159\u00edstup k t\u011bmto metrik\u00e1m, kter\u00e9 byly shrom\u00e1\u017ed\u011bny za ur\u010dit\u00e9 \u010dasov\u00e9 obdob\u00ed. Nejv\u00edce z\u00e1le\u017e\u00ed na tom, aby se tato data pohodln\u011b z\u00edskala, pou\u017eila v reportech, grafech, aktivech, v n\u011bjak\u00fdch prahov\u00fdch hodnot\u00e1ch, pro upozorn\u011bn\u00ed atd.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/325363d79f0270d620f956eeb8ab3402.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nT\u0159et\u00ed v\u00fdzvou v\u00fdkonu je \u010di\u0161t\u011bn\u00ed historie, co\u017e znamen\u00e1, kdy\u017e nastane den, kdy nen\u00ed pot\u0159eba uchov\u00e1vat podrobn\u00e9 metriky, kter\u00e9 byly shrom\u00e1\u017ed\u011bny za 5 let (nebo dokonce m\u011bs\u00edc nebo dva). N\u011bkter\u00e9 uzly s\u00edt\u011b byly odstran\u011bny, nebo n\u011bkter\u00e9 hosty, metriky ji\u017e nejsou pot\u0159ebn\u00e9, proto\u017ee se staly zastaral\u00fdmi a p\u0159estaly b\u00fdt shroma\u017e\u010fov\u00e1ny. To v\u0161e je t\u0159eba vy\u010distit, aby se va\u0161e datab\u00e1ze nezv\u011bt\u0161ila na velkou velikost. A v\u016fbec, \u010di\u0161t\u011bn\u00ed historie je \u010dasto v\u00e1\u017enou zkou\u0161kou pro \u00falo\u017ei\u0161t\u011b \u2013 obvykle to v\u00fdrazn\u011b ovliv\u0148uje v\u00fdkon.<\/p>\n<h3>Jak vy\u0159e\u0161it probl\u00e9my s vyrovn\u00e1v\u00e1n\u00edm zat\u00ed\u017een\u00ed?<\/h3>\n<p>\nNyn\u00ed se budu konkr\u00e9tn\u011b v\u011bnovat \u201eZabbixu\u201c. V \u201eZabbixu\u201c jsou prvn\u00ed a druh\u00e9 v\u00fdzvy \u0159e\u0161eny pomoc\u00ed cache.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/d5510b31553ee8e63a0c240789d51622.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSb\u00edran\u00ed a zpracov\u00e1n\u00ed dat \u2013 pou\u017e\u00edv\u00e1me opera\u010dn\u00ed pam\u011b\u0165 k uchov\u00e1v\u00e1n\u00ed v\u0161ech t\u011bchto dat. O t\u011bchto datech se nyn\u00ed dozv\u00edte v\u00edce.<\/p>\n<p>Tak\u00e9 na stran\u011b datab\u00e1ze existuje ur\u010dit\u00e9 cache pro hlavn\u00ed dotazy \u2013 pro grafy a dal\u0161\u00ed v\u011bci.<\/p>\n<p>Cache na stran\u011b samotn\u00e9ho Zabbix serveru: m\u00e1me ConfigurationCache, ValueCache, HistoryCache, TrendsCache. Co to znamen\u00e1?<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/241a131145eccd280a7411c43b2cdce4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nConfigurationCache \u2013 to je hlavn\u00ed cache, ve kter\u00e9 uchov\u00e1v\u00e1me metriky, hostitele, datov\u00e9 prvky, spou\u0161t\u011b\u010de; v\u0161e pot\u0159ebn\u00e9 pro zpracov\u00e1n\u00ed p\u0159edzpracov\u00e1n\u00ed, sb\u011bru dat, z jak\u00fdch hostitel\u016f sb\u00edrat a s jakou frekvenc\u00ed. To v\u0161e je uchov\u00e1v\u00e1no v ConfigurationCache, abychom nem\u011bli zbyte\u010dn\u00e9 dotazy do datab\u00e1ze. Po spu\u0161t\u011bn\u00ed serveru tuto cache aktualizujeme (vytv\u00e1\u0159\u00edme) a pravideln\u011b aktualizujeme (podle nastaven\u00ed konfigurace).<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/474ac0db2e46aa945a0da62197f72987.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Cache v Zabbixu. Sb\u011br dat<\/h3>\n<p>\nZde je sch\u00e9ma dost velk\u00e9:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/a6ad9dbd5deebac5440433a47c693fcf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHlavn\u00edmi prvky v sch\u00e9matu jsou tito sb\u011bra\u010di:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/feb932586302e2284bd44595caf9ee1b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo jsou samotn\u00e9 procesy sb\u011bru, r\u016fzn\u00e9 \u201epolery\u201c, kter\u00e9 odpov\u00eddaj\u00ed za r\u016fzn\u00e9 druhy sb\u011br\u016f. Shroma\u017e\u010fuj\u00ed data p\u0159es icmp, ipmi, r\u016fzn\u00e9 protokoly a toto v\u0161e p\u0159ed\u00e1vaj\u00ed na p\u0159edzpracov\u00e1n\u00ed.<\/p>\n<h3>PreProcessing HistoryCache<\/h3>\n<p>\nPokud m\u00e1me vypo\u010d\u00edtan\u00e9 datov\u00e9 prvky (kdo zn\u00e1 \u201eZabbix\u201c, v\u00ed), existuj\u00ed vypo\u010d\u00edtan\u00e9 a agrega\u010dn\u00ed datov\u00e9 prvky \u2013 ty bereme p\u0159\u00edmo z ValueCache. O tom, jak se pln\u00ed, budu hovo\u0159it pozd\u011bji. V\u0161ichni tito sb\u011bra\u010di pou\u017e\u00edvaj\u00ed ConfigurationCache k z\u00edsk\u00e1n\u00ed sv\u00fdch \u00fakol\u016f a d\u00e1le je p\u0159ed\u00e1vaj\u00ed na p\u0159edzpracov\u00e1n\u00ed.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/3948ee1167c52856949c25e2043be974.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u0159edzpracov\u00e1n\u00ed tak\u00e9 pou\u017e\u00edv\u00e1 ConfigurationCache k z\u00edsk\u00e1n\u00ed krok\u016f p\u0159edzpracov\u00e1n\u00ed a zpracov\u00e1v\u00e1 tato data r\u016fzn\u00fdmi zp\u016fsoby. Od verze 4.2 je to u n\u00e1s vyvedeno na proxy. To je velmi pohodln\u00e9, proto\u017ee samotn\u00e9 p\u0159edzpracov\u00e1n\u00ed je docela t\u011b\u017ek\u00e1 operace. A pokud m\u00e1te velmi velk\u00fd \u201eZabbix\u201c s velk\u00fdm po\u010dtem datov\u00fdch prvk\u016f a vysokou frekvenc\u00ed sb\u011bru, v\u00fdrazn\u011b to usnad\u0148uje pr\u00e1ci.<\/p>\n<p>Pot\u00e9, co jsme zpracovali tato data n\u011bjak\u00fdm zp\u016fsobem pomoc\u00ed p\u0159edzpracov\u00e1n\u00ed, uchov\u00e1v\u00e1me je v HistoryCache pro dal\u0161\u00ed zpracov\u00e1n\u00ed. T\u00edmto kon\u010d\u00ed sb\u011br dat. P\u0159ech\u00e1z\u00edme k hlavn\u00edmu procesu.<\/p>\n<h3>Pr\u00e1ce History syncer<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/66539e4184d041ed84f797080226ba24.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHlavn\u00edm procesem v \u201eZabbixu\u201c (proto\u017ee m\u00e1 monolitn\u00ed architekturu) je History syncer. Tento hlavn\u00ed proces se zab\u00fdv\u00e1 atom\u00e1rn\u00edmi operacemi ka\u017ed\u00e9ho datov\u00e9ho prvku, tedy ka\u017edou hodnotou:<\/p>\n<ul>\n<li>p\u0159ich\u00e1z\u00ed hodnota (tu bere z HistoryCache);<\/li>\n<li>kontroluje v Configuration syncer: zda existuj\u00ed n\u011bjak\u00e9 spou\u0161t\u011b\u010de pro v\u00fdpo\u010dty \u2013 ty vypo\u010d\u00edt\u00e1v\u00e1;<br \/>\npokud existuj\u00ed \u2013 vytv\u00e1\u0159\u00ed ud\u00e1losti, vytv\u00e1\u0159\u00ed eskalaci pro p\u0159\u00edpad, \u017ee by bylo t\u0159eba podle konfigurace vygenerovat upozorn\u011bn\u00ed;<\/li>\n<li>ukl\u00e1d\u00e1 spou\u0161t\u011b\u010de pro pozd\u011bj\u0161\u00ed zpracov\u00e1n\u00ed, agregaci; pokud agregujete za posledn\u00ed hodinu apod., tuto hodnotu uchov\u00e1v\u00e1 ValueCache, aby se nemusela dotazovat tabulka historie; t\u00edmto zp\u016fsobem se ValueCache napl\u0148uje pot\u0159ebn\u00fdmi daty, kter\u00e9 jsou nezbytn\u00e9 pro v\u00fdpo\u010dty spou\u0161t\u011b\u010d\u016f, vypo\u010d\u00edt\u00e1van\u00fdch prvk\u016f atd.;<\/li>\n<li>pot\u00e9 History syncer zapisuje v\u0161echny \u00fadaje do datab\u00e1ze;<\/li>\n<li>datab\u00e1ze je zapisuje na disk \u2013 t\u00edm proces zpracov\u00e1n\u00ed kon\u010d\u00ed.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Datab\u00e1ze. Cacheov\u00e1n\u00ed<\/h3>\n<p>\nNa stran\u011b DB, kdy\u017e chcete vid\u011bt grafy nebo n\u011bjak\u00e9 zpr\u00e1vy o ud\u00e1lostech, existuj\u00ed r\u016fzn\u00e9 cache. V r\u00e1mci t\u00e9to prezentace o nich v\u0161ak nebudu hovo\u0159it.<\/p>\n<p>Pro MySQL existuje Innodb_buffer_pool, a tak\u00e9 spousta r\u016fzn\u00fdch cache, kter\u00e9 lze tak\u00e9 nastavit.<br \/>\nAle tohle jsou hlavn\u00ed:<\/p>\n<ul>\n<li>shared_buffers;<\/li>\n<li>effective_cache_size;<\/li>\n<li>shared_pool.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/925e7abb21cfaa2516ff2b33ab161dc0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPro v\u0161echny datab\u00e1ze jsem uvedl, \u017ee existuj\u00ed ur\u010dit\u00e9 cache, kter\u00e9 umo\u017e\u0148uj\u00ed uchov\u00e1vat v opera\u010dn\u00ed pam\u011bti ta data, kter\u00e1 jsou \u010dasto pot\u0159ebn\u00e1 pro dotazy. Tam maj\u00ed sv\u00e9 technologie pro toto.<\/p>\n<h3>O v\u00fdkonnosti datab\u00e1ze<\/h3>\n<p>\nExistuje konkuren\u010dn\u00ed prost\u0159ed\u00ed, tedy server \u201eZabbix\u201c shroma\u017e\u010fuje data a zapisuje je. P\u0159i restartu tak\u00e9 \u010dte z historie pro napln\u011bn\u00ed ValueCache atd. Tak\u00e9 zde m\u016f\u017eete m\u00edt skripty a zpr\u00e1vy, kter\u00e9 pou\u017e\u00edvaj\u00ed \u201eZabbix\u201c-API, co\u017e je vybudov\u00e1no na z\u00e1klad\u011b webov\u00e9ho rozhran\u00ed. \u201eZabbix\u201c-API vstupuje do DB a z\u00edsk\u00e1v\u00e1 pot\u0159ebn\u00e1 data pro generov\u00e1n\u00ed graf\u016f, zpr\u00e1v nebo n\u011bjak\u00e9ho seznamu ud\u00e1lost\u00ed, posledn\u00edch probl\u00e9m\u016f.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/10a55cb1af660aace3172a572bea6692.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTak\u00e9 velmi popul\u00e1rn\u00edm \u0159e\u0161en\u00edm pro vizualizaci je Grafana, kterou na\u0161i u\u017eivatel\u00e9 pou\u017e\u00edvaj\u00ed. Um\u00ed se p\u0159ipojit p\u0159\u00edmo jak p\u0159es \u201eZabbix\u201c-API, tak i p\u0159es DB. Tak\u00e9 vytv\u00e1\u0159\u00ed ur\u010ditou konkurenci pro z\u00edsk\u00e1n\u00ed dat: pot\u0159ebn\u00e9 je jemn\u011bj\u0161\u00ed, dobr\u00e9 nastaven\u00ed DB, aby odpov\u00eddalo rychl\u00e9mu vyd\u00e1v\u00e1n\u00ed v\u00fdsledk\u016f a testov\u00e1n\u00ed.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/8a008e55dbee5635d386cec2fc1c40f5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>\u00dadr\u017eba historie. V Zabbixu je Housekeeper.<\/h3>\n<p>\nT\u0159et\u00ed funkce, kter\u00e1 se pou\u017e\u00edv\u00e1 v Zabbixu, je \u00fadr\u017eba historie pomoc\u00ed Housekeeperu. \"Housekeeper\" dodr\u017euje v\u0161echna nastaven\u00ed, to znamen\u00e1, \u017ee m\u00e1me v datov\u00fdch prvc\u00edch uvedeno, jak dlouho uchov\u00e1vat (ve dnech), jak dlouho uchov\u00e1vat trendy, dynamiku zm\u011bn.<\/p>\n<p>Ne\u0159ekl jsem o TrendCache, kter\u00fd po\u010d\u00edt\u00e1me na m\u00edst\u011b: data p\u0159ich\u00e1zej\u00ed, agregujeme je za jednu hodinu (v\u011bt\u0161inou to jsou \u010d\u00edsla za posledn\u00ed hodinu), pr\u016fm\u011br, minimum a zapisujeme to jednou za hodinu do tabulky dynamiky zm\u011bn (\"Trendy\"). \"Housekeeper\" se spou\u0161t\u00ed a odstra\u0148uje b\u011b\u017en\u00fdmi selecty \u00fadaje z datab\u00e1ze, co\u017e nen\u00ed v\u017edy efektivn\u00ed.<\/p>\n<p>Jak zjistit, \u017ee to nen\u00ed efektivn\u00ed? Na grafech v\u00fdkonu intern\u00edch proces\u016f m\u016f\u017eete vid\u011bt takov\u00fd obr\u00e1zek:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/f413ec989491d4186a05c779978e2f6d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nM\u00e1te History syncer st\u00e1le zam\u011bstnan\u00fd (\u010derven\u00fd graf). A \"oran\u017eov\u00fd\" graf, kter\u00fd jde naho\u0159e. To je \"Housekeeper\", kter\u00fd se spou\u0161t\u00ed a \u010dek\u00e1 od datab\u00e1ze, a\u017e odstran\u00ed v\u0161echny \u0159\u00e1dky, kter\u00e9 na\u0159\u00eddil.<\/p>\n<p>Vezm\u011bme n\u011bjak\u00e9 Item ID: je pot\u0159eba odstranit posledn\u00edch 5 tis\u00edc; samoz\u0159ejm\u011b podle index\u016f. Ale obvykle je datov\u00fd soubor dostate\u010dn\u011b velk\u00fd \u2013 datab\u00e1ze to stejn\u011b \u010dte z disku a zved\u00e1 to do cache, co\u017e je pro datab\u00e1zi velmi n\u00e1kladn\u00e1 operace. V z\u00e1vislosti na jej\u00edch rozm\u011brech to m\u016f\u017ee zp\u016fsobovat ur\u010dit\u00e9 probl\u00e9my s v\u00fdkonem.<\/p>\n<p>Deaktivaci \"Housekeeper\" lze prov\u00e9st jednoduch\u00fdm zp\u016fsobem \u2013 m\u00e1me zde v\u0161em zn\u00e1m\u00e9 webov\u00e9 rozhran\u00ed. Nastaven\u00ed v Administraci obecn\u011b (nastaven\u00ed pro \"Housekeeper\") vyp\u00edn\u00e1me intern\u00ed housekeeping pro intern\u00ed historii a trendy. Odpov\u00eddaj\u00edc\u00edm zp\u016fsobem \"Housekeeper\" ji\u017e t\u00edmto ne\u0159\u00edd\u00ed:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/c9dc3ca86e7fd0c1229f6b9bc5d31270.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCo se d\u00e1 d\u011blat d\u00e1l? Vypnuli jste to, va\u0161e grafy se srovnaly\u2026 Jak\u00e9 mohou b\u00fdt v tomto p\u0159\u00edpad\u011b dal\u0161\u00ed probl\u00e9my? Co m\u016f\u017ee pomoci?<\/p>\n<h3>Partitioning (sekcionov\u00e1n\u00ed)<\/h3>\n<p>\nObvykle se to nastavuje na ka\u017ed\u00e9 rela\u010dn\u00ed datab\u00e1zi, kterou jsem vyjmenoval, r\u016fzn\u00fdmi zp\u016fsoby. Na MySQL existuje sv\u00e9 vlastn\u00ed technologie. Ale obecn\u011b jsou si velmi podobn\u00e9, pokud hovo\u0159\u00edme o PostgreSQL 10 a MySQL. Samoz\u0159ejm\u011b, existuje tam spousta vnit\u0159n\u00edch rozd\u00edl\u016f v tom, jak je to cel\u00e9 realizov\u00e1no a jak to v\u0161e ovliv\u0148uje v\u00fdkon. Ale obecn\u011b vytv\u00e1\u0159en\u00ed nov\u00e9 partition \u010dasto tak\u00e9 vede k ur\u010dit\u00fdm probl\u00e9m\u016fm.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/729114d61794314e19383f09ee9b5d61.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV z\u00e1vislosti na va\u0161\u00ed konfiguraci (jak mnoho dat se vytvo\u0159\u00ed za jeden den) se obvykle nastavuje nejmen\u0161\u00ed mo\u017en\u00e9 \u2013 1 den\/partice, a pro \u201etrendy\u201c, dynamiku zm\u011bn \u2013 1 m\u011bs\u00edc\/nov\u00e1 partice. To se m\u016f\u017ee m\u011bnit, pokud m\u00e1te opravdu velkou konfiguraci.<\/p>\n<p>Hned na za\u010d\u00e1tku v\u00e1s upozorn\u00edm na velikosti konfigurace: do 5 tis\u00edc nov\u00fdch hodnot za sekundu (nvps) \u2013 to bude pova\u017eov\u00e1no za malou \u201ekonfiguraci\u201c. St\u0159edn\u00ed \u2013 od 5 do 25 tis\u00edc hodnot za sekundu. V\u0161echno, co je nad t\u00edm, jsou ji\u017e velk\u00e9 a velmi velk\u00e9 instalace, kter\u00e9 vy\u017eaduj\u00ed velmi pe\u010dliv\u00e9 nastaven\u00ed datab\u00e1ze.<\/p>\n<p>U velmi velk\u00fdch instalac\u00ed 1 den \u2013 to m\u016f\u017ee b\u00fdt neoptim\u00e1ln\u00ed. Osobn\u011b jsem vid\u011bl na MySQL particie o velikosti 40 gigabajt\u016f za den (a mohou b\u00fdt i v\u011bt\u0161\u00ed). To je velmi velk\u00fd objem dat, kter\u00fd m\u016f\u017ee zp\u016fsobovat n\u011bjak\u00e9 probl\u00e9my. Je nutn\u00e9 ho zmen\u0161ovat.<\/p>\n<h3>Pro\u010d je pot\u0159eba parti\u0161ionov\u00e1n\u00ed?<\/h3>\n<p>\nCo p\u0159in\u00e1\u0161\u00ed partitioning, mysl\u00edm, \u017ee v\u0161ichni v\u00edme \u2013 to je sekcionov\u00e1n\u00ed tabulek. \u010casto to jsou jednotliv\u00e9 soubory na disku a span-dotazy. Lep\u0161\u00ed optim\u00e1ln\u011b vyb\u00edr\u00e1 jednu partici, pokud to spad\u00e1 do b\u011b\u017en\u00e9ho parti\u0161ionov\u00e1n\u00ed.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/4920fb3415733799f0a90b1bc7af0114.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPro \u201eZabbix\u201c, zejm\u00e9na, se pou\u017e\u00edv\u00e1 podle rozsahu, tedy pou\u017e\u00edv\u00e1me timestamp (oby\u010dejn\u00e9 \u010d\u00edslo, \u010das od za\u010d\u00e1tku epochy). Zad\u00e1te za\u010d\u00e1tek dne\/konec dne, a to je partice. T\u00edm p\u00e1dem, pokud se pt\u00e1te na data dvou dn\u016f star\u00e1, to v\u0161e se vyb\u00edr\u00e1 z datab\u00e1ze rychleji, proto\u017ee pot\u0159ebujete pouze jeden soubor na\u010d\u00edst do cache a vydat (a ne velkou tabulku).<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/f5ee4e0b471eb5ebe701615aa617d66d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMnoho datab\u00e1z\u00ed tak\u00e9 zrychluje insert (vkl\u00e1d\u00e1n\u00ed do jedn\u00e9 child-tabule). Zat\u00edm mluv\u00edm abstraktn\u011b, ale to je tak\u00e9 mo\u017en\u00e9. Partitoning \u010dasto pom\u00e1h\u00e1.<\/p>\n<h3>Elasticsearch pro NoSQL<\/h3>\n<p>\nNed\u00e1vno, ve verzi 3.4, jsme implementovali \u0159e\u0161en\u00ed pro NoSQL. P\u0159idali jsme mo\u017enost zapisovat do Elasticsearch. M\u016f\u017eete zapisovat jednotliv\u00e9 typy: vyb\u00edr\u00e1te \u2013 bu\u010f zapisujete \u010d\u00edsla, nebo n\u011bjak\u00e9 znaky; m\u00e1me string-text, logy m\u016f\u017eete ps\u00e1t do Elasticsearch\u2026 T\u00edm p\u00e1dem, webov\u00e9 rozhran\u00ed u\u017e tak\u00e9 bude p\u0159istupovat k Elasticsearch. To skv\u011ble funguje v ur\u010dit\u00fdch p\u0159\u00edpadech, ale v tuto chv\u00edli to lze vyu\u017e\u00edvat.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/24fe7d19c9e42474cd786ba59846c18c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>TimescaleDB. Hypertabulky<\/h3>\n<p>\nPro verzi 4.4.2 jsme si v\u0161imli jedn\u00e9 v\u011bci \u2013 TimescaleDB. Co to vlastn\u011b je? Je to roz\u0161\u00ed\u0159en\u00ed pro PostgreSQL, co\u017e znamen\u00e1, \u017ee m\u00e1 nativn\u00ed rozhran\u00ed PostgreSQL. Nav\u00edc toto roz\u0161\u00ed\u0159en\u00ed umo\u017e\u0148uje mnohem efektivn\u011bji pracovat s \u010dasov\u00fdmi \u0159adami a m\u00e1 automatick\u00e9 d\u011blen\u00ed. Jak to vypad\u00e1:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/de921f06453476215b6240ab9da6fae1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nToto je hypertable \u2013 koncept v Timescale. Je to hypertabulka, kterou vytv\u00e1\u0159\u00edte, a v n\u00ed se nach\u00e1zej\u00ed chunks (chunk). Chunks jsou partition, co\u017e jsou child tabulky, pokud se nepletu. Opravdu je to efektivn\u00ed.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/719eb3f5d8c9f57544dfc4010850610c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>TimescaleDB a PostgreSQL<\/h3>\n<p>\nJak v\u00fdrobci TimescaleDB uji\u0161\u0165uj\u00ed, pou\u017e\u00edvaj\u00ed spr\u00e1vn\u011bj\u0161\u00ed algoritmus zpracov\u00e1n\u00ed dotaz\u016f, konkr\u00e9tn\u011b insert\u016f, kter\u00fd umo\u017e\u0148uje p\u0159ibli\u017en\u011b konstantn\u00ed v\u00fdkon p\u0159i rostouc\u00ed velikosti vkl\u00e1dan\u00e9ho datasetu. Jin\u00fdmi slovy, po 200 milionech \u0159\u00e1dk\u016f b\u011b\u017en\u00fd PostgreSQL za\u010dne velmi siln\u011b klesat a ztr\u00e1c\u00ed v\u00fdkon doslova na nulu, zat\u00edmco Timescale umo\u017e\u0148uje vkl\u00e1d\u00e1n\u00ed insert\u016f co nejefektivn\u011bji p\u0159i jak\u00e9mkoliv mno\u017estv\u00ed dat.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/a613d505a9dfe6008551ce981da7b24e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Jak nainstalovat TimescaleDB? Je to jednoduch\u00e9!<\/h3>\n<p>\nV dokumentaci to m\u00e1te popsan\u00e9 \u2013 m\u016f\u017eete to nainstalovat z bal\u00ed\u010dk\u016f pro jak\u00e9koliv\u2026 Z\u00e1vis\u00ed to na ofici\u00e1ln\u00edch bal\u00edc\u00edch PostgreSQL. M\u016f\u017eete to tak\u00e9 zkompilovat ru\u010dn\u011b. Tak se stalo, \u017ee jsem musel kompilovat pro DB.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/6767927fa92260103d318f9aa70ef5b3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa Zabbixu jednodu\u0161e aktivujeme roz\u0161\u00ed\u0159en\u00ed. Mysl\u00edm, \u017ee ti, kdo pou\u017e\u00edvali v PostgreSQL roz\u0161\u00ed\u0159en\u00ed\u2026 Prost\u011b aktivujete roz\u0161\u00ed\u0159en\u00ed, vytvo\u0159\u00edte ho pro DB Zabbix, kterou pou\u017e\u00edv\u00e1te.<\/p>\n<p>A posledn\u00ed krok\u2026<\/p>\n<h3>TimescaleDB. Migrace historick\u00fdch tabulek<\/h3>\n<p>\nMus\u00edte vytvo\u0159it hypertable. K tomu je speci\u00e1ln\u00ed funkce \u2013 Create hypertable. V n\u00ed jako prvn\u00ed parametr uvedete tabulku, kter\u00e1 je v t\u00e9to DB pot\u0159ebn\u00e1 (pro kterou pot\u0159ebujete vytvo\u0159it hypertable).<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/47350f79fd9829c12685c1df8f0ff9a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPole, podle kter\u00e9ho bude vytv\u00e1\u0159eno, a chunk_time_interval (to je interval chunks (partitions, kter\u00e9 maj\u00ed b\u00fdt pou\u017eity). 86 400 \u2013 to je jeden den. <\/p>\n<p>Parametr migrate_data: pokud zad\u00e1te true, p\u0159evede v\u0161echny aktu\u00e1ln\u00ed data do p\u0159edem vytvo\u0159en\u00fdch chuck.<\/p>\n<p>S\u00e1m jsem pou\u017eil migrate_data \u2013 trvalo to slu\u0161nou dobu, v z\u00e1vislosti na velikosti va\u0161\u00ed DB. M\u011bl jsem v\u00edce ne\u017e terabajt \u2013 vytvo\u0159en\u00ed trvalo v\u00edce ne\u017e hodinu. V n\u011bkter\u00fdch p\u0159\u00edpadech p\u0159i testov\u00e1n\u00ed jsem odstra\u0148oval historick\u00e1 data pro text (history_text) a string (history_str), abych je nep\u0159en\u00e1\u0161el \u2013 pro m\u011b ve skute\u010dnosti nebyly zaj\u00edmav\u00e9.<\/p>\n<p>A posledn\u00ed aktualizaci prov\u00e1d\u00edme v na\u0161em db_extention: instalujeme timescaledb, aby datab\u00e1ze a konkr\u00e9tn\u011b n\u00e1\u0161 \u201eZabbix\u201c rozum\u011bl, \u017ee existuje db_extention. Ten jej aktivuje a spr\u00e1vn\u011b pou\u017e\u00edv\u00e1 syntaxi a dotazy na datab\u00e1zi, vyu\u017e\u00edvaj\u00edc ji\u017e ty \u201efunkce\u201c, kter\u00e9 jsou pot\u0159ebn\u00e9 pro TimescaleDB.<\/p>\n<h3>Konfigurace serveru<\/h3>\n<p>\nPou\u017eil jsem dva servery. Prvn\u00ed server \u2013 je virtu\u00e1ln\u00ed stroj, kter\u00fd je dost mal\u00fd, 20 procesor\u016f, 16 gigabajt\u016f opera\u010dn\u00ed pam\u011bti. Nastavil jsem na n\u011bm \u201ePostgres\u201c 10.8:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/990805374a2380a5c645c578404489bd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOpera\u010dn\u00ed syst\u00e9m byl Debian, souborov\u00fd syst\u00e9m \u2013 xfs. Ud\u011blal jsem minim\u00e1ln\u00ed nastaven\u00ed, abych pou\u017e\u00edval tuto datab\u00e1zi, krom\u011b toho, \u017ee bude vyu\u017e\u00edvat i samotn\u00fd \u201eZabbix\u201c. Na tomto stroji b\u011b\u017eel server \u201eZabbix\u201c, PostgreSQL a zat\u011b\u017eovac\u00ed agenty.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/a6efa9ab9cd58f0061d04f13fe31018c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPou\u017eil jsem 50 aktivn\u00edch agent\u016f, kte\u0159\u00ed pou\u017e\u00edvaj\u00ed LoadableModule, aby rychle generovali r\u016fzn\u00e9 v\u00fdsledky. Ti generovali \u0159\u00e1dky, \u010d\u00edsla a tak d\u00e1le. Naplnil jsem datab\u00e1zi velk\u00fdm mno\u017estv\u00edm dat. P\u016fvodn\u00ed konfigurace obsahovala 5 tis\u00edc datov\u00fdch prvk\u016f na ka\u017ed\u00fd host, a p\u0159ibli\u017en\u011b ka\u017ed\u00fd datov\u00fd prvek obsahoval spou\u0161t\u011b\u010d \u2013 aby \u0161lo o skute\u010dn\u00e9 nastaven\u00ed. N\u011bkdy je dokonce zapot\u0159eb\u00ed v\u00edce ne\u017e jednoho spou\u0161t\u011b\u010de.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/d5a3c306402e08bf2532eb6203a4aab4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInterval aktualizace, samotn\u00e9 zat\u00ed\u017een\u00ed jsem reguloval t\u00edm, \u017ee jsem nepou\u017e\u00edval pouze 50 agent\u016f (p\u0159id\u00e1val jsem dal\u0161\u00ed), ale tak\u00e9 pomoc\u00ed dynamick\u00fdch datov\u00fdch prvk\u016f a sni\u017eoval jsem interval aktualizace na 4 sekundy.<\/p>\n<h3>Test v\u00fdkonu. PostgreSQL: 36 tis\u00edc NVPs<\/h3>\n<p>\nPrvn\u00ed spu\u0161t\u011bn\u00ed, prvn\u00ed nastaven\u00ed jsem m\u011bl na \u010dist\u00e9m PostgreSQL 10 na tomto hardwaru (35 tis\u00edc hodnot za sekundu). Celkov\u011b, jak je vid\u011bt na obrazovce, vlo\u017een\u00ed dat trv\u00e1 zlomky sekundy \u2013 v\u0161e je v po\u0159\u00e1dku a rychl\u00e9, SSD disky (200 gigabajt\u016f). Jedin\u00e9, co 20 GB se docela rychle zapln\u00ed.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/6803a64fedd26093b9117a036d2993ae.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBude d\u00e1le dostatek takov\u00fdch graf\u016f. To je standardn\u00ed dashboard v\u00fdkonu serveru \u201eZabbix\u201c.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/081cc11c6bf42db3f8f16b6cc4e6ee0c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPrvn\u00ed graf \u2013 po\u010det hodnot za sekundu (modr\u00fd, naho\u0159e vlevo), 35 tis\u00edc hodnot v tomto p\u0159\u00edpad\u011b. To (naho\u0159e uprost\u0159ed) je zat\u00ed\u017een\u00ed proces\u016f sb\u011bru, a to (naho\u0159e vpravo) je zat\u00ed\u017een\u00ed pr\u00e1v\u011b vnit\u0159n\u00edch proces\u016f: history syncers a housekeeper, kter\u00fd tady (dole uprost\u0159ed) prob\u00edhal dost dlouho.<\/p>\n<p>Tento graf (n\u00ed\u017ee uprost\u0159ed) ukazuje vyu\u017eit\u00ed ValueCache \u2013 kolik hit\u016f ValueCache je pro spou\u0161t\u011b\u010de (n\u011bkolik tis\u00edc hodnot za sekundu). Dal\u0161\u00ed d\u016fle\u017eit\u00fd graf je \u010dtvrt\u00fd (n\u00ed\u017ee vlevo), kter\u00fd zobrazuje vyu\u017eit\u00ed HistoryCache, o kter\u00e9m jsem mluvil, a kter\u00fd slou\u017e\u00ed jako vyrovn\u00e1vac\u00ed pam\u011b\u0165 p\u0159ed vlo\u017een\u00edm do datab\u00e1ze.<\/p>\n<h3>Test v\u00fdkonu. PostgreSQL: 50 tis\u00edc NVPs<\/h3>\n<p>\nD\u00e1le jsem zv\u00fd\u0161il z\u00e1t\u011b\u017e na 50 tis\u00edc hodnot za sekundu na t\u00e9\u017ee sestav\u011b. P\u0159i zat\u00ed\u017een\u00ed \u201eHousekeeperem\u201c 10 tis\u00edc hodnot ji\u017e bylo zapisov\u00e1no za 2-3 sekundy s v\u00fdpo\u010dtem. Co\u017e je v podstat\u011b uk\u00e1z\u00e1no na n\u00e1sleduj\u00edc\u00edm sn\u00edmku obrazovky:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/80824da986dbee2f8d5ebe0ead4fbcfd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u201eHousekeeper\u201c u\u017e za\u010d\u00edn\u00e1 zasahovat do pr\u00e1ce, ale celkov\u011b zat\u00ed\u017een\u00ed history-synkroniz\u00e1tor\u016f je zat\u00edm st\u00e1le na \u00farovni 60 % (t\u0159et\u00ed graf, naho\u0159e vpravo). HistoryCache se ji\u017e b\u011bhem pr\u00e1ce \u201eHousekeepera\u201c za\u010d\u00edn\u00e1 aktivn\u011b plnit (n\u00ed\u017ee vlevo). M\u011bl p\u0159ibli\u017en\u011b p\u016fl gigabajtu, plnil se na 20 %.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/9e1bcd4f3b9f3e8a1c9a36b2083ec61b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Test v\u00fdkonu. PostgreSQL: 80 tis\u00edc NVPs<\/h3>\n<p>\nD\u00e1le jsem zv\u00fd\u0161il na 80 tis\u00edc hodnot za sekundu:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/13ae1589d6b9d35b4dda9c6c7d989cc2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBylo to p\u0159ibli\u017en\u011b 400 tis\u00edc datov\u00fdch prvk\u016f, 280 tis\u00edc spou\u0161t\u011b\u010d\u016f. Vlo\u017een\u00ed, jak vid\u00edte, podle zat\u00ed\u017een\u00ed history-synkroniz\u00e1tor\u016f (bylo jich 30) bylo ji\u017e dost vysok\u00e9. Pot\u00e9 jsem zvy\u0161oval r\u016fzn\u00e9 parametry: history-synkroniz\u00e1tory, cache\u2026 Na t\u00e9to sestav\u011b zat\u00ed\u017een\u00ed history-synkroniz\u00e1tor\u016f za\u010dalo stoupat k maximu, prakticky \u201ena polici\u201c \u2013 odpov\u00eddaj\u00edc\u00edm zp\u016fsobem, HistoryCache za\u010dalo vykazovat velmi vysok\u00e9 zat\u00ed\u017een\u00ed:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/0ec528256c8fa7b16e1c7c95c8119535.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCelou dobu jsem sledoval v\u0161echny parametry syst\u00e9mu (jak je vyu\u017e\u00edv\u00e1n procesor, opera\u010dn\u00ed pam\u011b\u0165) a zjistil jsem, \u017ee vyt\u00ed\u017een\u00ed disk\u016f bylo maxim\u00e1ln\u00ed \u2013 dos\u00e1hl jsem maxim\u00e1ln\u00ed kapacity tohoto disku na t\u00e9to sestav\u011b, na t\u00e9to virtu\u00e1ln\u00ed ma\u0161in\u011b. \u201ePostgres\u201c za\u010dal p\u0159i takov\u00e9 intenzit\u011b dost aktivn\u011b vyhazovat data, a disk ji\u017e nesta\u010dil zapisovat a \u010d\u00edst\u2026<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/0809dbd7638e7ee003ea24c611984a0c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVzala jsem jin\u00fd server, kter\u00fd m\u011bl ji\u017e 48 procesor\u016f a 128 gigabyt\u016f opera\u010dn\u00ed pam\u011bti:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/53410b502a4574aac5d40f1a2a6d3f42.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTak\u00e9 jsem ho \u201evylep\u0161il\u201c \u2013 nainstaloval jsem History syncer (60 kus\u016f) a dos\u00e1hl jsem p\u0159ijateln\u00fdch v\u00fdkonnostn\u00edch parametr\u016f. V podstat\u011b nejsme \u201ena polici\u201c, ale u\u017e je to pravd\u011bpodobn\u011b limit v\u00fdkonu, kde u\u017e je pot\u0159eba n\u011bco podniknout.<\/p>\n<h3>Test v\u00fdkonu. TimescaleDB: 80 tis\u00edc NVPs<\/h3>\n<p>\nM\u011bl jsem hlavn\u00ed \u00fakol \u2013 pou\u017e\u00edt TimescaleDB. Na ka\u017ed\u00e9m grafu je vid\u011bt propad:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/b0064068895a34b93b5aa6771aba05cb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTyto propady jsou pr\u00e1v\u011b migrac\u00ed dat. Po tomto se v serveru Zabbix, jak vid\u00edte, profil na\u010d\u00edt\u00e1n\u00ed history-sinkers v\u00fdrazn\u011b zm\u011bnil. Prakticky t\u0159ikr\u00e1t rychleji umo\u017e\u0148uje vkl\u00e1dat data a vyu\u017e\u00edv\u00e1 m\u00e9n\u011b HistoryCache \u2013 odpov\u00eddaj\u00edc\u00ed tomu, \u017ee data budou dod\u00e1v\u00e1na v\u010das. Op\u011bt, 80 tis\u00edc hodnot za sekundu \u2013 to je pom\u011brn\u011b vysok\u00e1 rychlost (samoz\u0159ejm\u011b ne pro Yandex). Celkov\u011b jde o pom\u011brn\u011b velk\u00e9 nastaven\u00ed s jedn\u00edm serverem.<\/p>\n<h3>Test v\u00fdkonu PostgreSQL: 120 tis\u00edc NVPs<\/h3>\n<p>\nD\u00e1le jsem zv\u00fd\u0161il hodnotu po\u010dtu datov\u00fdch prvk\u016f na p\u016fl milionu a z\u00edskal odhadovanou hodnotu 125 tis\u00edc za sekundu:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/7d0cf2ef7c6691c1bbf4b90afd34e4bb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA dostal jsem takov\u00e9 grafy:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/9c09333a50e016921a8a5b70e00397a1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV podstat\u011b to je funk\u010dn\u00ed nastaven\u00ed, m\u016f\u017ee fungovat pom\u011brn\u011b dlouhou dobu. Ale proto\u017ee jsem m\u011bl disk pouze na 1,5 terabyte, vyu\u017eil jsem ho za p\u00e1r dn\u00ed. Nejd\u016fle\u017eit\u011bj\u0161\u00ed je, \u017ee sou\u010dasn\u011b byly vytv\u00e1\u0159eny nov\u00e9 partition na TimescaleDB, co\u017e pro v\u00fdkon prob\u00edhalo zcela nen\u00e1padn\u011b, co\u017e se ned\u00e1 \u0159\u00edci o MySQL.<\/p>\n<p>Obvykle se partition vytv\u00e1\u0159ej\u00ed v noci, proto\u017ee to zablokov\u00e1v\u00e1 vkl\u00e1d\u00e1n\u00ed a pr\u00e1ci s tabulkami, co\u017e m\u016f\u017ee v\u00e9st k degradaci slu\u017eby. V tomto p\u0159\u00edpad\u011b tomu tak nen\u00ed! Hlavn\u00edm \u00fakolem bylo ov\u011b\u0159it mo\u017enosti TimescaleDB. V\u00fdsledn\u00e1 cifra: 120 tis\u00edc hodnot za sekundu.<\/p>\n<p>Tak\u00e9 existuj\u00ed v komunit\u011b p\u0159\u00edklady:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/66aa6b1d4c559d12082e4d91b6a1ca10.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u010clov\u011bk tak\u00e9 zapnul TimescaleDB a zat\u00ed\u017een\u00ed p\u0159i pou\u017e\u00edv\u00e1n\u00ed io.weight kleslo na procesoru; a pou\u017eit\u00ed prvk\u016f intern\u00edch proces\u016f se tak\u00e9 sn\u00ed\u017eilo d\u00edky aktivaci TimescaleDB. P\u0159i\u010dem\u017e to jsou b\u011b\u017en\u00e9 rota\u010dn\u00ed disky, tedy b\u011b\u017en\u00e1 virtu\u00e1lka na b\u011b\u017en\u00fdch disc\u00edch (ne SSD)!<\/p>\n<p>Pro n\u011bjak\u00e9 men\u0161\u00ed nastaven\u00ed, kter\u00e9 nar\u00e1\u017e\u00ed na v\u00fdkon disku, se mi zd\u00e1, \u017ee TimescaleDB je velmi dobr\u00e9 \u0159e\u0161en\u00ed. Dob\u0159e umo\u017en\u00ed pokra\u010dovat v pr\u00e1ci, ne\u017e p\u0159ej\u00edt na rychlej\u0161\u00ed hardware pro datab\u00e1zi.<\/p>\n<p>Zveme v\u00e1s na na\u0161e akce: Konference \u2013 v Moskv\u011b, Summit \u2013 v Rize. Vyu\u017e\u00edvejte na\u0161e kan\u00e1ly \u2013 Telegram, f\u00f3rum, IRC. Pokud m\u00e1te n\u011bjak\u00e9 ot\u00e1zky \u2013 p\u0159ij\u010fte k n\u00e1m na st\u00e1nek, m\u016f\u017eeme si o v\u0161em promluvit.<\/p>\n<h3>Dotazy publika<\/h3>\n<p>\nOt\u00e1zka z publika (d\u00e1le \u2013 O): \u2013 Pokud je TimescaleDB tak snadn\u00fd na nastaven\u00ed a poskytuje takov\u00fd n\u00e1r\u016fst v\u00fdkonu, mo\u017en\u00e1 bych to m\u011bl pou\u017e\u00edt jako nejlep\u0161\u00ed praxi pro nastaven\u00ed Zabbixu s Postgresem? Existuj\u00ed n\u011bjak\u00e9 skryt\u00e9 probl\u00e9my a nev\u00fdhody tohoto \u0159e\u0161en\u00ed, nebo kdy\u017e jsem se rozhodl pracovat se Zabbixem, mohu bez obav vz\u00edt PostgreSQL, ihned nastavit Timescale a pou\u017e\u00edvat ho bez obav o n\u011bjak\u00e9 probl\u00e9my?<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/314845a019724806283a957b15d857cc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>AG:<\/b> \u2013 Ano, \u0159ekl bych, \u017ee to je dobr\u00e9 doporu\u010den\u00ed: pou\u017e\u00edt PostgreSQL p\u0159\u00edmo s roz\u0161\u00ed\u0159en\u00edm TimescaleDB. Jak u\u017e jsem zm\u00ednil, m\u00e1me mnoho pozitivn\u00edch ohlas\u016f, i kdy\u017e tato funkce je experiment\u00e1ln\u00ed. Ale ve skute\u010dnosti testy ukazuj\u00ed, \u017ee to je skv\u011bl\u00e9 \u0159e\u0161en\u00ed (s TimescaleDB) a mysl\u00edm, \u017ee se bude nad\u00e1le rozv\u00edjet! Sledujeme, jak se toto roz\u0161\u00ed\u0159en\u00ed vyv\u00edj\u00ed, a budeme upravovat to, co je pot\u0159eba.<\/p>\n<p>I b\u011bhem v\u00fdvoje jsme se op\u00edrali o jednu jejich zn\u00e1mou funkci: tam bylo mo\u017en\u00e9 pracovat s chunkingem trochu jinak. Ale pak to v n\u00e1sleduj\u00edc\u00ed verzi odstranili, a museli jsme u\u017e neodkazovat na tento k\u00f3d. Doporu\u010dil bych pou\u017e\u00edt toto \u0159e\u0161en\u00ed na mnoha nastaven\u00edch. Pokud pou\u017e\u00edv\u00e1te MySQL\u2026 pro st\u0159edn\u00ed nastaven\u00ed jak\u00e9koli \u0159e\u0161en\u00ed funguje dob\u0159e.<\/p>\n<p><b>A:<\/b> \u2013 Na posledn\u00edch grafech, kter\u00e9 byly od komunity, byl graf s Housekeeperem:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/d01549b6b9b97d8bdf5372efe05d9039.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPokra\u010doval v pr\u00e1ci. Co Housekeeper d\u011bl\u00e1 v p\u0159\u00edpad\u011b TimescaleDB?<\/p>\n<p><b>AG:<\/b> \u2013 Te\u010f to nemohu p\u0159esn\u011b \u0159\u00edct \u2013 pod\u00edv\u00e1m se na k\u00f3d a poskytnu v\u00edce podrobnost\u00ed. Pou\u017e\u00edv\u00e1 dotazy pr\u00e1v\u011b TimescaleDB, ne pro odstran\u011bn\u00ed chunk\u016f, ale agreguje. Zat\u00edm nejsem p\u0159ipraven odpov\u011bd\u011bt na tuto technickou ot\u00e1zku. Na st\u00e1nku to dnes nebo z\u00edtra up\u0159esn\u00edme.<\/p>\n<p><b>A:<\/b> \u2013 M\u00e1m podobnou ot\u00e1zku \u2013 o v\u00fdkonu operace odstran\u011bn\u00ed v Timescale.<br \/>\nO (odpov\u011b\u010f z publika): \u2013 Kdy\u017e odstra\u0148ujete data z tabulky, pokud to d\u011bl\u00e1te prost\u0159ednictv\u00edm p\u0159\u00edkazu delete, mus\u00edte proj\u00edt tabulkou \u2013 odstranit, vy\u010distit, ozna\u010dit v\u0161e pro budouc\u00ed vakuum. V Timescale, proto\u017ee m\u00e1te chunkov\u00e1n\u00ed, m\u016f\u017eete dropovat. Jednodu\u0161e \u0159e\u010deno, jen \u0159\u00edk\u00e1te souboru, kter\u00fd le\u017e\u00ed v big data: \u201eOdstranit!\u201c<\/p>\n<p>TimeScale prost\u011b ch\u00e1pe, \u017ee takov\u00fd chunk u\u017e neexistuje. A proto\u017ee se integruje do pl\u00e1nova\u010de dotazu, zachyt\u00e1v\u00e1 va\u0161e podm\u00ednky ve selectu nebo v jin\u00fdch operac\u00edch a okam\u017eit\u011b v\u00ed, \u017ee tohoto chunku u\u017e nen\u00ed \u2013 \"Tam u\u017e nep\u016fjdu!\" (data chyb\u00ed). A to je v\u0161e! To znamen\u00e1, \u017ee skenov\u00e1n\u00ed tabulky je nahrazeno odstran\u011bn\u00edm bin\u00e1rn\u00edho souboru, tak\u017ee je to rychl\u00e9.<\/p>\n<p><b>A:<\/b> \u2013 U\u017e jsme se dotkli t\u00e9matu non-SQL. Jak rozum\u00edm, Zabbix p\u0159\u00edli\u0161 nepot\u0159ebuje modifikovat data, v\u0161echno to je sp\u00ed\u0161e jako log. Lze pou\u017e\u00edt specializovan\u00e9 datab\u00e1ze, kter\u00e9 nemohou m\u011bnit sv\u00e1 data, ale p\u0159itom mnohem rychleji ukl\u00e1daj\u00ed, shroma\u017e\u010fuj\u00ed a poskytuj\u00ed \u2013 nap\u0159\u00edklad Clickhouse, n\u011bco kafkovsk\u00e9ho?.. Kafka je tak\u00e9 log! M\u016f\u017ee se to n\u011bjak integrovat?<\/p>\n<p><b>AG:<\/b> \u2013 Export lze prov\u00e9st. M\u00e1me ur\u010ditou \"funkci\" od verze 3.4: m\u016f\u017eete zapisovat do soubor\u016f v\u0161echny historick\u00e9 soubory, ud\u00e1losti a dal\u0161\u00ed; a pak je n\u011bjak\u00fdm zpracovatelem odeslat do jak\u00e9koli jin\u00e9 datab\u00e1ze. Opravdu hodn\u011b lid\u00ed to p\u0159epracov\u00e1v\u00e1 a p\u00ed\u0161e p\u0159\u00edmo do datab\u00e1ze. Historick\u00e9 synchroniz\u00e9ry to v\u0161echno zapisuj\u00ed do soubor\u016f za b\u011bhu, rotuj\u00ed tyto soubory a tak d\u00e1le, a to m\u016f\u017eete pos\u00edlat do Clickhouse. Nev\u011bd\u011bl bych o pl\u00e1nech, ale mo\u017en\u00e1 bude pokra\u010dovat dal\u0161\u00ed podpora NoSQL \u0159e\u0161en\u00ed (jako je Clickhouse).<\/p>\n<p><b>A:<\/b> \u2013 Tak\u017ee je mo\u017en\u00e9 \u00fapln\u011b se zbavit PostgreSQL?<\/p>\n<p><b>AG:<\/b> \u2013 Samoz\u0159ejm\u011b, nejt\u011b\u017e\u0161\u00ed \u010d\u00e1st v Zabbixu jsou historick\u00e9 tabulky, kter\u00e9 vytv\u00e1\u0159ej\u00ed nejv\u00edce probl\u00e9m\u016f, a ud\u00e1losti. V takov\u00e9m p\u0159\u00edpad\u011b, pokud nebudete dlouho uchov\u00e1vat ud\u00e1losti a budete uchov\u00e1vat historii s trendy v n\u011bjak\u00e9m jin\u00e9m rychl\u00e9m \u00falo\u017ei\u0161ti, tak v z\u00e1sad\u011b nebudou \u017e\u00e1dn\u00e9 probl\u00e9my, mysl\u00edm, \u017ee to nebude.<\/p>\n<p><b>A:<\/b> \u2013 M\u016f\u017eete odhadnout, jak rychleji v\u0161echno bude fungovat, pokud p\u0159ejdeme na Clickhouse, nap\u0159\u00edklad?<\/p>\n<p><b>AG:<\/b> \u2013 Netestoval jsem. Mysl\u00edm, \u017ee alespo\u0148 stejn\u00fdch \u010d\u00edsel lze dos\u00e1hnout pom\u011brn\u011b jednodu\u0161e, vzhledem k tomu, \u017ee Clickhouse m\u00e1 sv\u016fj rozhran\u00ed, ale nemohu \u0159\u00edci jednozna\u010dn\u011b. L\u00e9pe testovat. V\u0161echno z\u00e1vis\u00ed na konfiguraci: kolik m\u00e1te host\u016f a tak d\u00e1le. Vlo\u017een\u00ed je jedno, ale mus\u00edte tak\u00e9 tyto data z\u00edsk\u00e1vat \u2013 Grafana nebo n\u011bco jin\u00e9ho.<\/p>\n<p><b>A:<\/b> \u2013 Tak\u017ee se jedn\u00e1 o vyrovnan\u00fd boj, a ne o velkou v\u00fdhodu t\u011bchto rychl\u00fdch datab\u00e1z\u00ed?<\/p>\n<p><b>AG:<\/b> \u2013 Mysl\u00edm, \u017ee kdy\u017e integrujeme, budou p\u0159esn\u011bj\u0161\u00ed testy.<\/p>\n<p><b>A:<\/b> \u2013 Kam se pod\u011blal star\u00fd dobr\u00fd RRD? Co p\u0159im\u011blo p\u0159ej\u00edt na SQL datab\u00e1ze? P\u016fvodn\u011b se v\u0161echny metriky shroma\u017e\u010fovaly na RRD.<\/p>\n<p><b>AG:<\/b> \u2013 V \"Zabbix\" mo\u017en\u00e1 existoval RRD v n\u011bjak\u00e9 velmi star\u00e9 verzi. V\u017edy tu byly SQL datab\u00e1ze \u2013 klasick\u00fd p\u0159\u00edstup. Klasick\u00fd p\u0159\u00edstup zahrnuje MySQL, PostgreSQL (u\u017e existuj\u00ed velmi dlouho). Na\u0161e spole\u010dn\u00e9 rozhran\u00ed pro SQL datab\u00e1ze a RRD jsme prakticky nikdy nepou\u017e\u00edvali.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrej Gu\u0161kin (Zabbix): vysok\u00e1 v\u00fdkonnost a nativn\u00ed partitioning\" src=\"\/wp-content\/uploads\/2020\/01\/ac5f02494c63983601cc09c0b22e722b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"umRk94j5M8o\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/umRk94j5M8o\/hqdefault.jpg\" alt=\"P\u0159ehr\u00e1t video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h3>Mal\u00e1 reklama \ud83d\ude42<\/h3>\n<p>\nD\u011bkujeme, \u017ee s n\u00e1mi z\u016fst\u00e1v\u00e1te. L\u00edb\u00ed se v\u00e1m na\u0161e \u010dl\u00e1nky? Chcete vid\u011bt v\u00edce zaj\u00edmav\u00fdch materi\u00e1l\u016f? Podpo\u0159te n\u00e1s objedn\u00e1vkou nebo doporu\u010den\u00edm zn\u00e1m\u00fdm, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">cloudov\u00e9 VPS pro v\u00fdvoj\u00e1\u0159e od 4,99 $<\/a><\/noindex>, <b>unik\u00e1tn\u00ed alternativa entry-level server\u016f, kterou jsme pro v\u00e1s vymysleli:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">V\u0161echny pravdy o VPS (KVM) E5-2697 v3 (6 jader) 10GB DDR4 480GB SSD 1Gbps od 19 $ nebo jak spr\u00e1vn\u011b rozd\u011blit server?<\/a><\/noindex> (k dispozici varianty s RAID1 a RAID10, a\u017e 24 jader a a\u017e 40GB DDR4).<\/p>\n<p><b>Dell R730xd je dvakr\u00e1t levn\u011bj\u0161\u00ed v datov\u00e9m centru Equinix Tier IV v Amsterdamu?<\/b> Jen u n\u00e1s <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB od 199 $<\/a><\/noindex> v Nizozemsku! <b>Dell R420 \u2014 2x E5-2430 2.2GHz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 od 99 $!<\/b><\/b> \u010ct\u011bte o tom <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Jak postavit infrastrukturu podnikov\u00e9 t\u0159\u00eddy s pou\u017eit\u00edm server\u016f Dell R730xd E5-2650 v4 v hodnot\u011b 9000 eur za pakatel?<\/a><\/noindex><br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/485470\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 Zabbix \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 TimescaleDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 backend. \u041f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441 \u043d\u0443\u043b\u044f \u0438 \u043a\u0430\u043a \u043c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 PostgreSQL. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0432\u0443\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439. HighLoad++ Siberia 2019. \u0417\u0430\u043b \u00ab\u0422\u043e\u043c\u0441\u043a\u00bb. 24 \u0438\u044e\u043d\u044f, 16:00. \u0422\u0435\u0437\u0438\u0441\u044b \u0438 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55734","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 Zabbix \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 TimescaleDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 backend. \u041f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441 \u043d\u0443\u043b\u044f \u0438 \u043a\u0430\u043a \u043c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 PostgreSQL.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47HighLoad++, \u0410\u043d\u0434\u0440\u0435\u0439 \u0413\u0443\u0449\u0438\u043d (Zabbix): \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 Zabbix \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 TimescaleDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 backend. \u041f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441 \u043d\u0443\u043b\u044f \u0438 \u043a\u0430\u043a \u043c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 PostgreSQL.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-26T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:52+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47HighLoad++, Andrej Gu\u0161\u010din (Zabbix): vysok\u00fd v\u00fdkon a nativn\u00ed particionov\u00e1n\u00ed | ProHoster","description":"Pod\u00edv\u00e1me se na pr\u00e1ci Zabbix s datab\u00e1z\u00ed TimescaleDB jako backendem. Uk\u00e1\u017eeme, jak spustit od nuly a jak prov\u00e9st migraci z PostgreSQL.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47HighLoad++, \u0410\u043d\u0434\u0440\u0435\u0439 \u0413\u0443\u0449\u0438\u043d (Zabbix): \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 | ProHoster","og:description":"\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 Zabbix \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 TimescaleDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 backend. \u041f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441 \u043d\u0443\u043b\u044f \u0438 \u043a\u0430\u043a \u043c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 PostgreSQL.","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-01-26T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:52+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55734","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:37:39","updated":"2022-09-28 01:51:35","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/55734","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=55734"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/55734\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=55734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=55734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=55734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}