HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Ще разгледаме работата на Zabbix с базата данни TimescaleDB като backend. Ще покажем как да я стартирате от нулата и как да мигрирате от PostgreSQL. Също така ще предоставим сравнителни тестове за производителността на две конфигурации.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

HighLoad++ Сибир 2019. Зала «Томск». 24 юни, 16:00. Тезиси и презентация. Следващата конференция HighLoad++ ще се проведе на 6 и 7 април 2020 година в Санкт Петербург. Подробности и билети на линка.

Андрей Гущин (по-нататък – АГ): – Аз съм инженер по техническа поддръжка на ZABBIX (по-нататък – «Заббикс»), треньор. Работя повече от 6 години в техническата поддръжка и директно съм се сблъсквал с производителността. Днес ще говоря за производителността, която може да предостави TimescaleDB в сравнение с обикновен PostgreSQL 10. Също така ще представя малко входна информация – как всъщност работи.

Основни предизвикателства пред производителността: от събиране до почистване на данни

Започваме с това, че има определени предизвикателства пред производителността, с които се сблъсква всяка система за мониторинг. Първото предизвикателство пред производителността е бързото събиране и обработка на данни.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Добрата система за мониторинг трябва бързо и навременно да получава всички данни, да ги обработва според тригерните изрази, тоест да ги обработва по определени критерии (в различни системи това е различно) и да ги съхранява в базата данни, за да може по-късно да използва тези данни.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Второто предизвикателство пред производителността е съхранението на историята. Трябва да се съхраняват данни в базата, а също така да има бърз и удобен достъп до метриките, събрани за определен период от време. Най-важното е да имате удобен достъп до тези данни, за да ги използвате в отчети, графики, тригери, в определени прагови стойности, за известия и прочие.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Третото предизвикателство пред производителността е почистването на историята, тоест когато настъпи момент, в който не е необходимо да се съхраняват подробни метрики, събрани за 5 години (даже месеци или два месеца). Някои възли от мрежата са изтрити или някои хостове, метриките вече не са нужни, защото са остарели и спират да се събират. Всичко това трябва да се почисти, за да не се разрасне базата данни до голям размер. И в общи линии почистването на историята често е сериозно изпитание за хранилището – много често оказва сериозно влияние върху производителността.

Как да решим проблемите с кеширането?

Сега ще говоря конкретно за „Zabbix“. В „Zabbix“ първият и вторият повик са решени с помощта на кеширане.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Събиране и обработка на данни – ние използваме оперативна памет за съхранение на всички тези данни. Сега ще се говори по-подробно за тези данни.

Също така на страната на базата данни има определено кеширане за основните заявки – за графики и други елементи.

Кеширане на страната на самия Zabbix-сървър: имаме ConfigurationCache, ValueCache, HistoryCache, TrendsCache. Какво е това?

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

ConfigurationCache – основният кеш, в който съхраняваме метрики, хостове, елементи от данни, тригери; всичко необходимо за обработка на препроцесирането, събиране на данни от които хостове, с каква честота. Всичко това се съхранява в ConfigurationCache, за да не се налага да правим излишни запитвания към базата данни. След стартиране на сървъра, обновяваме този кеш (създаваме го) и го обновяваме периодично (в зависимост от настройките на конфигурацията).

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Кеширане в Zabbix. Събиране на данни

Тук схемата е доста голяма:

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Основните в схемата – са тези събирачи:

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Това са самите процеси на събиране, различни „полери“, които отговарят за различни видове събирания. Те събират данни по icmp, ipmi, по различни протоколи и предават всичко на препроцесиране.

PreProcessing HistoryCache

Също така, ако имаме изчисляеми елементи от данни (онези, които познават „Zabbix“ – знаят), има изчисляеми, агрегатни елементи от данни, – ги взимаме директно от ValueCache. За това как той се запълва, ще разкажа по-късно. Всички тези събирачи използват ConfigurationCache, за да получат своите задачи и след това предават на препроцесиране.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Препроцесиране също така използва ConfigurationCache, за да получи стъпките на препроцесирането, обработва тези данни по различни начини. Започвайки от версия 4.2, той е изнесен на прокси. Това е много удобно, тъй като самото препроцесиране е доста тежка операция. И ако имате много голям „Zabbix“ с много елементи от данни и висока честота на събиране, това значително улеснява работата.

