Очередь — это приёмник вместе с адресом отправки

критично

queue
Пара, а не домен — и от этого зависит всё остальное

Одна фраза руководства, сказанная мимоходом при описании экрана монитора, держит на себе половину модели доставки: письма группируются по домену получателя для каждого адреса отправки отдельно. Один и тот же gmail.com, отправляемый с двух адресов, — это две очереди, а не одна.

Что из этого следует. Лимиты блока приёмника считают пару, а не домен: max-msg-rate 500/h при двух адресах отправки — это тысяча писем в час на gmail.com. backoff-mode включается тоже у пары: с одного адреса очередь может быть в щадящем режиме, с другого — в обычном. Число одновременных соединений, которое видит приёмник от одного адреса, никак не связано с тем, сколько их открыл другой.

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

Сводки считают по-разному, и это не ошибка. Экран доменов складывает все адреса вместе, экран очередей — нет. Одно и то же число там будет разным, потому что это разные агрегаты.

Главная ловушка — писать лимит «на приёмник», думая о домене. Строка max-msg-rate 500/h в блоке <domain gmail.com> на уровне узла достанется каждой очереди этого домена — то есть каждому адресу отправки. Добавили четвёртый адрес — разрешённый поток на gmail.com вырос на четверть, хотя конфигурацию не трогали. Настоящей границы «на домен со всего узла» в MTA нет вовсе: её пришлось бы считать снаружи.
Что делает Хаб. Читает очереди именно парой — сводка узла отдаёт их в виде «адрес отправки на домен», и щадящие эпизоды Хаб хранит по очереди, а не по домену. Модель в продукте есть.

⚠️ Но аналитика местами складывает адреса. Разрезы по провайдерам суммируют все адреса вместе — там, где MTA этого не делает. Число на экране «доставляемость по провайдеру» отвечает на вопрос «как у нас с этим приёмником в целом», а не «что происходит в конкретной очереди», и путать их нельзя.

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

Рекомендуемые значения

Своих значений у понятия нет — важно, где писать настройку:

Где написана строка Кому достанется
блок приёмника внутри блока адреса одной очереди — той самой паре
блок приёмника на уровне узла каждой очереди этого домена, по одной на адрес
блок приёмника внутри пула каждой очереди каждого участника пула

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

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

Таблица и правило «на приёмника с этого адреса — внутрь блока адреса» наши. Из руководства здесь само определение очереди как пары и то, что сводка доменов и сводка очередей считают разное.
Пример в конфигурации
# одна и та же строка в двух местах означает разное
<domain gmail.com>
    bounce-after 4d          # верно при любом адресе — общий блок
</domain>
<virtual-mta mta-news-1>
    <domain gmail.com>
        max-msg-rate 500/h   # только для очереди gmail.com/mta-news-1    </domain>
</virtual-mta>
Верхний блок задаёт срок отказа всем очередям этого домена — это свойство приёмника, а не адреса. Выделенная строка живёт внутри адреса и достаётся одной очереди: у второго адреса будет свой темп, а не доля от этого.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

Типичные ошибки и проблемы

что делают не так и чем это кончается3 ошибки▶

Считают лимит очереди лимитом на домен

§ 5.4

Чем чреватоЛимит достаётся каждой очереди этого домена, то есть каждому адресу отправки. Суммарный поток на приёмник равен лимиту, умноженному на число адресов, и растёт при каждом новом адресе без единой правки конфигурации.
Как заметитьПриёмник жалуется на темп, а в конфигурации стоит значение, которое по расчётам вдвое-втрое ниже допустимого.
Как правильноУмножать лимит очереди на число адресов, прежде чем сравнивать с допустимым темпом приёмника. Границы «на домен со всего узла» в MTA нет — считать её надо снаружи.

Сравнивают числа с экрана доменов и с экрана очередей

§ 5.4

Чем чреватоЭто разные агрегаты: первый складывает адреса, второй нет. Расхождение принимают за ошибку счётчиков и ищут причину там, где её нет.
Как заметитьСумма по очередям не сходится с числом на строке домена.
Как правильноПомнить, какой срез перед глазами. Для разбора конкретной проблемы брать очереди, для оценки отношений с приёмником — домены.

Разносят поток по адресам, ожидая, что нагрузка поделится

§ 5.4

Чем чреватоКаждый новый адрес создаёт новую очередь с полным лимитом, а не забирает часть работы у существующей. Приёмник получает больше параллельных потоков, а не тот же поток другими путями.
Как заметитьПосле добавления адресов доля отказов у приёмника выросла, хотя общее число писем не менялось.
Как правильноПонижать лимит очереди при увеличении числа адресов, если суммарный темп на приёмника должен остаться прежним.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Наследование
Очередь не наследуется — она возникает сама, как только появляется письмо для пары. Наследуются настройки: блок приёмника уровня узла сливается с блоком приёмника внутри пула и внутри адреса отправки, и самый узкий уровень сильнее. Именно поэтому одна и та же директива, написанная на разных уровнях, достаётся разному числу очередей.
⇄

Связанные записи

4 связи

Как проверить на узле
Две команды показывают два разных среза — и разницу между ними стоит увидеть один раз:
pmta show queues
pmta show domains
Первая перечисляет очереди — по строке на пару, с режимом и счётчиками каждой. Вторая складывает адреса и даёт по строке на домен. Для одного домена, отправляемого с трёх адресов, в первой будет три строки, во второй одна, и числа не совпадут — так и задумано.
В Хабе
Цена ошибки
безопасно: неверное значение ничего не ломает
Сценарии
Прогрев адресов · Настроить темп под провайдера · Разобрать зависшую очередь
Важность
критично