Използване на Clickhouse като заместител на ELK, Big Query и TimescaleDB.

Clickhouse — това е колонкова система за управление на бази данни за онлайн обработка на аналитични запитвания (OLAP) с отворен код, създадена от Яндекс. Тя се използва от Яндекс, CloudFlare, VK.com, Badoo и други услуги по целия свят за съхранение на наистина огромни обеми данни (вмъкване на хиляди редове в секунда или питабайти данни, съхранявани на диск).

В обикновената, "редова" СУБД, примери за които са MySQL, Postgres, MS SQL Server, данните се съхраняват в такъв ред:

Използване на Clickhouse като заместител на ELK, Big Query и TimescaleDB.

При това стойностите, свързани с един ред, физически се съхраняват близо до себе си. В колонковите СУБД стойностите от различни колони се съхраняват отделно, а данните от една колона – заедно:

Използване на Clickhouse като заместител на ELK, Big Query и TimescaleDB.

Примери за колонкови СУБД са Vertica, Paraccel (Actian Matrix, Amazon Redshift), Sybase IQ, Exasol, Infobright, InfiniDB, MonetDB (VectorWise, Actian Vector), LucidDB, SAP HANA, Google Dremel, Google PowerDrill, Druid, kdb+.

Компания – мейлфорвардер Qwintry започна да използва Clickhouse през 2018 година за изготвяне на отчети и много се впечатли от простотата, мащабируемостта, поддръжката на SQL и скоростта. Бързината на работа на тази СУБД граничеше с магия.

Лесна употреба

Clickhouse се инсталира в Ubuntu с една единствена команда. Ако познавате SQL, можете веднага да започнете да използвате Clickhouse за вашите нужди. Въпреки това, това не означава, че можете просто да изпълните "show create table" в MySQL и да копирате и поставите SQL в Clickhouse.

В сравнение с MySQL, в тази СУБД съществуват важни разлики в типовете данни в определенията на схемите на таблиците, затова за комфортна работа все още ще ви е нужно известно време, за да промените определенията на схемите на таблиците и да изучите механизмите на таблиците.

Clickhouse отлично работи без каквото и да е допълнително софтуерно осигуряване, но ако решите да използвате репликация, ще ви е необходимо да инсталирате ZooKeeper. Анализът на производителността на запитванията показва отлични резултати — системните таблици съдържат всяка информация, а всички данни могат да бъдат получени с помощта на старият и скучен SQL.

Производителност

Използване на Clickhouse като заместител на ELK, Big Query и TimescaleDB.

Базата данни ClickHouse притежава много прост дизайн - всички възли в клъстера имат еднаква функционалност и за координация използват единствено ZooKeeper. Изградихме малък клъстер от няколко възела и проведохме тестове, по време на които установихме, че системата притежава доста впечатляваща производителност, която отговаря на декларираните предимства в бенчмарковете на аналитични СУБД. Решихме да се запознаем по-подробно с концепцията, която стои зад ClickHouse. Първото препятствие за изследванията беше липсата на инструменти и малкото на брой общество на ClickHouse, затова задълбочихме изучаването на дизайна на тази СУБД, за да разберем как работи.

ClickHouse не поддържа прием на данни директно от Kafka, тъй като това е просто база данни, затова написахме собствен адаптерен сървис на езика Go. Той прочиташе кодираните съобщения Cap’n Proto от Kafka, преобразуваше ги в TSV и ги вкарваше в ClickHouse на пакети през HTTP интерфейс. По-късно пренаписахме този сървис, за да използваме библиотеката Go заедно с нашия собствен интерфейс на ClickHouse за повишаване на производителността. При оценката на производителността на приемането на пакети установихме важна особеност - оказа се, че при ClickHouse тази производителност силно зависи от размера на пакета, тоест от броя на едновременно вмъкваните редове. За да разберем защо това се случва, проучихме как ClickHouse съхранява данните.

Основният механизъм, по-скоро семейството на механизмите за таблици, използван за съхранение на данни в ClickHouse, е MergeTree. Този механизъм концептуално напомня на LSM алгоритъма, приложен в Google BigTable или Apache Cassandra, но избягва изграждането на междинна таблица в паметта и записва данните директно на диска. Това му дава отлична производителност при запис, тъй като всеки вмъкнат пакет се сортира единствено по „първичния ключ“ primary key, компресира се и се записва на диска за формиране на сегмент.

