Аналитика и комментарии

29 декабря 2021

Ксения ВОРОНЧАГИНА, Перфоманс Лаб: «Как не допустить падения банковского мобильного приложения под нагрузкой»

Главной темой беседы Национального банковского журнала с заместителем руководителя направления нагрузочного тестирования компании Перфоманс Лаб Ксенией Ворончагиной стало нагрузочное тестирование мобильных приложений ДБО. Эксперт поделилась с нашим изданием деталями и особенностями этого процесса.

NBJ: Ксения, когда возникает необходимость проводить нагрузочное тестирование мобильного приложения?

К. Ворончагина: Обычно банки пред­лагают клиентам использовать и web-версию, и мобильное приложение. С каждым годом мобильные приложения набирают всё большую популярность, и они становятся основной инструментом работы с ДБО. Именно поэтому важно оценивать нагрузку от них.

В первую очередь хочу оговорить, что дальше речь пойдёт о нагрузочном тестировании back-end части банковской системы. Быстродействие работы непосредственно самого мобильного приложения на устройстве и его профилирование – это другая задача.

Потребность в нагрузочном тестировании мобильного приложения ДБО возникает, если большой поток пользователей работает через мобильный клиент с вашей высоконагруженной системой. Чтобы объективно оценить, большой ли поток, необходимо понять, входят ли операции от мобильного клиента в ваш ТОП запросов.

Нагрузочное тестирование проводится самыми высокоинтенсивными операциями. Обычно 20% всего количества операций составляют 80% всей нагрузки. Если в эти 20% входят запросы от мобильного приложения, то стоит основательно задуматься о таком тестировании.

NBJ: В чём разница между нагрузочным и функциональным тестированием мобильной версии?

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

NBJ: А в чём тогда отличие тестирования мобильного приложения от браузерной версии?

К. Ворончагина: Глобально – ни в чём. Главное при нагрузочном тестировании – перехватить трафик запросов от клиента к серверам приложений банка. Если говорить про браузерную версию, то запросы можно увидеть в инструменте разработчика, например, в Google Chrome.

При записи трафика от мобильного приложения всё немного сложнее. Нужно развернуть прокси на компьютере и настроить телефон на него. На вашем компьютере необходимо перехватить этот перенаправленный трафик с помощью сниффера. Это может быть Fiddler.

Альтернативный вариант – поставить на ваш компьютер эмулятор мобильного телефона. В таком случае настраивать proxy на вашем смартфоне не понадобится.

Процесс тестирования мобильного клиента более сложный, но вполне реализуемый. Потребуется только немного больше времени.

Далее всё аналогично браузерной версии. Полученный трафик преобразуется в нагрузочный скрипт и проводится тестирование.

NBJ: В чём особенность нагрузочного тестирования мобильного приложения?

К. Ворончагина: Тут есть два момента. Первый – вам может потребоваться отдельная сборка мобильного приложения, которая будет направлять запросы на ваш тестовый контур. Как правило, нагрузочное тестирование проводится на копии промышленного стенда. Для полноценного тестирования необходимо реализовать не только ReadOnly операции. В таком случае возникают трудности с вычисткой тестовых данных из реальной системы. Это одна из проблем проведения тестирования на продуктивной среде, поэтому, как правило, используют копию.

Вторая – могут возникнуть трудности, если ваше приложение используют ssl-pinning. Приложение при записи трафика может выдавать ошибку, ссылаясь на проблемы с подключением. Но это можно обойти.

NBJ: Почему важно тестировать мобильное приложение, а не только браузерную версию?

К. Ворончагина: Потому что трафик от мобильного приложения и от браузера может серьёзно отличаться, нагрузка идёт по-разному. Соответственно, воспроизводимая при тестировании нагрузка не будет отражать реальной картины. Это может привести к получению нерелевантных значений. Что, в свою очередь, сведёт эффективность тестирования к нулю.

NBJ: На какие вопросы может ответить нагрузочное тестирование ДБО?

К. Ворончагина: Основной вопрос – это какая максимальная производительность back-end части, т.е. как много пользователей могут работать с системой. Кроме того, можно понять, когда наступит дата смерти системы. Это несложно спрогнозировать. Например, максимальное количество пользователей 1000, в настоящий момент с системой работает 500. Условно говоря, прирост клиентов в месяц – 100. Понятно, что через 5 месяцев наступит дата смерти системы, она не выдержит нагрузки.

Нагрузочное тестирование позволяет понять, какие проблемы ограничивают производительность системы в настоящее время. Есть специальный термин для их обозначения – bottleneck. После устранения проблем целесообразно провести повторное тестирование с тем, чтобы убедиться, что система работает нормально, и дата её смерти передвинулась на отдалённое будущее.

NBJ: В таком случае интересно узнать, с какими bottleneck вы сталкиваетесь при тестировании?

К. Ворончагина: В первую очередь, ограничивать производительность могут вычислительные мощности серверов. Вопросов здесь немало. Например, как много у вас оперативной памяти, сколько серверов, дисков, насколько они быстрые. Соответственно, если ограничение производительности в них, то нужно понять, в каком именно ресурсе это происходит. К сожалению, не всегда проблемы производительности решаются увеличением мощности серверов. Безусловно, самый простой, но при этом дорогой способ – докупить «железо». Но бывает так, что дополнительные ресурсы не приведут к увеличению производительности системы.

Кроме этого, существует ещё ряд вопросов. Во-первых, какие транзакции и какие действия пользователя происходят медленнее всего, когда одновременных пользователей в системе много. Например, вход в приложение осуществляется очень медленно, а перевод денег – очень быстро. Либо наоборот. Это служит маркёром проблемных мест в вашем коде. Следует обратить внимание на такие операции и провести профилирование.

Во-вторых, какие операции чаще всего дают ошибки при высоких нагрузках. Например, перевод денег работает всегда правильно, а подключение кэшбэка часто выдаёт ошибки.

Бывает, что не хватает коннектов от back-end сервера к серверу базы данных, или есть проблемы в конкретных sql запросах на сервере базы данных.

Далее, может не быть достаточного количества тредов. Речь идёт о том, что высоконагруженные приложения работают в несколько потоков. Для того, чтобы повысить производительность, запросы обрабатываются параллельно, а не последовательно. Соответственно, нужно поднять количество параллельных потоков для того, чтобы сервер обрабатывал информацию быстрее, и тогда производительность вырастет.

Ещё есть такая проблема, как невысвобождение или утечка ресурсов. При росте нагрузки происходит большая утилизация «железных» ресурсов. Часто такая проблема случается с оперативной памятью. Со временем система начинает деградировать, и возникает очередной bottleneck.

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

Беседовала: Оксана Дяченко

Материал также опубликован в печатной версии Национального банковского журнала №12 (206) декабрь 2021

Поделиться:
 

Возврат к списку