Задать вопрос

Алгоритм распределения нагрузки между SMTP-серверами

В данный момент я решаю задачу по создании системы массовых рассылок почты — не спам, письма будут получать зарегистрированные пользователи, подисавшиеся на рассылку по определенным событиям. Решение должно соответствовать таким требованиям:
1. Предполагаемая нагрузка — около 500 тыс. писем в сутки.
2. Нужно иметь возможность на ходу добавлять новые SMTP-сервера, при этом должен наблюдаться рост производительности рассылки.

Если коротко, выбранное мной решение такое:
Работают два демона (написанные на Python3):
1. Первый демон достает из БД (MongoDB) список адресов получателей, и шаблон письма, и формирует персональные письма («Уважаемый ...») по шаблону. Сформированные письма он добавляет в очередь, организованную на Redis.
2. Второй демон слушает очередь Redis, берет с нее письма, и отдает их SMTP-серверам.
Возможен допил обоих демонов — чтобы они работали в несколько процессов.
У меня есть 2 таких вопроса:
1. Хотелось бы заранее знать, какое звено в этой системе будет самым слабым: я предполагаю, что пропускная способность SMTP-сервера — нужно отдавать письма SMTP-серверам не быстрее, чем они смогут их рассылать.
2. Как правильно распределить нагрузку между SMTP-серверами, чтобы добавление новых серверов приносило реальный прирост производительности.

Буду благодарен за любой совет от компетентного в этом вопросе человека.
  • Вопрос задан
  • 4151 просмотр
Подписаться 6 Оценить Комментировать
Решения вопроса 1
@moonsly
1. Кроме пропускной способности SMTP, вам нужно отдельно контролировать лимиты по каждому сервису (mail.ru, rambler.ru, yandex.ru etc) — если будете слишком часто слать на один сервис (несколько писем в минуту), быстро попадаете в фильтры и блек-листы, и никто не посмотрит, белый у вас сайт/рассылка или не очень. Конкретные цифры с лимитами писем для каждого сервиса можете загуглить, я их не знаю, но они есть.
2. Обыкновенный round-robin, т.е. каждый новый добавленный SMTP участвует в кольцевой очереди на отправку очередного письма.
Если же контролируете доставку/прочтение — то можно по каждому SMTP отдельно вести его рейтинг (по доставке писем), и учитывать этот рейтинг при выборе сервера (чем выше доставка — тем больше можно пока что отправить, но не переусердствовать).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
round robin думаю всех устроит
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы