Upload
ontico
View
6.127
Download
0
Embed Size (px)
DESCRIPTION
Citation preview
Впервые в рунете:сказ о 100М писем в день
Андрей Сас
А кто говорит?
А кто говорит?Я:
• руковожу развитием почтовой рассылки, могу знать не все детали;
А кто говорит?Я:
• руковожу развитием почтовой рассылки, могу знать не все детали;
• не админ (извините!).
А кто говорит?Я:
• руковожу развитием почтовой рассылки, могу знать не все детали;
• не админ (извините!).
Хвастаюсь:
• полгода без пролёжек почтовой инфраструктуры;
А кто говорит?Я:
• руковожу развитием почтовой рассылки, могу знать не все детали;
• не админ (извините!).
Хвастаюсь:
• полгода без пролёжек почтовой инфраструктуры;
• 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:
• автоматическое управление всей балансировкой
• красивый веб-интерфейс
• скрипач (админ) не нужен!
Автоматизация при отправкеХорошее место, чтобы делать добрые дела:
• подстановку мониторинговых параметров в ссылки
• подстановку картинок для мониторинга открытий
• проверку целостности и корректности письма
• подстановку технических заголовков
• и даже проверку работоспособности ссылок!
Железо почтового кластераКластер – это по 10 машин на каждой из площадок:
• 8 отправляющих
• 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:
• просто считаем файлы!
Число ошибок отправки в MTA:
• просто считаем файлы!
Самые загруженные отправкой почты скриптовые машины:
• лог в MySQL
Как реализовали?
Среднее время отправки в MTA:
• PINBA – наш собственный сервис мониторинга
Среднее время доставки почты в отдельный почтовый сервис:
• парсим логи MTA
• хитрая агрегационная структура (highload!!1111)
Зачем так много?
Dashboard нас спасёт?1. Несколько dashboard’ов.
2. Даже dashboard’ы стали слишком сложными.
3. Детектировать аномалии даже на менее значимых графиках автоматически.
19841. Отправленные:
• email id
• IP
• type
• language
• timestamp
• source host
2. Клики / открытия:
• email id
• timestamp
3. Входящие:
• type
• timestamp
Выводы1. Быть гуру не надо, достаточно хотеть разобраться.
2. Правильная архитектура без мониторинга не спасёт.
3. Внезапно: отправка почты – тоже highload!
4. …
5. PROFIT!!!
Ваши вопросы** Кроме вопросов о том, как мы доставляемся в Inbox