Как слать 100М писем каждый день - секреты...

Preview:

DESCRIPTION

Видео доклада: http://www.youtube.com/watch?v=jJJGdOiwisM E-mail рассылки являются важным, если не самым главным, каналом связи с пользователями для большинства веб-сервисов. С их помощью уведомляют о новых событиях, предлагают продукцию и выставляют счета. Поэтому трудно переоценить значимость правильного решения проблем отправки и доставки почты в крупном проекте. Положительный опыт решения таких задач есть у компании «Баду», которая ежедневно рассылает десятки миллионов писем своим пользователям. Чтобы доклад не был излишне абстрактным, в нём будет рассказано о конкретной реализации почтового кластера проекта, системы генерации и отсылки почты, метриках качества и мониторинге, применяемом в «Баду».

Citation preview

Как слать 100М писем каждый день (и спать спокойно)

Сас Андрей, Badoo

А кто говорит?

А кто говорит?

Я: •  руковожу развитием почтовой рассылки, могу знать не все детали;

А кто говорит?

Я: •  руковожу развитием почтовой рассылки, могу знать не все детали;

•  не админ (извините!).

А кто говорит?

Я: •  руковожу развитием почтовой рассылки, могу знать не все детали;

•  не админ (извините!).

Хвастаюсь: •  год без пролёжек почтовой инфраструктуры;

А кто говорит?

Я: •  руковожу развитием почтовой рассылки, могу знать не все детали;

•  не админ (извините!).

Хвастаюсь: •  год без пролёжек почтовой инфраструктуры; •  97% доставки в инбокс;

А кто говорит?

Я: •  руковожу развитием почтовой рассылки, могу знать не все детали;

•  не админ (извините!).

Хвастаюсь: •  год без пролёжек почтовой инфраструктуры; •  97% доставки в инбокс; •  среднее время доставки почты – 25 с.

О чём буду рассказывать?

О чём буду рассказывать?

А как люди отправляют почту?

О чём буду рассказывать?

Как отправлять много-много писем, быть уверенным в себе и спать по ночам спокойно

Бизнес-задачи

1.  Предоставить прозрачный API программистам. 2.  Обеспечить отправку почты в объёмах до 100М писем в день.

3.  Обеспечить доставку почты в инбоксы в 95%+ случаев.

О чём НЕ буду рассказывать?

Как сделать так, чтобы ваши письма не попадали в Spam

А что в этом сложного?

Казалось бы: •  поднял MTA •  сделал mail() •  ... •  PROFIT!

А что в этом сложного?

Казалось бы: •  поднял MTA •  сделал mail()

Однако: •  отправка 1 письма = обработка 1 динамического хита

А что в этом сложного?

Казалось бы: •  поднял MTA •  сделал mail()

Однако: •  отправка 1 письма = обработка 1 динамического хита •  а ведь письма ещё нужно сгенерить

А что в этом сложного?

Казалось бы: •  поднял MTA •  сделал mail()

Однако: •  отправка 1 письма = обработка 1 динамического хита •  а ведь письма ещё нужно сгенерить •  смелость пойти и узнать правду!!1111

Откуда взялась цифра 100М?

•  50М – каждый день •  70М – в пике •  100М – просто красивая цифра •  150М – «пасаны ваще ребята. молодцы, могёте!»

Особенности больших проектов

Наши мантры: •  нужно отправлять письма асинхронно

Особенности больших проектов

Наши мантры: •  нужно отправлять письма асинхронно •  по-настоящему (вдвойне) асинхронно!

Особенности больших проектов

Наши мантры: •  нужно отправлять письма асинхронно •  по-настоящему (вдвойне) асинхронно! •  требуется балансировка между серверами

Порядок отправки письма

1.  Появляется необходимость создать письмо. 2.  Постановка в очередь на создание письма. 3.  Генерация письма по задачам из очереди на создание.

4.  Постановка в очередь на отправку. 5.  Отсылка письма из очереди на отправку.

Очередь на отправку

Наша реализация – на файлах. Преимущества: 1.  Возможна работа без внешних сервисов. 2.  Простота манипулирования письмами. 3.  Легко получить статистику / логи. 4.  Просто реализуются многократные попытки отправки.

