В ноябре прошлого года МойОфис представила корпоративную почту нового поколения Mailion, разработанную при грантовой поддержке РФРИТ. Это тиражируемое решение для крупных организаций, которое разворачивается на собственных серверах клиента или на базе инфраструктуры доверенного партнера. Благодаря Cloud Native микросервисной архитектуре Mailion гарантирует высокую отказоустойчивость, быстрое самовосстановление и масштабируемость в период колебания нагрузок.

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

О том, как проходило тестирование и какие результаты мы получили — читайте под катом.

Определяем цели и готовимся к тесту


В ходе испытаний инженерам предстояло проверить гипотезу о стабильной работе системы под нагрузкой 6081 RPS (операций в секунду). Это эквивалентно действиям 600 тыс. пользователей, которые в течение дня отправляют и получают 1,14 млн писем.

Моделью бизнес-операций тестирования было предусмотрено, что пользователи могут:

  • Входить в систему;
  • Запускать программу-клиент электронной почты (при этом происходит подгрузка списка писем, отправка очереди писем и т.д.);
  • Переходить на вторую и третью страницу списка писем;
  • Отправлять новые письма;
  • Открывать входящие письма;
  • Переходить в календарь;
  • Создавать новые события и реагировать на них.

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

Также, например, модель нагрузки предполагает, что 40% пользователей (240 тыс.) ежедневно назначают встречи, в которых участвует по 3 человека. При этом в календаре пользователей в среднем присутствует по 4 встречи в день. Таким образом, система должна обрабатывать более 2,8 млн событий ежедневно. Каждое событие может содержать вложения, которые создают дополнительную нагрузку на систему.

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

В ходе проведения нагрузочных испытаний был использован сценарий масштабирования, который логически разбит не по бизнес-операциям, а по используемым в этих бизнес-операциях запросам. Логическое разбитие нагрузки по запросам вне бизнес-операций позволило получить максимально приближенное (с точностью вплоть до 98%) процентное соотношение конкретных запросов к общему количеству запросов. Целевая нагрузка взята с запасом в 100-150 RPS.

Приводим наш список тестируемых сервисных методов:
Название метода
Назначение
create_session
авторизация (создание сессии)
check_session
проверка сессии
get_profile
получение профиля пользователя
get_shared_entities
получение аккаунтов с предоставленным доступом
search
поиск пользователя
get_short_answers
получение настроек автоответов
save_drafted
сохранение черновика
send_drafted
отправка письма
build_message
чтение (открытие) письма
save_event
сохранение календарного события
get_objects_by_ids
получение данных объектов по идентификаторам
get_objects_sorted_filtered
получение списка цепочек писем
get_objects_by_time
получение списка календарных событий
get_tag_tree
получение списка папок или календарей
update_flags
проставление флага письма
get_settings
получение настроек
respond_invitation
подтверждение приглашения на событие
Согласно используемой модели загрузки по запросам, максимальный показатель частотности вызова задан для метода create_session (1450 RPS), минимальный — для метода save_event (13 RPS).

Подготовка к проведению нагрузочного сценария включала в себя следующие этапы:

  1. Создание пользователей.
  2. Создание сессии.
  3. Генерация писем во входящих через отправку самому себе и пользователям.
  4. Сохранение черновика с вложением.
  5. Создание одиночного события с 3 участниками.

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

Для тестирования использовали программу K6 компании Grafana Labs. Скрипты тестирования запускались на группировке из 46 серверов, которые суммарно были оснащены 636 процессорными ядрами, 2,8 ТБ оперативной памяти и накопителями емкостью более 135,4 ТБ.

Тестирование производили по публичному API, с применением HTTP-протокола. Небольшой блок отправки письма выполнялся напрямую в SMTP.

Проводим первую серию испытаний


Сначала производилась линейная нагрузка от 0 до ~ 6350 запросов в секунду, в течение 300 секунд. Затем — постоянная нагрузка величиной ~ 6350 запросов в секунду на сценарий в течение 8 часов. И, наконец, — нисходящая линейная нагрузка с ~ 6350 до 0 запросов в секунду в течение 300 секунд.

Использовалось свыше 6000 необходимых одновременных сопрограмм генератора для создания нагрузки. Время выхода на требуемое число сопрограмм генератора нагрузки — 600 секунд.



Общее количество запросов (Раунд 1). Здесь и далее в тексте, картинки кликабельны



Количество запросов по методам (Раунд 1)


Величина задержек по методам (Раунд 1)


Количество ошибок по методам (Раунд 1)

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

Проводим повторную серию испытаний


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


Общее количество запросов (Раунд 2)


Количество запросов по методам (Раунд 2)



Величина задержек по методам (Раунд 2)


Количество ошибок по методам (Раунд 2)

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

Согласно статистике испытаний, общее количество отправленных запросов к системе составило более 191 млн.

Вывод тестирования:


Достигнута и подтверждена стабильная и устойчивая работа системы Mailion при подаче нагрузки, эквивалентной наличию в системе 600 тыс. пользователей, при нагрузке свыше 6081 RPS в течение 8 часов. Средний уровень нагрузки был равен 6350 RPS, что эквивалентно 612 тыс. пользователям в системе.

«Тестирование показало, что Mailion корректно справляется с предложенной моделью нагрузки. В ходе испытаний была достигнута и подтверждена стабильная и устойчивая работа корпоративной почты при подаче среднедневной нагрузки, эквивалентной действиям 600 тысяч пользователей в течение 8 часов. Система обеспечивала достаточный уровень производительности и оставалась общедоступной даже при увеличении нагрузки до 6350 RPS. Поскольку ошибок в ходе тестирования не было выявлено, то можно сделать вывод о готовности Mailion к работе и с большим количеством пользователей», — отметил Максим Маковский, коммерческий директор компании TEGRUS.

