Вопрос или проблема
Кратко: мы использовали AWS SES в течение нескольких лет с нескольких десятков серверов и недавно регулярно получаем ошибку только на одном из них. “Код: 421, ответ: Соединение закрыто сервером. Достигнуто максимальное количество сообщений за сессию.” Мы не можем понять или решить эту проблему.
Подробности
У нас есть лимиты по отправке SES – 100 писем в секунду и 500000 писем в день. Наши серверы отправляют сообщения либо в Восточные США, либо в Центральную Канаду. Мы используем пакеты Pear Net_SMTP и Pear Mail для отправки писем через порт 465 с помощью AWS SES. Каждый сервер отправляет массовые электронные сообщения партиями по 1000 с использованием двух процессов. Только несколько серверов отправляют на конечную точку Центральной Канады, и только один из них сталкивается с этой проблемой. Его нагрузка не значительно отличается от других VPS, которые никогда не имели этой проблемы.
Проблемный VPS получает ошибку с довольно регулярной частотой, но это происходит не всегда. Задания проходят часть партии перед тем, как завершиться ошибкой. Ответ: “код: 421, ответ: Соединение закрыто сервером. Достигнуто максимальное количество сообщений за сессию.”
Мы понимаем, что коды 4xx указывают на временный сбой, но нам интересно узнать, есть ли что-то, что мы можем сделать, чтобы предотвратить этот ответ.
С нашей премиум поддержкой от AWS мы смогли получить не очень полезное объяснение:
Существует множество причин для ошибки “421 соединение закрыто сервером”. Сообщение об ошибке, которое вы поделились, указывает на то, что ошибку вызывает либо слишком много соединений от приложения для отправки электронной почты, либо конгестия на конечной точке SMTP.
Эти ошибки являются транзиторными или временными ошибками, которые происходят, когда наблюдается всплеск одновременных соединений с конечной точкой SMTP, превышающий лимит соединений, доступный для сервера конечной точки SMTP.
Когда конгестия уменьшается, соединения с сервером конечной точки SMTP больше не отвергаются с ошибкой 421.
Чтобы снизить вероятность возникновения ошибки 421, вы можете:
Снизить количество одновременных писем, отправляемых на конечную точку SMTP в течение одной сессии.
Реализовать логику восстановления и повторной попытки [1] в вашем приложении для отправки, чтобы замедлить количество запросов на соединение и повторить попытки подключений, когда конгестия на конечной точке SMTP исчезнет. Я прикрепил другой документ с примерами кода для реализации логики повторной попытки [2] и логики повторной попытки с паттерном восстановления [3].
Пожалуйста, обратитесь к нашему руководству пользователя SES для получения подробного списка кодов ошибок, возвращаемых конечными точками SMTP, что может помочь вам в расследовании других ошибок, которые вы наблюдаете при подключениях к конечной точке SES SMTP [4].
Мы проверили и не верим, что приближаемся к нашим дневным лимитам или лимитам по количеству писем в секунду на нашем аккаунте. Мы, вероятно, отправляем максимум менее 10 в секунду в Центральную Канаду, суммируя по всем VPS. Более конкретное сообщение об ошибке, которое мы получаем, касается количества писем за сессию, а не количества сообщений в секунду. Поскольку мы используем стандартные библиотеки PEAR, мы не понимаем, как это может быть чем-то странным в нашей реализации SMTP.
Мы снизили количество процессов, отправляющих до 1 на этом сервере, без изменений в ошибках SES.
Это влияет на пропускную способность для этого клиента, так как вместо отправки 1000 писем каждые 5 минут он получает, возможно, 350, прежде чем эта ошибка вызовет сбой задания.
Ответ или решение
Ошибка AWS SES 421: Причины и Рекомендации по Решению
Введение
При использовании Amazon Simple Email Service (SES) для отправки электронных сообщений пользователи могут столкнуться с различными ошибками. Одной из них является ошибка 421, связанная с закрытием соединения сервером из-за превышения максимального количества сообщений, отправленных за сессию. В данной статье мы рассмотрим причины этой ошибки и предоставим рекомендации по ее устранению.
Причины ошибки 421
Ошибка "Code: 421, response: Connection closed by server. Maximum message count per session reached." сигнализирует о том, что текущая сессия SMTP превысила лимиты отправки, установленные AWS. Есть несколько возможных причин, по которым это может произойти:
-
Число сообщений за сессию: Хотя у вас установлены высокие лимиты по количеству отправляемых писем в секунду и за день, AWS SES также имеет ограничения на количество сообщений, отправленных в одной сессии. Если это количество превышается, сервер может закрыть соединение.
-
Проблемы с соединением: Временные переполнения соединений на стороне AWS могут также приводить к ошибкам 421. Если ваш VPS отправляет большое количество одновременных соединений к SES, это может вызывать сбои.
-
Уровень нагрузки на VPS: Даже легкие колебания в загрузке вашего VPS могут привести к неправильной работе приложения, что также увеличивает шанс возникновения ошибок.
Рекомендации по устранению ошибки
-
Сокращение числа отправляемых сообщений за сессию: Убедитесь, что ваше приложение отправляет меньшее количество писем за одну сессию. Например, если у вас есть возможность, попробуйте отправлять по 500 сообщений за сессию вместо 1000. Это поможет избежать переполнения лимитов.
-
Имплементация логики повторных попыток: Добавление логики повторных попыток с помощью "backoff" (уменьшение скорости отправки при возникновении ошибок) может помочь в обработке временных сбоев. Это позволит вашему приложению автоматически делать паузу между отправками и пытаться повторно подключиться к SMTP после настройки на определенный интервал времени.
-
Мониторинг процесса отправки: Установите мониторинг и логирование в своем приложении, чтобы отслеживать количество отправленных писем за сессию. Это поможет вам в идентификации превышений лимитов и анализе стилей отправки.
-
Обновление библиотек: Убедитесь, что используемые вами библиотеки (в данном случае, Pear Net_SMTP и Pear Mail) актуальны. Иногда обновления могут содержать исправления, способные улучшить совместимость и производительность.
-
Проверка конфигурации сервера: Пройдите по всем настройкам вашего VPS и убедитесь, что он настроен правильно для работы с AWS SES. В некоторых случаях оптимизация параметров системы (таких как настройки TCP/IP) может улучшить стабильность соединения.
Заключение
Ошибка 421 в AWS SES — это временная проблема, но ее частота может значительно замедлить ваш рабочий процесс и повлиять на удовлетворенность клиентов. Реализация вышеперечисленных рекомендаций поможет вам не только устранить текущее препятствие, но и избежать подобных ситуаций в будущем.
SEO-оптимизация
Ключевые слова и фразы для SEO: AWS SES, ошибка 421, максимальное количество сообщений, SMTP, рекомендации по устранению, конфликты с Amazon SES, повышенная нагрузка на VPS. Использование этих фраз в тексте поможет повысить видимость данной статьи среди пользователей, ищущих решения для работы с AWS SES.