Впервые в Рунете: сказ о 100М писем в день (Андрей Сас)

Post on 14-Dec-2014

6.127 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Впервые в рунете:сказ о 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

top related