SSMTP вместо sendmail

Это SMTP-клиент, эмулирующий работу sendmail.

Нам он нравится, т.к.: •  ничего лишнего, только отсылает письмо в MTA (hub) •  супер простой конфиг •  мы его слегка допилили (таймауты + параметры)

Балансировка между MTA

Первая версия – на базе железки F5 LTM: •  weighted round robin •  SMTP мониторинг

Текущая реализация – скрипты на PHP + мониторинг от F5 LTM: •  автоматическое управление всей балансировкой •  красивый веб-интерфейс •  скрипач (админ) не нужен!

Автоматизация при отправке

Хорошее место, чтобы делать добрые дела: •  подстановку мониторинговых параметров в ссылки •  подстановку картинок для мониторинга открытий •  проверку целостности и корректности письма •  подстановку технических заголовков •  и даже проверку работоспособности ссылок!

Железо почтового кластера

Кластер – это по 12 машин на каждой из площадок: •  10 отправляющих •  2 принимающих

Важна только дисковая подсистема: •  in memory решения не пробуем, не хотим терять письма

•  штатно 4 x SAS 10k в RAID 1+0, плюс контроллер с «батарейкой»

•  для тестов 4 x SSD в RAID 5

Как тюнить MTA?

•  оптимизировать файловую систему •  увеличить число SMTP воркеров •  увеличить число DNS воркеров •  поставить локальный кэшер DNS-запросов •  раскладывать очередь по большому числу директорий

•  увеличить лимиты на число соединений к одному MX серверу

•  выставить лимиты на число писем в сессии

Наши MTA

Исторически – Communigate Pro: •  надёжный •  ОЧЕНЬ быстрый Для «проблемных» почтовых сервисов – Postfix: •  более конфигурируемый •  есть возможность доработать напильником

Хм, Communigate Pro?..

 

Но ведь есть Postfix, Exim, Hurricane, Message Systems, Zrinity

и даже Exchange!  

 

Корпоративный комбайн

•  Email – первоначальный, основной продукт •  Calendaring •  VoIP •  IM •  File storage •  IP PBX •  Presence

А кто им пользуется?

Однако, цифры

На старой машине с 1 диском SCSI 10k: •  5 миллионов писем в сутки •  до 100 писем в секунду в пике

Общее ощущение

+ чрезвычайно стабилен, вплоть до LA = 200 и очереди в 1М писем + высокая производительность отправки писем + не требователен к памяти и CPU + достаточно настроек для большинства проектов * платный – нет возможности менять настройки для разных почтовиков – нет возможности допилить самим – проблемы с выводом некоторых видов статистики

Статистика и мониторинг

Пока не измеряешь – не контролируешь. Что было в начале? •  графики по числу писем в очереди на каждом почтовике

•  сколько каких писем отправили за сутки •  статистика по LA / CPU usage / Memory usage в

Zabbix

Чего не хватало больше всего?

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

•  среднее время доставки почты в отдельный почтовый сервис

Как реализовали?

Число файлов, ожидающих отправки в MTA: •  просто считаем файлы! J Число ошибок отправки в MTA: •  просто считаем файлы! J Самые загруженные отправкой почты скриптовые машины: •  лог в MySQL

Как реализовали?

Среднее время отправки в MTA: •  PINBA – наш собственный сервис мониторинга Среднее время доставки почты в отдельный почтовый сервис: •  парсим логи MTA •  хитрая агрегационная структура (highload!!1111)

Зачем так много?

Dashboard нас спасёт?

1. Несколько dashboard’ов. 2. Даже dashboard’ы стали слишком сложными. 3. Детектировать аномалии даже на менее значимых графиках автоматически.

1984

1.  Отправленные: •  email id •  IP •  type •  language •  timestamp •  source host

2.  Клики / открытия: •  email id •  timestamp

3.  Входящие: •  type •  timestamp

Выводы

1.  Быть гуру не надо, достаточно хотеть разобраться. 2.  Правильная архитектура без мониторинга не спасёт. 3.  Внезапно: отправка почты – тоже highload! 4.  … 5.  PROFIT!!!

Ваши вопросы *

* Кроме вопросов о том, как мы доставляемся в Inbox

Recommended