Представьте, что вы едете на электромобиле по автомагистрали. Датчик под педалью собирает 80 точек данных в секунду по 80 заранее определённым метрикам, что составляет в общей сложности 2 КБ. В течение одной минуты вы можете наблюдать эти непрерывно поступающие данные и использовать их для анализа в реальном времени. Однако перед этим необходимо надёжное хранилище — база данных, способная принять и сохранить эти ценные данные.
Очевидно, что базам временных рядов приходится обрабатывать огромные объёмы данных от множества устройств в режиме реального времени — производительность загрузки критически важна!
В этом разделе вы воспользуетесь передовыми компонентами YMatrix — MatrixGate и MatrixBench, чтобы провести мощное тестирование производительности приёмки данных и обеспечить надёжность последующего анализа.
Ниже приведена конфигурация нашей тестовой среды. Аппаратные характеристики могут влиять на параметры настройки инструментов, поэтому обязательно выбирайте подходящие значения для своей системы.
Конфигурация машины следующая:
| Параметр | Конфигурация |
|---|---|
| Ядра CPU | 2 физических ядра, 32 логических ядра |
| Платформа CPU | Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz |
| Оперативная память | 256 ГБ |
| Объём хранилища | 9,0 ТБ (запись 1,4 ГБ/с, чтение 3,3 ГБ/с) |
| Дистрибутив Linux | CentOS Linux release 7.8.2003 (Core) |
| Версия ядра Linux | 3.10.0-1127.el7.x86_64 |
MatrixGate (сокращённо mxgate) — это высокопроизводительный сервер потоковой загрузки данных, расположенный в каталоге bin/mxgate установочного директория YMatrix. Он полностью использует возможности параллельной обработки распределённой базы данных и является предпочтительным инструментом для загрузки данных в рабочих средах. Во время тестирования mxgate работает совместно с компонентом записи mxbench, быстро загружая случайные данные, генерируемые генератором.
Дополнительную информацию см. в разделе mxgate.
mxbench — это инструмент нагрузочного тестирования для загрузки и запросов к данным. Он генерирует случайные данные на основе таких параметров, как количество устройств, временной диапазон и число метрик. Инструмент автоматически создаёт таблицы и поддерживает последовательную или параллельную загрузку данных и выполнение запросов. Вы можете настраивать и запускать mxbench через командную строку или задавать параметры в конфигурационном файле — выберите удобный вам способ. Утилита mxbench находится в каталоге bin/mxbench установочной директории YMatrix.
Развертывание на одном сервере: Master + 6 Segments
Примечание!
MatrixGate и MatrixBench должны быть установлены на той же машине, где работает кластер YMatrix.
Мы предлагаем три тестовых случая с разным количеством метрик, чтобы смоделировать различные сценарии временных рядов. В конце этого раздела мы наглядно сравним производительность записи YMatrix при различных масштабах метрик:
Примечание!
Перед использованиемmxbenchдля нагрузочного тестирования убедитесь, что ваша тестовая среда готова: кластер YMatrix должен работать, а переменные окружения — быть правильно настроены. Этот шаг обязателен! Ручная настройка mxgate не требуется — он автоматически настраивается и запускается при старте mxbench.
Инструкции по развёртыванию кластера см. в разделе Развёртывание кластера. Информацию о настройке mxbench см. в разделе mxbench.
Параметры конфигурации mxbench делятся на две части: глобальные настройки и настройки модульных компонентов. Глобальные настройки включают секции database и global; модульные настройки охватывают генератор, компонент записи и инструмент тестирования.
Так как в данном разделе основное внимание уделяется оценке производительности загрузки YMatrix, подробно рассматривать инструмент запросов benchmark мы не будем.
Подробности о benchmark см. в разделе mxbench.
В следующей таблице описаны ключевые параметры:
| Имя параметра | Значение по умолчанию | Описание |
|---|---|---|
--database |
Значение переменной окружения PGDATABASE, иначе postgres |
Имя целевой базы данных |
--db-master-port |
— | Порт экземпляра; должен соответствовать значению в переменных окружения |
--db-user |
Текущее имя пользователя | Пользователь базы данных |
--workplace |
/tmp/mxbench |
Каталог для CSV-файлов данных и файлов запросов |
--watch |
true |
Включить мониторинг процесса (по умолчанию: включено) |
--simultaneous-loading-and-query |
false |
Параллельная загрузка и выполнение запросов. По умолчанию false: сначала загрузка, затем запросы |
--table-name |
— | Имя целевой таблицы (обязательно, должно быть указано вручную) |
--tag-num |
25000 | Количество устройств |
--metrics-type |
float8 |
Тип данных метрик. Поддерживаемые типы: "int4", "int8", "float4", "float8" |
--total-metrics-count |
300 | Общее количество метрик |
--ts-start |
— | Начальная временная метка для генерируемых данных |
--ts-end |
— | Конечная временная метка для генерируемых данных |
--ts-step-in-second |
1 | Интервал между выборками метрик (в секундах) |
--generator |
telematics |
Генератор случайных данных. По умолчанию генерирует данные сценария телематики. Также может читать из пользовательских файлов или пропускать генерацию |
--generator-batch-size |
1 | Количество строк на устройство на временную метку. По умолчанию 1 означает отсутствие разделения |
--generator-disorder-ratio |
0 | Процент данных с нарушенным порядком (задержанных). Диапазон: 0–100. По умолчанию 0 (без задержки). Используется для моделирования реальной задержки |
--generator-empty-value-ratio |
90 | Процент пустых значений в каждой строке. Диапазон: 0–100. По умолчанию 90 (90% пустых), имитирует разреженные временные ряды |
--generator-randomness |
OFF |
Уровень случайности данных: OFF/S/M/L. По умолчанию OFF (постоянные значения). Случайность возрастает от S до L |
--writer |
http |
Режим записи данных. Определяет, как mxgate принимает данные |
Дополнительные настраиваемые параметры доступны в разделе mxbench или при выполнении команды mxbench --help в командной строке.
Используйте следующую команду для настройки и запуска mxbench. Настройте значения параметров в соответствии со своей средой. Поскольку mxgate и mxbench находятся на одной машине, использование компонента записи "stdin" позволяет избежать сетевых накладных расходов за счёт использования Linux-пайпов — легковесно и эффективно.
[mxadmin@mdw ~]$ mxbench run \
--db-database "load_test" \
--db-database "load_test" \
--db-master-port 5432 \
--db-master-host "mdw" \
--db-user "mxadmin" \
--workspace "/tmp/mxbench/workspace" \
--watch \
--simultaneous-loading-and-query \
--table-name "test_table" \
--tag-num 100000 \
--metrics-type "float8" \
--total-metrics-count 10 \
--ts-start "2022-04-19 00:00:00" \
--ts-end "2022-04-19 00:01:00" \
--generator "telematics" \
--generator-batch-size 1 \
--generator-disorder-ratio 0 \
--generator-empty-value-ratio 0 \
--generator-randomness "OFF" \
--writer "stdin"
Если --watch не отключён, каждые 5 секунд будут выводиться обновления хода выполнения. После завершения вы увидите примерно такой вывод:
┌───────────────────────────────────────────────────────┐
│ Summary Report for STDIN Writer │
├─────────────────────────────────┬─────────────────────┤
│ start time: │ 2022-07-21 15:14:08 │
├─────────────────────────────────┼─────────────────────┤
│ stop time: │ 2022-07-21 15:14:27 │
├─────────────────────────────────┼─────────────────────┤
│ size written to MxGate (bytes): │ 695333400 │
├─────────────────────────────────┼─────────────────────┤
│ lines inserted: │ 6000000 │
├─────────────────────────────────┼─────────────────────┤
│ compress ratio: │ 5.399120 : 1 │
└─────────────────────────────────┴─────────────────────┘
Объяснение отчёта компонента записи:
| Имя параметра | Описание |
|---|---|
| start time | Время начала загрузки данных |
| stop time | Время окончания загрузки данных |
| size written to MxGate (bytes) | Общий объём отправленных в mxgate байтов |
| lines inserted | Количество вставленных строк данных |
| compress ratio | Коэффициент сжатия: объём, записанный в mxgate, по сравнению с фактическим размером таблицы в базе данных |
Фактическое время выполнения зависит от общего объёма данных и производительности машины. Пока включён watch, каждые 5 секунд будет выводиться текущий прогресс, позволяя отслеживать скорость и продолжительность записи.
Примечание!
mxbenchвыполняется непрерывно до полной загрузки всех данных отts-startдоts-end. Вы можете нажатьCtrl+C, чтобы прервать выполнение досрочно.
Если длинные командные строки кажутся неудобными, создайте конфигурационный файл mxbench.conf, поместите в него параметры и выполните:
[mxadmin@mdw ~]$ mxbench --config mxbench.conf
Примечание!
Во время загрузки данных может возникнуть «зависание» — логи продолжают выводиться, но реального прогресса нет. Не паникуйте. Выполните следующую команду для проверки логов и диагностики:cd ~/gpAdminLogs/.
[mxadmin@mdw ~]$ mxbench run \
--db-database "load_test" \
--db-master-port 5432 \
--db-master-host "mdw" \
--db-user "mxadmin" \
--workspace "/tmp/mxbench/workspace" \
--watch \
--simultaneous-loading-and-query \
--table-name "test_table2" \
--tag-num 100000 \
--metrics-type "float8" \
--total-metrics-count 100 \
--ts-start "2022-04-19 00:00:00" \
--ts-end "2022-04-19 00:01:00" \
--generator "telematics" \
--generator-batch-size 1 \
--generator-disorder-ratio 0 \
--generator-empty-value-ratio 0 \
--generator-randomness "OFF" \
--writer "stdin"
Вывод после завершения:
┌───────────────────────────────────────────────────────┐
│ Summary Report for STDIN Writer │
├─────────────────────────────────┬─────────────────────┤
│ start time: │ 2022-07-21 15:19:48 │
├─────────────────────────────────┼─────────────────────┤
│ stop time: │ 2022-07-21 15:21:02 │
├─────────────────────────────────┼─────────────────────┤
│ size written to MxGate (bytes): │ 5555333400 │
├─────────────────────────────────┼─────────────────────┤
│ lines inserted: │ 6000000 │
├─────────────────────────────────┼─────────────────────┤
│ compress ratio: │ 25.519937 : 1 │
└─────────────────────────────────┴─────────────────────┘
[mxadmin@mdw ~]$ mxbench run \
--db-database "load_test" \
--db-master-port 5432 \
--db-master-host "mdw" \
--db-user "mxadmin" \
--workspace "/tmp/mxbench/workspace" \
--watch \
--simultaneous-loading-and-query \
--table-name "test_table3" \
--tag-num 100000 \
--metrics-type "float8" \
--total-metrics-count 1000 \
--ts-start "2022-04-19 00:00:00" \
--ts-end "2022-04-19 00:01:00" \
--generator "telematics" \
--generator-batch-size 1 \
--generator-disorder-ratio 0 \
--generator-empty-value-ratio 0 \
--generator-randomness "OFF" \
--writer "stdin"
Вывод после завершения:
┌───────────────────────────────────────────────────────┐
│ Summary Report for STDIN Writer │
├─────────────────────────────────┬─────────────────────┤
│ start time: │ 2022-07-21 15:22:27 │
├─────────────────────────────────┼─────────────────────┤
│ stop time: │ 2022-07-21 15:33:40 │
├─────────────────────────────────┼─────────────────────┤
│ size written to MxGate (bytes): │ 54305333400 │
├─────────────────────────────────┼─────────────────────┤
│ lines inserted: │ 6000000 │
├─────────────────────────────────┼─────────────────────┤
│ compress ratio: │ 47.488209 : 1 │
└─────────────────────────────────┴─────────────────────┘
На основе приведённых выше отчётов записи мы представляем ниже наглядный график сравнения. Он демонстрирует высокую производительность загрузки данных в YMatrix и её масштабируемость при увеличении числа метрик. Эти данные помогут вам принимать обоснованные решения о количестве метрик при реальном развёртывании.
Данные временных рядов состоят из помеченных временем точек — каждая представляет значение метрики в конкретный момент. Без временных меток данные нельзя считать временными рядами. Понимание структуры точек данных поможет интерпретировать приведённый выше график.
По оси X показаны различные масштабы метрик (total-metrics-count). По оси Y показана пропускная способность записи, то есть количество точек данных, записываемых в секунду. По мере увеличения числа метрик пропускная способность растёт быстро, но темпы роста замедляются при большем количестве метрик. Тем не менее, YMatrix сохраняет скорость записи на уровне миллионов. Вместо мучительной построчной вставки с помощью INSERT, почему бы не попробовать YMatrix на высокой скорости?