Отсъствието на таблица за памет или на каквото и да е понятие за "свежест" на данните също така означава, че те могат само да се добавят, системата не поддържа промяна или изтриване. В момента единственият начин да се изтриват данни е да се изтриват по календарни месеци, тъй като сегментите никога не пресичат границата на месеца. Екипът на ClickHouse активно работи по това да направи тази функция конфигурируема. От друга страна, това прави записването и сливането на сегменти безконфликтни, следователно пропускната способност на приема линейно се мащабира с броя на паралелните инсерции, докато не настъпи насищане на I/O или ядра.
Въпреки това, тази обстоятелство също така означава, че системата не е подходяща за малки пакети, поради което за буфериране се използват услуги на Kafka и инсертери. Освен това, ClickHouse на фонов режим продължава да извършва постоянно сливане на сегменти, така че много малки части информация да бъдат обединени и записани повече пъти, увеличавайки интензивността на записа. В същото време, прекалено много несвързани части ще причинят агресивно тротлиране на инсерциите, докато сливането продължава. Открихме, че най-добрият компромис между приема на данни в реално време и производителността е приемането в таблица с ограничен брой инсерции в секунда.

Ключът към производителността на четене на таблици е индексирането и разположението на данните на диска. Независимо колко бърза е обработката, когато на двигателя трябва да сканира терабайти данни от диска и да използва само част от тях, това ще отнеме време. ClickHouse е колоночно хранилище, така че всеки сегмент съдържа файл за всяка колона с подредени стойности за всеки ред. По този начин, цели колони, които не присъстват в запитването, първо могат да бъдат пропуснати, а след това няколко клетки могат да бъдат обработени паралелно с векторизирано изпълнение. За да се избегне пълно сканиране, всеки сегмент има малък индексен файл.

Като се има предвид, че всички колони са сортирани по „първичен ключ“, индексният файл съдържа само етикети (забелязани редове) на всяка N-та редица, за да може да ги съхранява в паметта дори за много големи таблици. Например, можете да зададете настройките по подразбиране да „забелязвате всеки 8192-ри ред“, в този случай „оскъдна“ индексация на таблица с 1 трлн. реда, която лесно влиза в паметта, ще изисква само 122 070 знака.

Развитие на системата

Развитието и усъвършенстването на Clickhouse могат да се проследят на Github репозиторий и да се уверите, че процесът на „израстване“ протича с впечатляващи темпове.

Използване на Clickhouse като заместител на ELK, Big Query и TimescaleDB.

Популярност

Изглежда, че популярността на Clickhouse нараства експоненциално, особено в рускоязичната общност. Миналогодишната конференция High load 2018 (Москва, 8-9 ноември 2018 г.) показа, че такива монстри, като vk.com и Badoo, използват Clickhouse, с помощта на която вкарват данни (например логове) от десетки хиляди сървъри едновременно. В 40-минутно видео Юрий Насретдинов от екипа на ВКонтакте разказва как се прави това. Скоро ще публикуваме стенограмата на Хабр за улеснение при работа с материала.

Области на приложение

След като прекарах известно време в изследвания, мисля, че съществуват области, в които ClickHouse може да бъде полезен или да замести напълно други, по-традиционни и популярни решения, като MySQL, PostgreSQL, ELK, Google Big Query, Amazon RedShift, TimescaleDB, Hadoop, MapReduce, Pinot и Druid. По-долу са изложени подробности за използването на ClickHouse за модернизация или пълна замяна на посочените по-горе СУБД.

Разширяване на възможностите на MySQL и PostgreSQL

Съвсем наскоро частично заменихме MySQL с ClickHouse за платформата за информационни бюлетини Mautic newsletterПроблемата беше, че MySQL поради лошо проектиран дизайн регистрираше всяко изпратено писмо и всяка връзка в това писмо с base64 хеш, създавайки огромна MySQL таблица (email_stats). След изпращането на 10 милиона писма на абонатите на услугата, тази таблица заемаше 150 ГБ дисково пространство и MySQL започваше да „забавя“ при простички запитвания. За да решим проблема с пространството, успешно използвахме компресия на InnoDB таблицата, което намали размера ѝ четири пъти. Въпреки това, пак няма смисъл да се съхраняват повече от 20-30 милиона имейла в MySQL само за да четем историята, тъй като всяко просто запитване, което по някаква причина изисква пълно сканиране, води до свързване и голямо натоварване на I/O, по което редовно получавахме предупреждения от Zabbix.

Използване на Clickhouse като заместител на ELK, Big Query и TimescaleDB.

