Автоматизация продаж2 мин чтенияDIL LEAD

Как мы в коробках рассылки разгоняли

Мы повысили скорость отправки 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() позволяло двум процессам захватить один и тот же набор адресатов.

  • Стабилизация отправки

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

Как мы построили многопоточность

  1. 01
    Стратегии потоков

    Создали абстрактный класс AbstractThreadStrategy и две реализации: один поток для отладки и 10 потоков для боевой нагрузки.

  2. 02
    Разделение получателей

    Каждый поток получает адресаты, у которых последний символ ID совпадает с его номером (фильтр LAST_DIGIT = threadId).

  3. 03
    Ограничение параллелизма

    Введена опция sender.max_parallel_threads, контролирующая суммарное количество активных потоков на сервере.

  4. 04
    Алгоритм работы

    Заполняем потоки → захватываем свободный → берём батч получателей → отправляем → повторяем. По завершению всех потоков рассылка помечается как отправленная.

Мы доказали, что существенное ускорение email‑рассылок в коробочной версии Битрикс24 возможно без внешних очередей и сложных микросервисов – достаточно правильно распределить нагрузку между несколькими процессами и контролировать их количество.

Если вы тоже хотите отправлять сотни тысяч писем быстрее, включите в настройках модуля «Email‑маркетинг» режим «Крон» и задайте количество потоков = 10. При необходимости адаптируйте параметр max_parallel_threads под свои серверные ресурсы.

Готовы протестировать? Оставьте заявку на B2B‑аудит в DIL LEAD – мы поможем оптимизировать ваш процесс рассылки и подобрать оптимальные настройки под ваш бизнес.

Хотите обсудить свою нишу?

Напишите менеджеру DIL LEAD или подпишитесь на Telegram-канал.