Как мы в коробках рассылки разгоняли
Мы повысили скорость отправки email‑рассылок в коробочной версии Битрикс24 с 8‑10 до 80‑90 писем в секунду, используя многопоточность без внешних сервисов.
Команда маркетинга Битрикс24 ежедневно отправляет 300‑400 тыс. писем, а штатный механизм через PHP‑функцию mail() справляется лишь с 8‑10 письмами в секунду.
Нужна была быстрая отправка без установки дополнительных сервисов и без изменения клиентской инфраструктуры – задача, которую мы решили, внедрив собственную многопоточную стратегию.
В коробочной версии отправка происходит нативно: PHP → mail() → локальный MTA (exim, postfix и т.п.). Такой подход надёжен, но ограничен одним потоком, поэтому скорость быстро достигает потолка.
Мы модифицировали модуль sender (Email‑Маркетинг), добавив два режима стратегии потоков – SingleThreadStrategy и TenThreadsStrategy. В боевом режиме одновременно работают 10 независимых потоков, каждый обрабатывает свою часть получателей.
С 8‑10 писем/с мы подняли скорость до 80‑90 писем/с без внешних очередей, микросервисов и миграций.
Главные подводные камни
- Залипшие потоки
Не очищенные записи в PostingThreadTable задерживали запуск новых рассылок.
- Гонки за один поток
Отсутствие атомарного lockThread() позволяло двум процессам захватить один и тот же набор адресатов.
- Стабилизация отправки
Тестирование выявило необходимость тонкой настройки таймаутов и лимитов, чтобы избежать падений при пиковых нагрузках.
Как мы построили многопоточность
- 01Стратегии потоков
Создали абстрактный класс AbstractThreadStrategy и две реализации: один поток для отладки и 10 потоков для боевой нагрузки.
- 02Разделение получателей
Каждый поток получает адресаты, у которых последний символ ID совпадает с его номером (фильтр LAST_DIGIT = threadId).
- 03Ограничение параллелизма
Введена опция sender.max_parallel_threads, контролирующая суммарное количество активных потоков на сервере.
- 04Алгоритм работы
Заполняем потоки → захватываем свободный → берём батч получателей → отправляем → повторяем. По завершению всех потоков рассылка помечается как отправленная.
Мы доказали, что существенное ускорение email‑рассылок в коробочной версии Битрикс24 возможно без внешних очередей и сложных микросервисов – достаточно правильно распределить нагрузку между несколькими процессами и контролировать их количество.
Если вы тоже хотите отправлять сотни тысяч писем быстрее, включите в настройках модуля «Email‑маркетинг» режим «Крон» и задайте количество потоков = 10. При необходимости адаптируйте параметр max_parallel_threads под свои серверные ресурсы.
Готовы протестировать? Оставьте заявку на B2B‑аудит в DIL LEAD – мы поможем оптимизировать ваш процесс рассылки и подобрать оптимальные настройки под ваш бизнес.
Хотите обсудить свою нишу?
Напишите менеджеру DIL LEAD или подпишитесь на Telegram-канал.