«Отсутствие ошибок в тестах, которые проводились при нагрузке 6350 PRS говорит о готовности Mailion к реальному применению в организациях с численностью более 600 тысяч сотрудников», — заявил Петр Щеглов, директор по продуктовому маркетингу МойОфис.

***
Если вам интересны подробности создания почтовой системы Mailion, советуем изучить нашу серию статей о разработке продукта (ссылки ниже). В них мы детально раскрываем принципы архитектуры решения МойОфис, благодаря которым Mailion отличается высоким уровнем надежности и возможностями масштабируемости. Также будем рады уточнить для вас информацию о продукте, либо о его нагрузочном тестировании — задавайте ваши вопросы в комментариях.

Комментарии (10)


  1. headliner1985
    29.03.2022 14:18

    Подскажите будет ли предоставлены публичные апи как например в google workspace для возможности создания приложений сторонними разработчиками и размещения в вашем маркетплэйсе?


    1. myoffice_ru Автор
      29.03.2022 16:49
      +2

      В этом году мы планируем реализовать открытый SDK для работы с Mailion (почта, календарь, контакты). API в данный момент не предоставляем


  1. maxim_ge
    29.03.2022 14:20
    +3

    6081 RPS (операций в секунду).
    которые суммарно были оснащены 636 процессорными ядрами

    Выходит, 10 операций в секунду на ядро?


    1. myoffice_ru Автор
      29.03.2022 16:46
      +5

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


  1. developer7
    29.03.2022 15:45
    +1

    Нужен highload — ставь побольше ядер для обработки https трафика. Ставь балансер. Ставь побольше мощностей для базы данных. И получается что мощность зависит не от софта (конечно если он не криво написан, а сейчас с повсеместным async/await это уже трудно сделать), а от железа. Поэтому получается какая то подмена понятий.

    Занимался нечто подобным.
    Заинтересовала строчка:

    6000 необходимых одновременных сопрограмм генератора для создания нагрузки.

    Я конечно понимаю что это наверно так написано что бы статья пожирнее и по загадочнее выглядела. Но наверно в реале можно было бы запустить одну программу (по крайней мере в моём случае работало) которая запустит внутри хоть сколько угодно одинаковых потоков для DDOS атаки (конечно пока не упрётся в машинные пределы)?


    1. myoffice_ru Автор
      30.03.2022 17:31

      Спасибо за ваш вопрос. Здесь всё дело в терминологии. По факту у нас действительно есть приложение, которое запускается в одном экземпляре и запускает 6000 потоков для нагрузки на стенд.


  1. beho1der
    29.03.2022 16:20

    Не раскрыт вопрос,сколько ресурсов обслуживало данную нагрузку!


    1. myoffice_ru Автор
      29.03.2022 16:47
      +2

      Нагрузку создавал один сервер — c 72 vCPU, 256 GB RAM, 8400 GB HDD, 2 774 GB NVMe


  1. smk
    29.03.2022 23:14
    +3

    эмулировала процесс реального появления пользователей в системе

    частота проверки почты пользователем — один раз в час.

    У Вас странные пользователи эмулируются. Если имеется ввиду протокол pop3 - то многие почтовые клиенты имеют интервал проверки 5-15 минут, нередко выставляют частоту проверки в 1 минуту, что бы как можно быстрее получать почту. И на объемах ящиов >100 Гб почтовому серверу начинается веселье.

    Тестирование LDA/MTA в контексте данного тестирования мне тоже кажется несколько странным - в любом опенсорс решении оно никогда особо не требовательно к ресурсам, в отличии от постоянной нагрузки от почтовых клиентов.

    72 vCPU, 256 GB RAM, 8400 GB HDD, 2 774 GB NVMe

    Использование такого железа скорее говорит о желании нивелировать узкие места избыточными мощностями.

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

    Кроме общих слов, интереснее было бы чуть подробнее - имеется ли масштабирование, если да, то его сложность, и несколько тестов в подобном плане: "дано - сервер Xeon E5-2650 v3, нагружаем пользователями до предела - на столькои-то пользователях начинается деградация кач-ва, подключаем второй сервер, Эльбрус, масштабируем - и увеличиваем пользователей дальше, снова с хорошими показателями отклика, до 7k rps...".

    Тут все-таки более технический ресурс, нежели место, где прокатит маркетинговая реклама и тестирования сферического коня в вакууме.


    1. myoffice_ru Автор
      30.03.2022 19:00
      +5

      Вы правы насчёт почтовых клиентов и частоты обращений. Протокол POP3 мы не поддерживаем. Протокол IMAP с расширением IDLE позволяет клиенту эффективно получать push-уведомления о поступлении входящей почты без необходимости делать интервальные опросы сервера.

      Тем не менее, наши исследования показывают, что размеры ящиков более 100 Гб используются для небольшого круга лиц в организации, а большая часть имеет квоты куда более скромного размера. По крайней мере, запросов от клиентов на инсталляцию в 600 тыс. пользователей с подобной квотой к нам ещё не поступало. Но мы готовы попробовать! ????

      И напомним все же, что данное нагрузочное тестирование специально проводилось на стенде, приближенном к реальности.

      Далее к вашим вопросам. «Использование такого железа скорее говорит о желании нивелировать узкие места избыточными мощностями» – и здесь вы тоже правы. Инженеры тестировали стенд, а не нагрузочные инструменты.

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

      Однако текущее нагрузочное тестирование преследовало цели, описанные в статье — эмулировать полный рабочий день с нагрузкой в 600 тыс. пользователей.