Планирование ресурсов и сайзинг
Статья устарела частично, т.к. подходы оптимизированы – в переработке.
При планировании ресурсов для ваших задач следует учитывать, что масштабированию подлежат компоненты Engine и Actions и Assistants.
Обзор
Единицы измерения производительности компонент – событий в секунду (events per second, EPS).
Engine
Для целей сайзинга принимается, что производительность компоненты Engine равна 200EPS. Один экземпляр Engine запускается в контейнере на 1 ядре с 8 GB RAM.
Производительность может быть ниже, если используются большие сущности контекста событий.
При необходимости многоядерного запуска в несколько контейнеров Engine можно множить для достижения максимальной производительности. Подробнее см. Кластеризация.
Actions
Один экземпляр Actions так же как и Engine запускается в контейнере на 1 ядре с 8 GB RAM.
Производительность компоненты Actions зависит от выполняемых действий: от самых быстрых как проверка аудитории или разделение на A/B группы, до самых медленных как HTTP-запросы. В среднем, на один экземпляр Engine это 100 eps.
При необходимости многоядерного запуска Actions также можно множить для достижения максимальной производительности. Подробнее см. Кластеризация.
Adapters
Производительность компонент adapters зависит от системы-источника событий.
Например HTTP-адаптер может отдавать до 500EPS, тогда как неоптимизированный запрос в SQL-адаптер не превысит 100.
Адаптеры также могут быть запущены в нескольких экземплярах, однако нужно учитывать специфики системы-источника.
Например File-адаптер не рекомендуется запускать в несколько экземплярах на 1 файл, в SQL-адаптер можно разделить запросы на порции, а HTTP-адаптеры могут быть запущены в неограниченном количестве экземпляров.
Планирование
Объем памяти для Redis
Сценарии
Пример: у вас одновременно работает 10 сценариев, в каждом из которых находится одновременно по 1 000 000 клиентов. Каждый клиент имеет 50 полей контекста.
Для такого объема в Redis необходимо 11 983 Mb RAM. При уменьшении/увеличении объема размер уменьшается/увеличивается соответственно.
💡
Для успешной работы и сохранения в Redis всегда должно быть свободно > 50% памяти, если используется RDB-снапшотинг. Следовательно, объем памяти увеличивается до 17966 Mb.
Аудитории
Для кэширования данных аудиторий из БД также требуется объем памяти в Redis. Например, при расчете аудитории у вас получается исходная таблица, в которой 50 колонок и 1 000 000 записей. При кэшировании такой аудитории в Redis будет занято 890 Мб RAM. При уменьшении/увеличении объема размер уменьшается/увеличивается соответственно.
Для комфортной работы с расчетом на рост нагрузки рекомендуется закладывать не менее 16 Gb RAM.
Вычислительные мощности
Расчет зависит от вашего суммарного EPS в секунду. Каждый модуль Engine, Actions или Assistant занимает 1 ядро. Для каждого модуля рекомендуется планировать 2 Gb RAM.
💡
Перед экспериментами с запуском нескольких инстансов сервиса ознакомьтесь с кластеризацией.
Например, если ваш исходный суммарный стабильный EPS равен 1000 из двух разных источников: ActiveMQ, HTTP по 500 EPS на каждый.
Во-первых, запланируйте входную мощность ассистентов. Запустите по 2-3 инстанса ActiveMQ Assistant и HTTP Assistant. Такая расстановка позволит не задерживаться сообщениям в очереди и не вызывать 50x ошибки у системы-источника.
Во-вторых, запустите 5 инстансов Flows Engine. Такая расстановка позволит вам потреблять 1000 EPS без задержек.
В-третьих, запустите 3-4 инстанса Flows Actions для предотвращения задержек внутренних действий и обращений к внешним системам.
В приведенном примере нагрузка рассчитана на стабильную нагрузку в 1000 EPS с пиковыми скачками до 1200 EPS. При росте нагрузки следует запускать дополнительные инстансы. Также вы можете запустить всю систему Accelera Flows на вашей динамической инфраструктуре, если она поддерживает Docker.