Как выстроить процессы тестирования для продукта, под управлением которого находится более 500 тысяч устройств — и не потратить всю прибыль на содержание штатной команды инженеров? Наш кейс — ответ на этот вопрос.
Рассказываем, как помогли разработчику безналичных технологий протестировать производительность TMS для администрирования POS-терминалов — и научили команду делать это самостоятельно.
О проекте
Клиент
Индустрия
Продукт
Результаты
- Максимальная производительность системы найдена на 120% от уровня нагрузки промышленной среды.
- Обнаружено узкое место — ограничение сетевого канала 200 Мбит/сек.
- Заказчик получил рекомендации для усовершенствования системы.
- Мы передали компетенции заказчику и он научился проводить нагрузочное тестирование самостоятельно.
- Выстроенные процессы тестирования позволили клиенту сэкономить ФОТ на формирование собственного центра компетенций и в максимально короткие сроки определить предельную производительность ПО. Полученный опыт может быть повторно использован.
Исходные данные
К компании «Перфоманс Лаб» обратился клиент, специализирующийся на технологиях безналичных платежей для банков и бизнеса. Ему необходимо было оценить производительность TMS для администрирования POS-терминалов, которые мы видим каждый день в магазинах и ресторанах. Их, в свою очередь, в эти точки поставляют банки — клиенты заказчика. Среди заказчиков компании — крупные организации, и количество терминалов, которые они эксплуатируют, может достигать более миллиона.
TMS позволяет хранить единую базу параметров терминалов, удаленно изменять их и обновлять ПО. В определенный момент устройств стало так много, что без нагрузочного тестирования уже было не обойтись: возрастающая сложность распределенного продукта несла риск сбоев или медленной работы в промышленной среде. Нужно было выяснить, сколько терминалов можно подключить к TMS, чтобы она не «развалилась» под нагрузкой.
Кроме того, без такой проверки компания не могла выстроить прозрачные отношения с клиентом и сформировать SLA с точки зрения производительности. Одной из наших задач помимо тестов стала выработка требований к производительности, где были бы указаны важные для клиента показатели: время отклика терминала, допустимый процент ошибок при проведении тестов, максимально допустимая утилизация аппаратных ресурсов при проведении тестов.
Ранее заказчик не проводил нагрузочного тестирования, поэтому у него не было необходимых данных (доступа к статистике клиентов) и инфраструктуры. Но выстраивать процессы с нуля было бы невыгодно: найм мог обойтись в миллионы рублей в год. В связи с этим еще одной нашей задачей стало обучение сотрудников заказчика, чтобы они смогли проводить дальнейшие тесты самостоятельно.
Проведение тестов на платформе Boomq
В этом проекте мы использовали инструмент Boomq — собственную разработку «Перфоманс Лаб». Это единственный в России low-code инструмент для нагрузочного тестирования. Он позволяет создавать тесты, управлять ими, получать детальные отчеты по итогам. И всё это — в режиме, доступном даже новичку: для нас было важно, чтобы клиент смог пользоваться этим инструментом в дальнейшем.
«Среди преимуществ Boomq — сравнение результатов тестов, тренд-отчеты, встраивание CD/CD, техническая поддержка. Он очень юзер-френдли».
тимлид проекта
«Boomq — инструмент, который уже работает из облака. Когда нужно протестировать приложение, развернутое в том же Yandex Cloud, это очень удобно: не нужно развертывать виртуальные машины для генерации нагрузки. Что здорово, ведь в данном проекте мы сэкономили ресурсы клиента. Кроме того, Boomq на 100% совместим с JMeter».
владелец продукта Boomq
С помощью этого инструмента мы провели тестирование для поиска максимальной производительности, а также выявили дефекты, снижающие ее. В дальнейшем Boomq может помочь заказчику усовершенствовать процесс нагрузочного тестирования и автоматизировать его, не привлекая сторонних экспертов.
Решение
Мы выделили несколько главных дефектов, которые тормозили работу системы.
Во-первых, в логах была зафиксирована ошибка OutOfMemoryException, из-за которой приложение постоянно перезапускалось и становилось недоступным. Анализ показал, что Garbage Collector не очищал сессии загружаемых терминалов — из-за этого в базе данных находилось много одинаковых копий ПО. Для того чтобы решить эту проблему, в ряде мест мы устранили излишний расход памяти и добавили ключ для автоматического создания дампа памяти («снимка» состояния системы в конкретный момент времени) в строку запуска сервиса. Кроме того, мы добавили визуализацию метрик HikariCP для мониторинга соединений. И наконец, отключили в настройках трассировку сессий, занимавшую место.
Второй важной проблемой стало принудительное завершение Java-процесса из-за процесса OOM Killer ядра Linux, что также приводило к недоступности приложения. Когда оперативная память была исчерпана, механизм ядра освобождал ее за счет принудительного завершения некоторых процессов. Утилизация оперативной памяти в момент рестарта приближалась к 100% — это было обусловлено большим количеством выделенной памяти под Java: ОС Linux не хватало ресурсов для фоновых процессов системы. Мы приняли решение уменьшить объем памяти под Java Heap с 12 Гб до 4 Гб — рестарт приложения под нагрузкой прекратился.
Третьей из основных проблем стало превышение SLA по времени отклика, которое мы зафиксировали на ступени стабильной нагрузки 130% от профиля. Такой показатель мог привести к некомфортной задержке работы для пользователей. Узким местом стал сетевой канал, выделенный под сервер приложения: его пропускная способность составляет 200Мбит/сек. Мы порекомендовали клиенту расширить сетевой канал и провести дополнительные тесты, чтобы проверить влияние текущего ограничения на производительность системы.
Еще одна проблема — повторные запросы терминала на обновление ПО через Wizard. Устройство скачивало повторно один и тот же файл из-за того, что настройки терминала оставались прежними: мы обсудили с разработчиком, что Installation_id должен меняться после загрузки ПО.
Итоги
Проект занял около двух месяцев. Максимальная производительность системы была достигнута при нагрузке 120% от профиля. Результаты тестирования помогли заказчику внести прозрачные изменения в план развития продукта.
Наша команда сформулировала для клиента ряд рекомендаций, чтобы в будущем он смог избежать проблем с производительностью системы. Мы предложили заказчику:
Но это не всё: после работ команда «Перфоманс Лаб» провела обучение сотрудников компании. Теперь они могут самостоятельно проводить дальнейшие тесты с помощью Boomq. Предлагая клиентам этот инструмент, мы предлагаем не просто разовую услугу по нагрузочному тестированию, а новый взгляд на процессы.
Во-первых, Boomq помогает автоматизировать и уменьшить затраты на нагрузочное тестирование, а во-вторых, сделать процесс прозрачнее и упростить тесты: в тех случаях, когда проверку проводят постоянно, с этим инструментом можно легко восстановить скрипты, которые использовались в прошлый раз.
Почему это важно
«Производительность сервисов для безналичных платежей помогает оптимизировать издержки, которые несет финансовое учреждение при эксплуатации. Тем самым можно увеличить количество устройств и точек для приема платежей, отсрочить процесс закупки серверного оборудования и не тратить на это направление больше денег, чем предусмотрено в бюджете. Доработки будут стоить существенно дороже».
директор по развитию
Компания, которой мы помогли, — ведущий эксперт в области таких решений для банков и бизнеса. Она обладает уникальными для рынка компетенциями в области платежного программного обеспечения: от обработки транзакций с использованием стандартных банковских карт до создания продуктов с использованием QR-платежей, биометрических транзакций и сложных интегрированных решений.
Наш кейс показывает, что услуги по нагрузочному тестированию — во всех отношениях отличное решение для ведущих игроков рынка. Проявляя гибкость и делегируя подобные задачи, они могут выпускать новые продукты без лишних трат. В нашем случае данные о производительности системы помогли скорректировать процесс разработки и усовершенствовать продукт так, чтобы он соответствовал ожиданиям конечного заказчика.
Нагрузочное тестирование —
это рост и гарантии
Держите бизнес под контролем — обратитесь
к инженерам «Перфоманс Лаб»