Съответно, след като обработим тези данни по някакъв начин с помощта на препроцесиране, ги съхраняваме в HistoryCache, за да ги обработим по-късно. С това завършваме събирането на данни. Преминаваме към основния процес.

Работа на History syncer

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Основният процес в „Zabbix“ (тъй като е монолитна архитектура) е History syncer. Това е основният процес, който се занимава с атомарната обработка на всеки елемент от данните, тоест на всяка стойност:

  • постъпва стойност (той я взима от HistoryCache);
  • проверява в Configuration syncer: дали има тригери за изчисляване – изчислява ги;
    ако има – създава събития, създава ескалация за създаване на уведомление, ако това е необходимо според конфигурацията;
  • записва тригерите за последваща обработка, агрегация; ако агрегирате за последния час и така нататък, тази стойност запомня ValueCache, за да не се обръща към таблицата на историята; по този начин, ValueCache се запълва с необходимите данни, които са нужни за изчисляване на тригерите, изчисляваните елементи и т.н.;
  • след това History syncer записва всичките данни в базата данни;
  • базата данни ги записва на диск – с това процесът на обработка приключва.

Бази данни. Кеширане

На страната на БД, когато искате да видите графики или някакви отчети за събития, има различни кешове. Но в рамките на тази презентация няма да говоря за тях.

За MySQL има Innodb_buffer_pool, още куп различни кешове, които също могат да бъдат настроени.
Но това са основните:

  • shared_buffers;
  • effective_cache_size;
  • shared_pool.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

За всички бази данни посочих, че има определени кешове, които позволяват да се държат в оперативната памет данните, които често са необходими за запитвания. Там имат свои технологии за това.

За производителността на базата данни

Съответно, има конкурентна среда, тоест „Zabbix“-сървърът събира данни и ги записва. При рестартиране също чете от историята, за да напълни ValueCache и така нататък. Тук могат да имате скриптове и отчети, които използват „Zabbix“-API, който е построен на базата на уеб интерфейса. „Zabbix“-API влиза в БД и извлича необходимите данни за получаване на графики, отчети или някакъв списък със събития, последни проблеми.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Също така е много популярно решение за визуализация – Grafana, която нашите потребители използват. Може да влиза директно както чрез „Zabbix“-API, така и чрез БД. Тя също така създава определена конкуренция за получаване на данни: необходима е по-фина, добра настройка на БД, за да отговаря на бързото извеждане на резултати и тестването.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Изчистване на историята. В Zabbix има Housekeeper

Третият метод, който се използва в «Zabbix», е изчистването на историята с помощта на Housekeeper. «Хаускиперът» спазва всички настройки, то есть в нашите данни е указан периодът за съхранение (в дни), колко дълго да се съхраняват трендовете и динамиката на промените.

Не споменах за TrendCache, който се изчислява в реално време: постъпват данни, ние ги агрегирахме за един час (предимно става въпрос за данни от последния час), средно количество / минимално и записваме това веднъж на час в таблицата за динамика на промените («Трендс»). «Хаускиперът» се стартира и изтрива данни от БД с обикновени селекции, което не винаги е ефективно.

Как да разберем, че това не е ефективно? Можете да видите на графиците за производителност на вътрешните процеси следната картина:

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Вашият History syncer постоянно е зает (червен график). А над него е «рицарският» график. Това е «Хаускиперът», който се стартира и чака от БД да изтрие всички редове, които той е зададен.

Да вземем някакъв Item ID: нужно е да изтрием последните 5000; разбира се, по индексите. Но обикновено датасетът е доста голям – БД все пак го чете от диска и го зарежда в кеш паметта, а това е много скъпа операция за БД. В зависимост от размерите му, това може да доведе до определени проблеми с производителността.

Можете да изключите «Хаускиперът» по прост начин – имаме познатия уеб интерфейс. Настройката в Administration general (настройки за «Хаускипера») изключва вътрешната поддръжка за вътрешната история и трендовете. Съответно, «Хаускиперът» вече не управлява това:

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Какво може да се направи нататък? Вие сте изключили, вашите графици са се изравнили… Какви могат да бъдат по-нататъшните проблеми? Какво може да помогне?

Партициониране (секциониране)