Clickhouse използва два алгоритма за компресия, които намаляват обема на данните с около 3-4 пъти, но в този конкретен случай данните бяха особено „компресируеми“.

Използване на Clickhouse като заместител на ELK, Big Query и TimescaleDB.

Замяна на ELK

Според личния опит, стекът ELK (ElasticSearch, Logstash и Kibana, в този конкретен случай ElasticSearch) изисква много повече ресурси за работа, отколкото е необходимо за съхранение на логовете. ElasticSearch е отличен двигател, ако имате нужда от добър текстов търсене в логовете (а не мисля, че наистина ви е необходимо), но мен ме интересува защо de facto той стана стандартен двигател за логове. Производителността му в комбинация с Logstash ни създаваше проблеми дори при сравнително малки натоварвания и изискваше добавяне на все повече оперативна памет и дисково пространство. Като база данни, Clickhouse е по-добър от ElasticSearch по следните причини:

  • Поддръжка на SQL диалект;
  • По-добра степен на компресия на съхраняваните данни;
  • Поддръжка на регулярни изрази Regex вместо пълнотекстово търсене;
  • Подобрено планиране на запитванията и по-висока обща производителност.

В момента най-голямата проблема при сравнението на ClickHouse с ELK е липсата на решения за изтегляне на логовете, както и недостигът на документация и учебни материали по тази тема. Въпреки това всеки потребител може да конфигурира ELK с помощта на ръководството на Digital Ocean, което е много важно за бързото внедряване на подобни технологии. Тук има СУБД, но все още няма Filebeat за ClickHouse. Да, това е налично. fluentd и система за работа с логовете loghouse, съществува инструмент clicktail за въвеждане на лог файлове в ClickHouse, но всичко това отнема повече време. Въпреки това ClickHouse все пак е лидер заради своята простота, така че дори начинаещите могат да го инсталират лесно и да започнат да го използват напълно буквално след 10 минути.

Предпочитайки минималистични решения, опитах да използвам FluentBit, инструмент за извеждане на журнали с много малък обем памет, заедно с ClickHouse, като се опитвах да избегна използването на Kafka. Въпреки това, трябва да се разрешат малки несъвместимости, като проблеми с формата на дата, преди това да може да се направи без прокси слой, който преобразува данните от FluentBit в ClickHouse.

Вместо Kibana може да се използва ClickHouse като бекенд Grafana. Dokолкото разбрах, могат да възникнат проблеми с производителността при рендиране на огромно количество данни, особено при по-стари версии на Grafana. В Qwintry все още не сме го опитвали, но оплаквания за това понякога се появяват в канала за поддръжка на ClickHouse в Telegram.

Замяна на Google Big Query и Amazon RedShift (решение за големи компании)

Идеалният вариант за използване на BigQuery е да заредите 1 TB JSON данни и да направите аналитични запитвания върху тях. Big Query е отличен продукт, чиято мащабируемост е трудно да се преувеличи. Това е значително по-сложен софтуер от ClickHouse, работещ на вътрешен кластер, но от гледна точка на клиента има много общо с ClickHouse. BigQuery може бързо да „поскъпне“, щом започнете да плащате за всяко SELECT запитване, така че това е истинско SaaS решение с всичките си предимства и недостатъци.

ClickHouse е най-добрият избор, когато изпълнявате много запитвания, които са скъпи по отношение на калкулация. Колкото повече SELECT запитвания извършвате всеки ден, толкова повече смисъл има да замените Big Query с ClickHouse, защото подобна замяна ще ви спести хиляди долари, ако става въпрос за много терабайти обработвани данни. Това не важи за съхранявани данни, обработката на които в Big Query е сравнително евтина.

В статия на съоснователя на Altinity Александър Зайцев «Преминаване към ClickHouse» се разказва за предимствата на такава миграция на СУБД.

Замяна на TimescaleDB

TimescaleDB е разширение на PostgreSQL, което оптимизира работата с времеви редове в обикновена база данни.https://docs.timescale.com/v1.0/introduction, https://habr.com/ru/company/zabbix/blog/458530/).

Въпреки че ClickHouse не е сериозен конкурент в нишата на времевите редове, неговата колоночна структура и векторно изпълнение на запитвания го правят значително по-бърз от TimescaleDB в повечето случаи при обработка на аналитични запитвания. В допълнение, производителността на приемането на пакетни данни в ClickHouse е около три пъти по-висока, а той използва 20 пъти по-малко дисково пространство, което е изключително важно за обработка на големи обеми исторически данни.https://www.altinity.com/blog/ClickHouse-for-time-series.

