Сказка про Гену, Чебурашку и тестирование производительности

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

(Проект и персонажи вымышлены, любые совпадения случайны)

- Чебуршка, нам нужно начать поставки нашей новой системы по мониторингу и управлению апельсиновыми плантациями через три месяца, а данных, какую максимальную нагрузку сможет поддерживать наша система - нет! Да и в стабильности работы нашей системы продолжительное время мы не уверены...

- Геннадий, давай я тебе напомню, что у нас не простой веб сервис, который можно нагрузить запросами при помощи JMeter и получить показатель в секунду. У нас реактивная система по обработке потока данных и принятию решений в реальном времени, работающая на Raspberry Pi, которая должна решать задачи по мониторингу, управлению и увеличению эффективности апельсиновой плантации с минимальным энергопотреблением. Давай я тебе напомню архитектуру нашего приложения:

(Чебурашка быстро нарисовал на доске следующую диаграмму для Гены)

Архитектура системы управления апельсиновой плантацией
Архитектура системы управления апельсиновой плантацией

- Ты смеешься надо мной, Чебурашка?! Я же на английском ничего не понимаю!

- Управляете интернациональной корпорацией, Геннадий... Пора бы уже... Давай ближе к теме. У нас имеется система по контролю и мониторингу апельсиновой плантации, которая должна располагаться на территории данной плантации, работать без подключения к электрической сети, на электроэнергии, получаемой от солнечных панелей. Система в режиме реального времени должна обрабатывать сигналы с датчиков (например влажность почвы конкретного дерева), и автоматически отправлять команды контроллерам (к примеру, системы полива этого апельсинового дерева). Также система позволяет подключаться к ней с внешнего устройства (ноутбук, планшет, смартфон), с возможностью проверки общего состояния, изменения конфигурации и анализа данных.

- Чебурашка, я тебе вопрос о производительности задал! Я не просил пересказывать отрывок из презентации для инвесторов... Давай ближе к теме!

- К этому я и подвожу. Исходя из специфики и отсутствия четких требований по производительности со стороны заказчика, производительность нашей системы можно будет охарактеризовать ответами на следующие вопросы:

  1. Какой максимальный размер апельсиновой плантации, управление которой наша система поддерживает?

  2. Как продолжительно система может работать на плантации данного размера?

  3. Как система ведет себя в критичных условиях (пиковая нагрузка, нехватка места в хранилище, отключение от источника питания) и как успешно восстанавливается?

Прежде чем перейти к решению данных вопросов, давайте разберем виды тестов производительности:

Throughput
Тесты скорости системы

Load
Нагрузочные тесты

Peak/Stress/Endurance
Стресс тесты

Goal
Цель

How much data per second can the system handle? 
(Пропускная способность системы)

How the system behaves under real-life load during the time? 
(Как система ведет себя при продолжительной нормальной нагрузке?)

What is the limit for the system?
(Как ведет себя система на пределе и где этот предел?)

Issues to find
Помогает найти проблемы

Bottlenecks
(Узкие места)

Memory leaks
(Утечки памяти)

Concurrency issues
(Проблемы конкурентной работы с данными)

High CPU / RAM / Disk / Network of individual component
(Избыточное потребление ресурсов)

Hardware issues, for example overheating
(Технические проблемы, например перегрев)

Data corruption
(Повреждение данных)

Hardware corruption
(Физические повреждения системы)

Recovery issues
(Проблемы восстановления после сбоев)

- Вот, Чебурашка, можешь ведь изъясняться и на русском, когда захочешь!

- Наша главная сложность, что мы не знаем в каких условиях будет находиться наша система у заказчика, также мы не знаем количественные и качественные показатели данных, которые будет потреблять система. И у нас нет реальной апельсиновой плантации рядом с офисом, чтобы проверить это. Мы можем эмулировать данные, но это может оказаться далеко от правды.

- Ты же умный парень, Чебурашка! Я помню, что когда ты задаешь мне вопрос, у тебя, как правило, уже есть варианты ответа. Не зря же я тебя назначил на должность архитектора с зарплатой в одну тысячу долларов в месяц! 

- Спасибо, что платите не апельсинами, как в прошлом году... Итак к делу. Я предлагаю установить прототип нашей системы на плантацию к заказчику и оставить ее работать в режиме записи данных с сенсоров и использования системных ресурсов на неделю. На основе этих данных мы сможем сконфигурировать эмуляторы и запустить тесты.

- Отлично, так и сделаем! Я согласую это с заказчиками прямо сегодня!

- Геннадий, давай я тебе расскажу об отдельном приложении, которое я разработал специально для проведения всех названных выше типов тестов производительности. Это приложение отвечает за запуск сценариев тестов, управление эмуляторами, сбор данных потребления ресурсов (CPU, Memory, Disk I/O, DIsk space usage, Network I/O) всей системой, так и отдельными компонентами, количество ошибок в логах, пропускную способность системы и целостность данных.

- Почему ты не использовал какое-либо готовое решение? Я слышал про такие инструменты для нагрузочного тестирования, как Gatling или Tank от Яндекса?

- Хороший вопрос. Я изучил возможности данных инструментов и нашел их недостаточно гибкими для наших задач. Было принято решение разработать систему с нуля. Коротко опишу данную систему:

Архитектура системы тестов производительности
Архитектура системы тестов производительности

Приложение тестов производительности поддерживает как тестирование всего приложения, включая UI (который, в нашем случае является толстым клиентом и выполняет определенное количество интенсивных операций с данными), так и отдельных частей и компонентов.

Через пару месяцев...

- Добрый день, Чебурашка! Какие результаты нагрузочных тестов?

- Добрый день, Геннадий! При помощи нашей системы тестов производительности мы смогли обнаружить и исправить множество дефектов и узких мест, также мы внедрили нагрузочные тесты в CI/CD Pipeline и мы запускаем их регулярно.

Мы можем сказать, что:

  1. Один экземпляр системы способен работать на плантации площадью до 5 гектаров с количеством деревьев до 1250 штук (Далее: "стандартные условия").

  2. Система с хранилищем в 128 Гб в стандартных условиях способна непрерывно работать более 1 месяца.

  3. При экстренном отключении, данные остаются на энергонезависимом хранилище. Система автоматически запуститься и продолжит работу при восстановлении питания.

- Приятно слышать, Чебурашка! Будем планировать поставку. Надеюсь, ты не собрался в отпуск после проделанной работы. Ты ведь и так там был не давно, в позапрошлом году. А нам теперь нужно будет срочно спроектировать следующую версию системы, которая сможет контролировать работу сборщиков урожая...

- Обсудим. Но это уже другая история...

Источник: https://habr.com/ru/post/554086/


Интересные статьи

Интересные статьи

Ошибки и баги могут возникнуть в любых программах, поэтому тестировщиков нанимают многие крупные компании, которые разрабатывают программное обеспечение. А еще — небольшие фирмы, ...
У тестировщика много возможностей повысить качество продукта и сделать работу команды комфортнее. Главное – обсуждать любые изменения с коллективом и внедрять только то, что удобно и ...
Часть 1. Про CPU В этой статье поговорим про счетчики производительности оперативной памяти (RAM) в vSphere. Вроде бы с памятью все более однозначно, чем с процессором: если на ВМ возника...
Основанная в 1998 году компания «Битрикс» заявила о себе в 2001 году, запустив первый в России интернет-магазин программного обеспечения Softkey.ru.
В «1С-Битрикс» считают: современный интернет-магазин должен быть визуально привлекательным, адаптированным для просмотра с мобильных устройств и максимально персонализированным с помощью технологии Бо...