Как выбрать размер очереди исходящих SMS для SMPP-шлюза?

Как выбрать размер очереди исходящих SMS для SMPP-шлюза?

Размер очереди исходящих SMS выбирают по скорости, с которой SMPP-шлюз принимает сообщения, и по объёму отправки в пиковый период. Очередь сглаживает кратковременный наплыв запросов, но сама по себе не ускоряет доставку: если сообщения поступают быстрее, чем шлюз их обрабатывает, очередь растёт. Ниже — способ оценить нужный запас, учесть окно отправки и проверить настройки на реальной нагрузке.

Что означает размер очереди в SMS-системе?

Очередь хранит сообщения, которые система уже подготовила, но ещё не передала шлюзу. Приложение кладёт туда задания, а SMPP-клиент отправляет их с учётом доступной скорости и ответов шлюза. Если приложение формирует отправки рывками, очередь помогает пережить всплеск, не заставляя пользователя ждать ответа от шлюза при каждом запросе.

Здесь важно разделять два ограничения. Скорость SMPP-шлюза задаёт темп передачи сообщений, а размер очереди — сколько заданий система способна временно удержать. Большая очередь не компенсирует постоянно недостаточную пропускную способность: она лишь дольше накапливает необработанные сообщения.

Перед расчётом проверьте, что именно считает ваша система: сообщения, части длинного SMS или запросы submit_sm. Если длинное сообщение разбивается на несколько частей, количество SMPP-запросов будет выше числа исходных текстов. Это влияет и на оценку нагрузки, и на размер очереди.

Как оценить очередь по скорости шлюза и пиковому потоку?

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

Удобно записать расчёт так: размер запаса равен разнице между скоростью поступления и скоростью обработки, умноженной на длительность пика. Если скорость обработки не ниже скорости поступления, очередь не будет постоянно расти из-за этого потока. В расчёте используйте одинаковые единицы: например, сообщения в секунду и секунды, либо запросы в минуту и минуты.

Возьмите скорость, разрешённую для вашего подключения, а не максимальную цифру из документации другого шлюза. Пропускная способность зависит от условий конкретного подключения. Если ограничение неизвестно, сначала уточните его у поставщика SMPP-шлюза или проверьте в настройках кабинета.

Затем оцените профиль нагрузки: когда приложение создаёт задания, как долго длится пик и успевает ли очередь опустеть после него. Для теста подойдут журналы приложения и метрики SMPP-клиента. Отдельно отметьте среднюю длину сообщения и долю текстов, которые отправляются несколькими частями.

Как связаны очередь и окно submit_sm?

Окно submit_sm определяет, сколько запросов клиент отправляет до получения ответов на предыдущие. Если окно мало, клиент может использовать доступную скорость не полностью: часть времени он ждёт подтверждения. Если окно завышено, шлюз может отклонять запросы или отвечать с задержкой. Поэтому очередь и окно настраивают отдельно: очередь хранит ожидающие задания, а окно управляет количеством запросов в полёте.

Начните с значения окна, которое поддерживает шлюз, затем проверьте, как быстро приходят submit_sm_resp и растёт ли очередь. Практический разбор настройки есть в статье о размере окна submit_sm в SMPP. Если ответы задерживаются или теряются, сначала разберите поведение подтверждений, а не увеличивайте окно вслепую.

Учитывайте и обработку ответов. Получив успешный submit_sm_resp, клиент может пометить запрос как принятый шлюзом; это ещё не подтверждает доставку сообщения адресату. Правила обработки ответов и защита от повторной отправки описаны в материале об обработке submit_sm_resp без создания дублей.

Как проверить настройки и не потерять сообщения?

Проведите нагрузочный тест с тем же профилем, который ожидается в работе: одинаковой скоростью поступления, длиной текстов и режимом SMPP-сессии. Во время проверки наблюдайте за длиной очереди, скоростью отправки, задержкой ответов и числом ошибок. Затем посмотрите, как быстро очередь сокращается после завершения пика.

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

Для устойчивой работы задайте предел очереди и понятное поведение при его достижении: например, приостанавливать приём новых заданий или возвращать приложению ошибку, чтобы оно могло повторить запрос по своей логике. Не удаляйте старые сообщения молча. Проверьте также, что после разрыва SMPP-соединения клиент не отправляет повторно сообщения, статус которых уже подтверждён.

Какие ошибки чаще всего приводят к росту очереди?

  • Считать скорость по числу текстов, не учитывая разбиение длинных SMS на части.
  • Задавать размер очереди без оценки длительности пикового потока.
  • Увеличивать окно submit_sm, не проверив ограничения шлюза и время ответов.
  • Считать подтверждение приёма шлюзом доказательством доставки адресату.
  • Повторно отправлять запрос после тайм-аута, не проверив его текущий статус.

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