Хайлоад в рассылке почты:
как спать спокойно
Андрей СасBadoo
Кто вы?
Кто я?
1. Руковожу в Badoo системой уведомлений:
– email;
– push;
– sms.
2. Отвечаю за техническую и продуктовую
стороны.
3. Консультирую в области email-маркетинга,
push-уведомлений.
Бизнес-задачи
1. Предоставить прозрачный API нашим
программистам.
2. Обеспечить отправку почты в объе ̈мах до
150М писем в день.
3. Обеспечить доставку почты в инбоксы
в 95%+ случаев.
И в чѐм же проблема?
И в чѐм же проблема?
1. Внезапно оказывается, что это хайлоад.
2. Требуется глубокая автоматизация.
3. Не мониторишь – не контролируешь.
Откуда хайлоад?
1. Письмо нужно сгенерировать:
– данные из БД;
– шаблоны;
– переводы.
2. Письмо нужно отправить в сторонний
почтовый сервер.
3. Ресурсов на генерацию и отправку –
как на динамический хит на бэкенд.
4. * 150 миллионов писем.
Зачем автоматизация?
1. Спрятать всю работу после генерации
шаблона от разработчиков.
2. Не допустить поломок:
– работоспособность ссылок;
– правильный футер;
– наличие заголовка и получателя.
3. Делать полезные дела в одном месте.
4. * 100 типов писем.
А мониторинг зачем?
Мониторинг нужен чтобы:
1. Обнаруживать проблемы:
– быстро;
– автоматически (даже в выходной).
2. Избежать повторения проблем.
3. Иметь вводную информацию для поиска
причины.
Графики
Триггеры
Наши ноу-хау
Архитектура
Почтовые
сервера –
MTA (Postfix,
CGP)
Сервисы
почты
(Hotmail,
Yahoo, Gmail)
Машины,
создающие
письма
(PHP)
ssmtp Internet
Этапы отправки писем
Генерация писем
Очередь готовых писем
Отправка в локальный МТА
Пересылка во внешний МТА
Этапы отправки писем
Генерация писем
Очередь готовых писем
Отправка в локальный МТА
Пересылка во внешний МТА
Генерация
1. Асинхронно:
– синхронно записываем события в БД*;
– автоагрегация событий;
– разбор накопившихся событий cron-скриптом на
другой машине.
Генерация
2. Конфиг для всех писем:
– разработчик;
– шаблон;
– ссылка на описание;
– принадлежность к группе писем;
– тип футера;
– приоритет.
Генерация
3. Делаем добрые дела:
– параметры авторизации;
– параметры статистики;
– проверка целостности;
– картинка для мониторинга открытий;
– AB-тестирование.
Генерация
Условные обозначения:
• Т – автоматический триггер-уведомление;
• Г – график.
4. Мониторинг:
– размер очереди событий (Г, Т);
– время нахождения событий в этой очереди (Г).
Этапы отправки писем
Генерация писем
Очередь готовых писем
Отправка в локальный МТА
Пересылка во внешний МТА
Очередь писем
1. В виде файлов:
– содержат готовое тело письма и мета-данные;
– не нужны внешние сервисы кроме МТА;
– легко получать статистику;
– просто реализовать повторные попытки.
Очередь писем
2. Мониторинг:
– число файлов писем в ДЦ (Г, Т);
– число файлов в разбивке по машинам (Г);
– число старых файлов на машинах (Т).
Этапы отправки писем
Генерация писем
Очередь готовых писем
Отправка в локальный МТА
Пересылка во внешний МТА
Отправка в локальный МТА
1. Опять асинхронно.
2. Выбор IP из PHP:– автоматический контроль работоспособности;
– можно управлять через веб-интерфейс;
– можно работать с внешними данными;
– админ теперь* не нужен.
3. ssmtp:– вместо sendmail;
– лѐгкий;
– слегка доработан.
Отправка в локальный МТА
4. Мониторинг:
– что скрипты-рассыльщики запускаются (Т);
– среднее время жизни файла на диске (Г);
– среднее время выполнения mail() (Г);
– число повторов отправки (Г);
– число ошибок отправки (Г, Т);
– число отправленных за сутки, час (Г, Т).
Этапы отправки писем
Генерация писем
Очередь готовых писем
Отправка в локальный МТА
Пересылка во внешний МТА
Пересылка наружу
Единственный хак – DNS-кэшер unbound.
В остальном – мониторинг:
– очередь на каждом МТА, группе МТА (Г, Т);
– среднее время отсылки в сторонние сервисы (Г);
– наличие процессов МТА, DKIM, unbound (Т);
– правильные hostname МТА (Т).
Этапы отправки писем
Генерация писем
Очередь готовых писем
Отправка в локальный МТА
Пересылка во внешний МТА
МТА
Communigate Pro (CGP):
– быстрый (минимум 5М писем в сутки);
– достаточно конфигурируемый;
– веб-интерфейс (с глюками).
Postfix:
– полная конфигурируемость;
– тоже быстрый;
– бесплатный.
МТА
Требования:
– важна только дисковая подсистема;
– не требователен к CPU и RAM;
– 4 * SAS 10k диски в RAID 1+0;
– хороший RAID-контроллер с «батарейкой».
Кластер * 2 ДЦ:
– 10 рассылающих машин;
– 4 принимающих машины.
МТА
Оптимизация:
– файловая система (noatime/relatime)
– число SMTP-воркеров;
– число DNS-воркеров;
– локальный кэшер DNS-запросов (unbound);
– очередь в большом числе папок;
– лимит на число соединений к MX;
– лимит на число писем в сессии.
Прочий мониторинг
1. Число отправленных писем по типам (Г, Т).
2. Число отправленных писем по машинам (Г,
Т).
3. DNS: A, PTR, SPF, DMARC, MX (Т).
4. noatime/relatime (Т).
Логгирование
Зачем?
1. Статистика (техническая и продуктовая).
2. Поиск и решение проблем.
3. Проверка жалоб пользователей.
События: отправки, открытия, клики, отписки,
ошибки.
Логгирование
Что?
1. Получатель.
2. IP-адрес.
3. Язык, страна, пол.
4. Тип.
5. Уникальный ID письма.
6. Время создания, отправки.
7. Машина-создатель, скрипт-генератор.
Ваши вопросы
Андрей Сас
www.deliverability.ru
Badoo
Habrahabr:
http://habrahabr.ru/company/badoo
Twitter: @BadooDev
Top Related