30 тысяч пользователей одновременно: как мы тестировали корпоративный портал «1С-Битрикс24: Enterprise»

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

Решения для больших компаний обычно должны выдерживать высокие нагрузки. 

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

Недавно мы вместе с Selectel провели нагрузочное тестирование корпоративного интранет-портала «1С-Битрикс24» в редакции Энтерпрайз. Хотим рассказать, как мы это делали и какие получили результаты.

Для чего нужен корпоративный портал?

Корпоративные порталы в компаниях помогают решать кучу задач. На них могут храниться всевозможные информационные документы для сотрудников. Порталы помогают автоматизировать многочисленные рутинные процессы вроде оформления заявок и запросов. Могут быть витриной для кадровых и ИТ-сервисов, выступать в роли медиа-хранилища и досок объявлений. А в сочетании с мобильными приложениями корпоративные порталы превращаются в инструмент быстрого информирования десятков тысяч сотрудников — где бы они ни находились. 

О том, что собой представляет «1С-Битрикс24: Enterprise» — наша платформа для создания корпоративных порталов — мы здесь рассказывать не будем, подробно о ней рассказано здесь. А теперь — о тестировании.

Тестовый стенд

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

Для нагрузочного тестирования образца корпоративного портала мы создали кластер из 5 серверов. Все заботы об оборудовании взяла на себя Selectel. Машины были двух конфигураций:

  1. Сервер баз данных (2 шт): Intel Xeon W-2255, 3,7 ГГц, 10 ядер; 128 ГБ DDR4; 2 × 960 ГБ NVMe +2 × 8 ТБ HDD.

  2. Сервер приложений (3 шт): Intel Xeon E-2236, 3,4 ГГц, 6 ядер; 32 ГБ DDR4; 2 x 480 ГБ SSD.

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

Затем настроили ПО на серверах с помощью готовой сборки «1С-Битрикс: Виртуальная машина» для Linux 7.4.3. В кластере мы применили два раздельных пула: один для балансировки HTTP-запросов, работы веб-приложения и сервера мгновенных сообщений; второй для работы баз данных и системы кеширования.

Общая схема тестового стенда:

Из чего состоял стенд:

app1, app2, app3

Кластер из трех серверов приложений (веб-серверов): CentOS 7.9, Nginx 1.18, Apache 2.4, PHP 7.3. Балансировка нагрузки выполнялась с помощью Nginx на app1.

db1, db2

Кластер из двух серверов баз данных: CentOS 7.9, Percona Server (MySQL) 8.0.22, конфигурация Master / Slave.   

storage of metrics

Мониторинг серверов, сбор метрик с Nginx, mysql-percona, метрики по процессору, памяти и т.п. На основе Zabbix 4.4.

load server

Сервер генерации нагрузки с использованием Jmeter 5.3.3.

collection of indicators

Связка из высокопроизводительной базы данных InfluxDB для получения и хранения данных от Jmeter и Grafana для отображения и визуализации результатов теста.   

На стенде мы развернули типовое коробочное решение «1С-Битрикс24: Enterprise» версии 20     с последними обновлениями, с использованием технологии кластеризации в модуле «Веб-кластер». В базе данных создали записи для 111 304 сотрудников, распределив их по 67 структурным подразделениям. Тестовые данные, наполнявшие серверы на момент запуска последнего теста, содержали: 590 тыс. сообщений в живой ленте, 540 тыс. комментариев, 40 тыс. новостей, 180 тыс. задач, 415 тыс. мгновенных сообщений. 

Нагрузка и методика тестирования

Тестовая нагрузка на портал должна была моделировать одновременную работу не менее чем 1/3 от всех сотрудников (30 000 пользователей). Нагрузку мы генерировали с помощью JMeter 5.3.3. Результаты тестов сохраняли в InfluxDB — эта БД выдерживает большую нагрузку на запись и чтение. Графики строили с помощью Grafana, а серверы мониторили в Zabbix. 

Мы поставили перед собой задачу, чтобы тесты проходили без ошибок для 1, 5, 10, 20 и 30 тыс. одновременных пользователей (потоков JMeter). При этом у нас не было цели выжать максимальные значения RPS, потому что для корпоративных порталов это не так важно. Куда важнее было проверить безотказность и стабильность в условиях пиковых нагрузок.

Для тестирования выбрали 29 сценариев в 13 функциональных блоках. Цепочки были характерные для типового интранет-портала: авторизация, живая лента, поиск, чат (групповой и один на один), задачи, календарь, новости, фотогалерея, сотрудники, профиль, бизнес-процессы, рабочие группы. Для каждого сценария мы подобрали веса, учитывающие работу различных пользователей на портале и долю каждого из функциональных блоков в общей нагрузке.

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

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

Пример цепочки сценария тестирования в JMeter.
Пример цепочки сценария тестирования в JMeter.

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

Тестирование проводили итерационно, и в каждой итерации:

  • выполняли один или несколько тестовых прогонов;    

  • оптимизировали стенд при возникновении ошибок;    

  • анализировали объём сгенерированных сущностей и их реальности, настраивали веса типовых операций в сценарии;    

  • финально прогоняли тест 2-3 часа, фиксировали результаты и переходили к следующей итерации.

Во время тестирования мы оптимизировали некоторые настройки типового решения:

  • увеличили время кеширования компонентов (дни рождения, важное) на главной странице портала;    

  • отключили типовой компонент «кто на сайте» и компонент статистики;

  • изменили настройки ряда констант в dbconn.php;

  • выполнение всех агентов перенесли на Cron (https://dev.1c-bitrix.ru/community/webdev/user/8078/blog/2755/);

  • в главном модуле включили быструю отдачу файлов через nginx;    

  • в модуле push&pull включили использование последней версии сервера мгновенных сообщений.

Также были внесены изменения в продукт, позволяющие повысить производительность отдельных компонентов. 

В итоге нам удалось успешно «прогнать» все тесты согласно плану тестирования. В финальном тесте на 30 тысяч одновременных пользователей (потоков jMeter) удалось добиться стабильного и быстрого отклика системы. 

Результаты

Портал обеспечивал работу одновременно 30 тыс. пользователей из общего количества в 111 тыс. При этом в 95 % обращений длительность ответа портала не превышала 0,9 с.

Суточный запуск данного теста обеспечивает генерацию в рамках портала:

  • 936 новостей;

  • 110 736 сообщений в живой ленте;

  • 112 440 комментариев;

  • 10 560 чатов;

  • 81 264 мгновенных сообщений;

  • 55 128 заданий бизнес-процессов;

  • 21 888 задач;

  • 8 808 документов;

  • 2 208 рабочих групп и проектов;

  • 6 984 встреч в календарях;

  • 57 240 уведомлений.

При обработке запросов от 30 тысяч пользователей кластер работал вовсе не на пределе возможностей, у него был приличный запас по производительности — 30-40 %. Поэтому он способен будет выдержать всплески посещаемости без увеличения длительности отклика. А повышенная отказоустойчивость кластера позволяет проводить плановые или аварийные работы без перебоев в обслуживании.

Время отклика: 95 процентиль для некоторых страниц и их трафик в рамках теста.
Время отклика: 95 процентиль для некоторых страниц и их трафик в рамках теста.

По результатам тестирования мы решили внедрить в ближайших обновлениях платформы такие оптимизации:

  • добавили индекс для сортировки в справочнике компаний;    

  • изменили параметры кеширования некоторых стандартных объектов;

  • добавили дополнительный индекс для проверки прав календаря;

  • изменили метод выборки списка групп в Kanban-доске;

  • оптимизировали очистку очереди с подпиской на уведомления изменений различных сущностей; 

  • добавили индекс сортировки бизнес-процессов, отключили постраничную навигацию;    

  • уменьшили отсечку по времени для построения списка в живой ленте;    

  • при отправке счетчиков убрали ожидание получения блокировки БД;    

  • реализовали единый запрос для получения информации по количеству лайков для всех сообщений и комментариев к ним в живой ленте, выводимых в данный момент на странице;    

  • внедрили механизм очереди при отправке уведомлений при добавлении сообщений в живую ленту;    

  • добавили индексы для репликации;    

  • оптимизировали очистку тегированного кеша.

Источник: https://habr.com/ru/company/bitrix/blog/555232/

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

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

История о том, как сложный формат работы в непростых условиях может подтолкнуть к идее для стартапа. В прошлом году я работал в одном стартапе, в роли фулстек-разработчи...
Новая вредоносная программа Silver Sparrow («Серебряный воробей»), обнаруженная почти на 30 000 компьютерах Mac по всему миру, привлекла внимание специалистов по безопасности. Причин ...
HighLoad++ Moscow 2018, зал «Конгресс-холл». 9 ноября, 15:00 Тезисы и презентация: http://www.highload.ru/moscow/2018/abstracts/4066 Юрий Насретдинов (ВКонтакте): в докладе будет рассказано...
Тема статьи навеяна результатами наблюдений за методикой создания шаблонов различными разработчиками, чьи проекты попадали мне на поддержку. Порой разобраться в, казалось бы, такой простой сущности ка...
Некоторое время назад мне довелось пройти больше десятка собеседований на позицию php-программиста (битрикс). К удивлению, требования в различных организациях отличаются совсем незначительно и...