За разлика от ClickHouse, единственият начин да се спести малко дисково пространство в TimescaleDB е да се използва ZFS или подобни файлови системи.

Предстоящите актуализации на ClickHouse вероятно ще въведат дельта-компресия, което ще го направи още по-подходящ за обработка и съхранение на данни от времеви редове. TimescaleDB може да се окаже по-добър избор от "чистия" ClickHouse в следните случаи:

  • малки инсталации с много малко оперативна памет (<3 ГБ);
  • голямо количество малки INSERT операции, които не искате да буферирате в големи фрагменти;
  • по-добра последователност, еднородност и изисквания AСID;
  • поддръжка на PostGIS;
  • интегриране с съществуващи таблици PostgreSQL, тъй като по същество TimescaleDB е PostgreSQL.

Конкуренция с системи Hadoop и MapReduce

Hadoop и други продукти MapReduce могат да извършват много сложни изчисления, но обикновено работят с огромни закъснения. ClickHouse решава този проблем, обработвайки терабайти данни и почти незабавно предоставяйки резултат. По този начин ClickHouse е много по-ефективен за бързо, интерактивно аналитично изследване, което би трябвало да заинтересува специалистите в областта на обработката на данни.

Конкуренция с Pinot и Druid

Най-близките конкуренти на ClickHouse са колонковите линейно-масштабируеми open source продукти Pinot и Druid. Отлична работа по сравнението на тези системи е публикувана в статията на Роман Левентов от 1 февруари 2018 г.

Използване на Clickhouse като заместител на ELK, Big Query и TimescaleDB.

Тази статия изисква обновление – в нея се твърди, че ClickHouse не поддържа операции UPDATE и DELETE, което не е съвсем вярно за последните версии.

Нямаме достатъчен опит с тези СУБД, но не ми харесва сложността на инфраструктурата, необходима за стартиране на Druid и Pinot - това е цял куп „подвижни части“, обградени от Java от всички страни.

Druid и Pinot са проектите в инкубатора на Apache, развитието на които е подробно отразено от Apache на страниците на техните проекти в GitHub. Pinot се появи в инкубатора през октомври 2018, докато Druid се роди 8 месеца по-рано - през февруари.

Липсата на информация за това как работи AFS предизвиква у мен някои, вероятно глупави въпроси. Интересно ми е дали авторите на Pinot са забелязали, че Apache Foundation е по-благосклонна към Druid и дали такова отношение към конкурента не е предизвикало чувство на завист? Ще забави ли развитието на Druid и ще спомогне ли за ускоряване на развитието на Pinot, ако спонсорите, подкрепящи първия, изведнъж се заинтересуват от втория?

Недостатъци на ClickHouse

Незрялост: очевидно, че това все още е нова технология, но все пак, не се наблюдава нещо подобно в други колонкови СУБД.

Малките вставки не работят добре при висока скорост: вставките трябва да бъдат разделени на големи парчета, защото производителността на малките вставки намалява пропорционално на броя на колоните в реда. Точно така данните се съхраняват в ClickHouse — всяка колона означава 1 файл или повече, затова за вставка на 1 ред, съдържащ 100 колони, трябва да се отворят и запишат поне 100 файла. Ето защо за буфериране на вставките е необходим посредник (освен ако самият клиент не предоставя буфериране) — обикновено това е Kafka или някаква система за управление на опашки. Може да се използва и двигателът Buffer table, за да се копират по-големи фрагменти от данни в таблиците MergeTree по-късно.

Съединенията на таблици са ограничени от оперативната памет на сървъра, но поне, в крайна сметка, те съществуват! Например, Druid и Pinot изобщо нямат такива съединения, тъй като те са трудни за реализиране директно в разпределени системи, които не поддържат преместването на големи парчета данни между възлите.

Изводи

В близките години планираме да използваме широко ClickHouse в Qwintry, тъй като тази СУБД предлага отличен баланс между производителност, ниски разходи, мащабируемост и простота. Почти съм убеден, че тя ще започне да се разпространява бързо, след като общността ClickHouse измисли повече начини за нейното използване в малки и средни инсталации.

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

Благодаря, че оставате с нас. Харесвате ли нашите статии? Искате ли да видите повече интересни материали? Подкрепете ни, като направите поръчка или я препоръчате на познати, облачни 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