Обикновено това се настройва на всяка релационна база данни, която изброих, по различен начин. На MySQL има своя технология. Но в общи линии те са много сходни, ако говорим за PostgreSQL 10 и MySQL. Разбира се, има много вътрешни различия как всичко това е реализирано и как то влияе на производителността. Но в общи линии, създаването на нова партиция също често води до определени проблеми.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

В зависимост от вашия setup (колко много данни създавате за един ден), обикновено се настройва най-ниската стойност – 1 ден/партиция, а за „трендове“, динамика на промените – 1 месец/нова партиция. Това може да се променя, ако имате много голям setup.

Нека веднага кажа за размерите на setup: до 5000 нови стойности в секунда (nvps) – това се счита за малък „сетап“. Средният – от 5 до 25 хиляди стойности в секунда. Всичко над това – вече е големи и много големи инсталации, които изискват много внимателна настройка на базата данни.

При много големи инсталации 1 ден – може да не е оптимално. Лично съм виждал на MySQL партиции по 40 гигабайта на ден (и повече). Това е много голям обем данни, който може да доведе до проблеми. Трябва да се намалява.

Защо е нужно партициониране?

Какво дава Partitioning, мисля, че всички знаят – това е секциониране на таблици. Често това са отделни файлове на диска и спан-запроси. Той по-оптимално избира една партиция, ако попада в нормално партициониране.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

За „Забикс“, в частност, се използва по рендж, по диапазон, тоест ние използваме таймстамп (обикновено число, времето от началото на епохата). Задавате начало на деня/край на деня, и това е партиция. Съответно, ако искате данни от преди два дни, всичко това се избира от базата данни по-бързо, защото трябва само един файл да се зареди в кеша и да се издаде (а не голяма таблица).

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Много бази данни също ускоряват insert (вмъкване в една child-таблица). Докато говоря абстрактно, но това също е възможно. Партиционирането често помага.

Elasticsearch за NoSQL

Наскоро, в 3.4, внедрихме решение за NoSQL. Добавена е възможността за запис в Elasticsearch. Можете да записвате отделни типове: избирате – или числа пишете, или някакви знаци; имаме стринг-текст, логове можете да записвате в Elasticsearch… Съответно, уеб-интерфейсът вече също ще се обръща към Elasticsearch. Това отлично работи в някои случаи, но в момента може да се използва.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

TimescaleDB. Хипертаблици

За 4.4.2 обърнахме внимание на нещо, както TimescaleDB. Какво е това? Това е разширение за PostgreSQL, т.е. има нативен интерфейс на PostgreSQL. Освен това, това разширение позволява много по-ефективна работа с времеви данни и автоматично партициониране. Как изглежда това:

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Това е hypertable – има такова понятие в Timescale. Това е хипертаблица, която създавате, и в нея се намират чанкове (chunk). Чанк-ите са партиции, това са child таблици, ако не се лъжа. Наистина е ефективно.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

TimescaleDB и PostgreSQL

Как уверяват производителите на TimescaleDB, те използват по-правилен алгоритъм за обработка на заявки, по-специално insert-ите, който позволява почти постоянна производителност при увеличаващ се размер на dataset-вмъкването. Тоест след 200 милиона реда, обикновеният PostgreSQL започва да се представя много зле и губи производителност почти до нула, докато Timescale позволява да вмъквате инсерти възможно най-ефективно при всяко количество данни.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Как да инсталирате TimescaleDB? Всичко е просто!

В документацията му е описано – можете да го инсталирате от пакети за всякакви… Зависим е от официалните пакети на PostgreSQL. Можете да го компилирате ръчно. Така се случи, че ми се наложи да компилирам за БД.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

На Zabbix просто активираме Extention. Мисля, че тези, които са ползвали Extention в PostgreSQL… Просто активирате Extention, създавате го за БД Zabbix, която използвате.

И последната стъпка…

TimescaleDB. Миграция на таблици с история

