Обзор тестирования с помощью нагружающих акторов
Тестирование производительности системы является важным этапом добавления изменений в ядро YDB. С помощью нагрузочного тестирования вы можете:
- определить показатели производительности и сравнить их со значениями до изменений;
- проверить работоспособность системы на высоких или пиковых нагрузках.
Сама по себе задача нагрузить высокопроизводительную распределенную систему является нетривиальной. Часто разработчику приходится запускать несколько инстансов клиента, чтобы добиться требуемой загрузки сервера. YDB реализует простой и удобный механизм подачи нагрузки — нагружающие акторы. Акторы создаются и запускаются в самом кластере, таким образом не нужно привлекать дополнительные ресурсы для запуска клиентов. Нагружающие акторы могут быть запущены на произвольных узлах кластера — на одном, на всех или только на выбранных. Вы можете создать любое количество акторов на любом из узлов.
Нагружающие акторы позволяют тестировать как систему в целом, так отдельные ее компоненты:
Tablet
Tablet
Например, вы можете подать нагрузку на Distributed Storage без задействования слоев таблеток и Query Processor. Таким образом можно изолированно тестировать отдельные слои системы и эффективно находить узкие места. Комбинация акторов разных типов позволяет запускать множество видов нагрузки.
Примечание
Функциональность находится в разработке, исходный код доступен в ветке main репозитория YDB. О том, как собрать YDB из исходного кода, читайте в инструкции.
Типы акторов
Тип | Описание |
---|---|
KqpLoad | Подает нагрузку на слой Query Processor и нагружает все компоненты кластера. |
KeyValueLoad | Нагружает Key-value таблетку. |
StorageLoad | Нагружает Distributed Storage без задействования слоев таблеток и Query Processor. |
VDiskLoad | Тестирует производительность записи на VDisk. |
PDiskWriteLoad | Тестирует производительность записи на PDisk. |
PDiskReadLoad | Тестирует производительность чтения с PDisk. |
PDiskLogLoad | Тестирует корректность вырезания из середины лога PDisk. |
MemoryLoad | Аллоцирует память, полезен при тестировании логики. |
Stop | Останавливает все акторы, либо только указанные. |
Запуск нагрузки
Запустить нагрузку можно с помощью следующих инструментов:
- Embedded UI кластера — позволяет создать по конфигурации и запустить нагружающий актор либо на текущем узле, либо сразу на всех узлах тенанта.
- Утилита
ydbd
— позволяет на любой узел кластера отправить конфигурацию актора с указанием, на каких узлах необходимо создать и запустить актор.
В качестве примера рассмотрим создание и запуск актора KqpLoad. Актор обращается к БД /slice/db
как к key-value хранилищу в 64 потока, длительность нагрузки — 30 секунд. Перед началом работы актор создает необходимые таблицы, после окончания удаляет их. При создании актору будет автоматически присвоен тег. Этот же тег будет присвоен и результату теста.
-
Откройте страницу управления нагружающими акторами на узле (например,
http://<address>:8765/actors/load
, гдеaddress
— адрес узла кластера, на котором нужно запустить нагрузку). -
В поле ввода/вывода вставьте конфигурацию актора:
KqpLoad: { DurationSeconds: 30 WindowDuration: 1 WorkingDir: "/slice/db" NumOfSessions: 64 UniformPartitionsCount: 1000 DeleteTableOnFinish: 1 WorkloadType: 0 Kv: { InitRowCount: 1000 PartitionsByLoad: true MaxFirstKey: 18446744073709551615 StringLen: 8 ColumnsCnt: 2 RowsCnt: 1 } }
-
Чтобы создать и запустить актор, нажмите кнопку:
- Start new load on current node — нагрузка будет запущена на текущем узле.
- Start new load on all tenant nodes — нагрузка будет запущена на всех узлах тенанта.
В поле ввода/вывода появится следующее сообщение:
{"status":"OK","tag":1}
status
— статус запуска нагрузки;tag
— тег, который был присвоен нагрузке.
-
Создайте файл с конфигурацией актора:
NodeId: 1 Event: { KqpLoad: { DurationSeconds: 30 WindowDuration: 1 WorkingDir: "/slice/db" NumOfSessions: 64 UniformPartitionsCount: 1000 DeleteTableOnFinish: 1 WorkloadType: 0 Kv: { InitRowCount: 1000 PartitionsByLoad: true MaxFirstKey: 18446744073709551615 StringLen: 8 ColumnsCnt: 2 RowsCnt: 1 } } }
-
NodeId
— идентификатор узла, на котором нужно запустить актор. Чтобы указать несколько узлов, перечислите их в отдельных строках:NodeId: 1 NodeId: 2 ... NodeId: N Event: { ...
-
Event
— конфигурация актора.
-
-
Запустите актор:
ydbd load-test --server <endpoint> --protobuf "$(cat <proto_file>)"
endpoint
— grpc-эндпоит узла (например,grpc://<address>:<port>
, гдеaddress
— адрес узла,port
— grpc-порт узла).proto_file
— путь к файлу с конфигурацией актора.
Просмотр результата тестирования
Результаты тестирования можно просмотреть с помощью Embedded UI. Описание выводимых параметров смотрите в документации соответствующего актора.
-
Откройте страницу управления нагружающими акторами на узле (например,
http://<address>:<port>/actors/load
, гдеaddress
— адрес узла,port
— http-порт мониторинга узла, на котором была запущена нагрузка). -
Нажмите кнопку Results.
Будут отображены результаты завершенных тестирований. Найдите результат с соответствующим тегом.