Трябва да създадете hypertable. За това има специална функция – Create hypertable. В нея първият параметър указва таблицата, която е необходима в тази БД (за която да се създаде хипертаблицата).

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Полето, по което трябва да се създаде, и chunk_time_interval (това е интервалът на чанк-овете (партициите, които трябва да се използват). 86 400 – това е един ден.

Параметър migrate_data: ако зададете true, то пренася всички текущи данни в предварително създадените чанкове.

Аз самият използвах migrate_data – отнема значително време, в зависимост от размера на вашата БД. Имах над един терабайт – създаването отне повече от час. В някои случаи при тестването изтривах исторически данни за текст (history_text) и стринг (history_str), за да не ги пренасям – всъщност те не ме интересуваха.

И последният ъпдейт правим в нашия db_extension: поставяме timescaledb, за да може базата данни и по-специално нашият "Забикс" да разбере, че съществува db_extension. Той го активира и използва правилния синтаксис и заявки към базата данни, прилагайки вече тези "функции", които са необходими за TimescaleDB.

Конфигурация на сървъра

Използвах два сървъра. Първият сървър е виртуална машина, доста малка, с 20 процесора и 16 гигабайта оперативна памет. Настроих на нея "Постгрес" 10.8:

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Операционната система беше Debian, файловата система – xfs. Направих минимални настройки, за да използвам именно тази база данни, без да включвам самия "Забикс". На същата машина беше инсталиран "Забикс"-сървърът, PostgreSQL и натоварващите агенти.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Използвах 50 активни агенти, които използват LoadableModule, за да генерират бързо различни резултати. Те генерираха редове, числа и така нататък. Задълбочих базата данни с голямо количество данни. Първоначалната конфигурация съдържаше 5000 елемента данни на всеки хост, и около всеки елемент данни имаше тригер – за да бъде това реална настройка. Понякога дори е необходимо да се използват повече от един тригер.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Регулирах интервала на актуализация, натоварването, като не само 50 агента използвах (добавях още), но и чрез динамични елементи данни и намалих интервала за актуализация до 4 секунди.

Тест за производителност. PostgreSQL: 36 хиляди NVPs

Първото стартиране, първата настройка беше на чист PostreSQL 10 на това оборудване (35 хиляди стойности в секунда). Както виждате на екранa, вмъкването на данни отнема части от секунди – всичко е добре и бързо, SSD дискове (200 гигабайта). Единственото, което 20 ГБ се запълват доста бързо.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Ще има доста такива графики. Това е стандартният dashboard за производителност на "Забикс"-сървъра.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Първата графика – количество стойности в секунда (синя, горе вляво), 35 хиляди стойности в този случай. Това (горе в центъра) е натоварването на процесите на събиране, а това (горе вдясно) – натоварването именно на вътрешните процеси: history syncers и housekeeper, който тук (вдолу в центъра) е работил доста време.

Тази графика (в долния център) показва използването на ValueCache – колко хита имаше ValueCache за тригери (няколко хиляди стойности в секунда). Друг важен график е четвъртият (в долния ляв ъгъл), който показва използването на HistoryCache, за който говорих, който е буфер преди запис в базата данни.

Тест на производителността. PostgreSQL: 50 хиляди NVPs

След това увеличих натоварването до 50 хиляди стойности в секунда на същото оборудване. При натоварване с „Хаускипер“ 10 хиляди стойности се записваха за 2-3 секунди с изчисление. Това, всъщност, е показано на следващия екранен снимка:

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

„Хаускипер“ започва да пречи на работата, но въпреки това натоварването на хистори-синкерите все още е на ниво от 60 % (третият график, в горния десен ъгъл). HistoryCache започва активно да се запълва дори по време на работата на „Хаускипера“ (в долния ляв ъгъл). Той беше около половин гигабайт, запълвайки се на 20%.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Тест на производителността. PostgreSQL: 80 хиляди NVPs

След това увеличих до 80 хиляди стойности в секунда:

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Това беше около 400 хиляди елемента данни, 280 хиляди тригери. Както виждате, натоварването на хистори-синкерите (имаше 30 броя) вече беше доста високо. След това увеличавах различни параметри: хистори-синкери, кеш... На това оборудване натоварването на хистори-синкерите започна да се покачва до максимума, практически „в полка“ – съответно, HistoryCache тръгна в много високо натоварване:

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

През цялото това време наблюдавах всички параметри на системата (как се използва процесорът, оперативната памет) и установих, че използването на дисковете беше максимално – постигнах максималната допустима стойност на този диск на това оборудване, на тази виртуална машина. „Постгрес“ започна при такава интензивност активно да изхвърля данни, и дискът вече не успяваше да записва, четене...

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Взех друг сървър, който вече имаше 48 процесора и 128 гигабайта оперативна памет:

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Също така го „оправих“ – инсталирах History syncer (60 броя) и постигнах приемливо представяне. Всъщност ние не сме „в полка“, но това вече е, може би, предел на производителността, където вече е необходимо да се предприемат действия.

Тест на производителността. TimescaleDB: 80 хиляди NVPs

Главната ми задача беше – да използвам TimescaleDB. На всеки график е видимо пропадане:

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Тези провали са именно миграцията на данни. След това в сървъра на "Забикс" профилът на зареждане на хистори-сиinker-ите, както виждате, се е променил много. Той практически е три пъти по-бърз при вмъкването на данни и използва по-малко HistoryCache – съответно, данните ще пристигат навреме. Отново, 80 хиляди стойности в секунда – това е достатъчно висок рейт (разбира се, не за "Яндекс"). Като цяло, това е доста голям сетъп с един сървър.

Тест за производителността на PostgreSQL: 120 хиляди NVPs

След това увеличих стойността на елементите на данните до половин милион и получих изчислено значение от 125 хиляди в секунда:

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

И получих такива графици:

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

В принципе, това е работещ сетъп, който може да работи доста дълго време. Но тъй като имам диск само от 1,5 терабайта, го изразходвах за няколко дни. Най-важното е, че по това време се създаваха нови партиции на TimescaleDB, и за производителността това премина напълно незабелязано, за разлика от MySQL.

Обикновено партициите се създават през нощта, тъй като това блокира вмъкването и работата с таблиците, което може да доведе до деградация на услугата. В този случай това не е така! Основната задача беше да се провери възможностите на TimescaleDB. Получи се следната цифра: 120 хиляди стойности в секунда.

Има примери в "комньюнити":

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Човек също е включил TimescaleDB и натоварването по използване на io.weight спадна на процесора; и използването на елементи от вътрешните процеси също намаля поради активирането на TimescaleDB. И това са обикновени хард дискове, тоест обикновена виртуалка на обикновени дискове (не SSD)!

За някакви малки сетъпи, които се сблъскват с производителността на диска, TimescaleDB, според мен, е много добро решение. То ще позволи да продължат да работят преди да мигрират на по-бързо оборудване за базата данни.

Каня всички вас на нашите събития: Конференция – в Москва, Самит – в Рига. Ползвайте нашите канали – "Телеграм", форум, IRC. Ако имате някакви въпроси – елате при нас на щанда, можем да говорим за всичко.

Въпроси от аудиторията

Въпрос от публиката (нататък – П): – Ако TimescaleDB е толкова лесен за настройка и дава толкова голямо увеличение на производителността, може би е умно да го използваме като най-добра практика за настройка на 'Zabbix' с 'Postgres'? Има ли някакви подводни камъни и недостатъци на това решение, или все пак, ако реша да инсталирам 'Zabbix', мога спокойно да взема 'Postgres', да инсталирам 'Timescale' веднага, да го използвам и да не се притеснявам за никакви проблеми?

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

АГ: – Да, бих казал, че това е добра препоръка: да използвате 'Postgres' веднага с разширението TimescaleDB. Както вече споменах, много добри отзиви, въпреки че тази 'функция' е експериментална. Но всъщност тестовете показват, че това е отлично решение (с TimescaleDB) и мисля, че ще се развива! Наблюдаваме как това разширение напредва и ще коригираме всичко необходимо.

Дори по време на разработката се опирахме на една от техните известни 'функции': там можеше да се работи по малко по-различен начин с чанките. Но после те го премахнаха в следващото издание и трябваше да не се опираме на този код. Бих препоръчал да използвате това решение в много настройки. Ако използвате MySQL… за средни настройки всяко решение работи добре.

А: – На последните графики, предоставени от обществото, имаше графика с 'Housekeeper':

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Той продължи да работи. Какво прави 'Housekeeper' в случай на TimescaleDB?

АГ: – Сега не мога да кажа точно – ще погледна кода и ще предоставя допълнителна информация. Той използва заявки именно на TimescaleDB не за премахване на чанкове, а по-скоро агрегира. Все още не съм готов да отговоря на този технически въпрос. На стенда ще уточним днес или утре.

А: – Имам подобен въпрос – за производителността при операция на изтриване в 'Timescale'.
П (отговор от публиката): – Когато изтривате данни от таблица, ако го правите чрез delete, трябва да преминете през таблицата – да изтриете, да почистите, да маркирате всичко за бъдеща вакуумизация. В 'Timescale', тъй като имате чанкове, можете да ги изтривате. Грубо казано, просто казвате на файла, който е в big data: 'Изтрий!'

„TimeScale“ просто разбира се, че такъв чанк вече няма. А тъй като той се интегрира в планиращия на заявките, той на хуковете улова вашите условия в select или в други операции и веднага разбира, че този чанк вече не съществува – „Аз няма да отида там повече!“ (данните са отсъстващи). И това е всичко! Тоест, сканът на таблицата се заменя с изтриването на бинарния файл, така че това е бързо.

А: – Вече обсъдихме темата за NoSQL. Доколкото разбирам, на „Zabbix“ не му е нужно прекалено много модифициране на данните, а всичко това е нещо като лог. Може ли да се използват специализирани бази данни, които не могат да променят своите данни, но в същото време запазват, акумулират и предоставят значително по-бързо – Clickhouse, например, нещо подобно на Kafka?.. Kafka – също е лог! Може ли да се интегрира по някакъв начин?

АГ: – Извеждане може да се направи. Имаме определена „функция“ от версия 3.4: можете да записвате всички исторически файлове, събития, всичко останало в файлове; и след това с някакъв обработчик да изпращате в друга база данни. Всъщност много хора променят и пишат директно в база данни. На лето хистори-синкери всичко това пишат в файлове, ротират тези файлове и така нататък, и можете да ги прехвърляте в „Clickhouse“. Не мога да говоря за плановете, но възможно е бъдещата поддръжка на NoSQL решения (като „Clickhouse“) да продължи.

А: – Излиза, че може да се отървем напълно от Postgres?

АГ: – Разбира се, най-трудната част в „Zabbix“ са историческите таблици, които създават най-много проблеми, и събитията. В този случай, ако не съхранявате събития дълго време и съхранявате история с трендове в някакво друго бързо хранилище, то като цяло не би трябвало да имате никакви проблеми.

А: – Можете ли да оцените колко по-бързо ще работи всичко, ако преминем на „Clickhouse“, например?

АГ: – Не съм тествал. Мисля, че най-малкото същите цифри могат да се постигнат доста лесно, предвид, че „Clickhouse“ има свой интерфейс, но не мога да кажа със сигурност. Най-добре е да се направят тестове. Всичко зависи от конфигурацията: колко хостове имате и така нататък. Вмъкването – това е едно, но трябва и да вземате тези данни – Grafana или нещо друго.

А: – Тоест, става дума за равна конкуренция, а не за голямо предимство на тези бързи бази данни?

АГ: – Мисля, че когато интегрираме, ще имаме по-точни тестове.

А: – Къде отиде старият добър RRD? Какво накара да преминем на SQL бази данни? Първоначално всички метрики се събираха на RRD.

АГ: – В „Zabbix“ RRD, може би, е бил в много стара версия. Винаги е имало SQL бази – класическият подход. Класическият подход е MySQL, PostgreSQL (вече съществуват от доста време). Имаме общ интерфейс за SQL бази данни, а RRD практически никога не сме използвали.

HighLoad++, Андрей Гущин (Zabbix): висока производителност и нативно партициониране

Възпроизведи видео

Малко реклама 🙂

Благодаря, че оставате с нас. Харесвате ли нашите статии? Искате ли да видите повече интересни материали? Подкрепете ни, като направите поръчка или я препоръчате на познати, облачни VPS за разработчици от $4.99, уникален аналог на entry-level сървъри, създаден от нас за Вас: Всичко за VPS (KVM) E5-2697 v3 (6 ядра) 10GB DDR4 480GB SSD 1Gbps от $19 или как да разделите правилно сървъра? (налични опции с RAID1 и RAID10, до 24 ядра и до 40GB DDR4).

Dell R730xd два пъти по-евтин в дата-центъра Equinix Tier IV в Амстердам? Само при нас 2 х Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB от $199 в Нидерландия! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — от $99! Четете за това Как да изградим инфраструктура от корпоративен клас с прилагане на сървъри Dell R730xd Е5-2650 v4 на стойност 9000 евро за копейки?

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster