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

Сас Андрей,
Badoo
А кто говорит?
А кто говорит?

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

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

Я:
•руковожу развитием почтовой рассылки, могу знать не
все детали;
•не админ (извините!).
Хвастаюсь:
•год без пролёжек почтовой инфраструктуры;
А кто говорит?

Я:
•руковожу развитием почтовой рассылки, могу знать не
все детали;
•не админ (извините!).
Хвастаюсь:
•год без пролёжек почтовой инфраструктуры;
•97% доставки в инбокс;
А кто говорит?

Я:
•руковожу развитием почтовой рассылки, могу знать не
все детали;
•не админ (извините!).
Хвастаюсь:
•год без пролёжек почтовой инфраструктуры;
•97% доставки в инбокс;
•среднее время доставки почты – 25 с.
CodeFest 2012. Сас А. — Как слать 100М писем каждый день
О чём буду
рассказывать?
О чём буду
         рассказывать?



А как люди отправляют почту?
CodeFest 2012. Сас А. — Как слать 100М писем каждый день
О чём буду
            рассказывать?



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


2. Предоставить прозрачный API программистам.
3. Обеспечить отправку почты в объёмах до 100М
   писем в день.
4. Обеспечить доставку почты в инбоксы в 95%+
   случаев.
О чём НЕ буду
            рассказывать?



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


Казалось бы:
•поднял MTA
•сделал mail()
•...
•PROFIT!
А что в этом сложного?


Казалось бы:
•поднял MTA
•сделал mail()
Однако:
•отправка 1 письма = обработка 1 динамического хита
А что в этом сложного?


Казалось бы:
•поднял MTA
•сделал mail()
Однако:
•отправка 1 письма = обработка 1 динамического хита
•а ведь письма ещё нужно сгенерить
А что в этом сложного?


Казалось бы:
•поднял MTA
•сделал mail()
Однако:
•отправка 1 письма = обработка 1 динамического хита
•а ведь письма ещё нужно сгенерить
•смелость пойти и узнать правду!!1111
Откуда взялась цифра
                     100М?


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


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


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


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

2.Появляется необходимость создать письмо.
3.Постановка в очередь на создание письма.
4.Генерация письма по задачам из очереди на
создание.
5.Постановка в очередь на отправку.
6.Отсылка письма из очереди на отправку.
Очередь на отправку


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



Это SMTP-клиент, эмулирующий работу sendmail.
Нам он нравится, т.к.:
•ничего лишнего, только отсылает письмо в MTA (hub)
•супер простой конфиг
•мы его слегка допилили (таймауты + параметры)
Балансировка между
                      MTA

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

Хорошее место, чтобы делать добрые дела:
•подстановку мониторинговых параметров в ссылки
•подстановку картинок для мониторинга открытий
•проверку целостности и корректности письма
•подстановку технических заголовков
•и даже проверку работоспособности ссылок!
Железо почтового
   кластера
Как тюнить 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
CodeFest 2012. Сас А. — Как слать 100М писем каждый день
Чего не хватало больше
                    всего?

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


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


Среднее время отправки в MTA:
• PINBA – наш собственный сервис мониторинга


Среднее время доставки почты в отдельный почтовый
  сервис:
• парсим логи MTA
• хитрая агрегационная структура (highload!!1111)
CodeFest 2012. Сас А. — Как слать 100М писем каждый день
CodeFest 2012. Сас А. — Как слать 100М писем каждый день
CodeFest 2012. Сас А. — Как слать 100М писем каждый день
CodeFest 2012. Сас А. — Как слать 100М писем каждый день
CodeFest 2012. Сас А. — Как слать 100М писем каждый день
CodeFest 2012. Сас А. — Как слать 100М писем каждый день
Зачем так много?
Dashboard нас спасёт?


1. Несколько dashboard’ов.


2. Даже dashboard’ы стали слишком сложными.


3. Детектировать аномалии даже на менее значимых
   графиках автоматически.
1984
Выводы


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


* Кроме вопросов о том, как
   мы доставляемся в Inbox
CodeFest 2012. Сас А. — Как слать 100М писем каждый день
CodeFest 2012. Сас А. — Как слать 100М писем каждый день
CodeFest 2012. Сас А. — Как слать 100М писем каждый день

More Related Content

PDF
Почта в интернет-проекте: инфраструктура, статистика, мониторинг
PDF
Eмейл-рассылки для профи: частые ошибки, что улучшать, как мониторить (Андрей...
PDF
Емейл консалтинг как он есть - о чём нужно думать емейл-маркетологу, чтобы сд...
PPT
«Хайлоад в рассылке почты: как спать спокойно»
PPTX
Впервые в Рунете: сказ о 100М писем в день (Андрей Сас)
PPTX
Хайлоад в рассылке почты: как спать спокойно
PDF
Возможности и барьеры "разговорного" интеллекта
PDF
Out of Cloud. Услуги по email маркетингу
Почта в интернет-проекте: инфраструктура, статистика, мониторинг
Eмейл-рассылки для профи: частые ошибки, что улучшать, как мониторить (Андрей...
Емейл консалтинг как он есть - о чём нужно думать емейл-маркетологу, чтобы сд...
«Хайлоад в рассылке почты: как спать спокойно»
Впервые в Рунете: сказ о 100М писем в день (Андрей Сас)
Хайлоад в рассылке почты: как спать спокойно
Возможности и барьеры "разговорного" интеллекта
Out of Cloud. Услуги по email маркетингу

What's hot (7)

PDF
как вырастить и воспитать чатбота для дела
PDF
Expert sender - How to increase income // Как увеличить прибыль на 200%
PPT
Ошибки в рассылках известных компаний. Александр Носач, AdSamples
PPT
10 ключевых ошибок в рассылках известных компаний Александр Носач (DirectList...
PDF
Михаил Терентьев. MailingDay Moscow 2016. Дизайн писем. Взгляд с другой стороны
PPTX
Типичные проблемы с массовыми рассылками и как их избежать
PPTX
Удобство ваших писем для читателей. Как это влияет на продажи?
как вырастить и воспитать чатбота для дела
Expert sender - How to increase income // Как увеличить прибыль на 200%
Ошибки в рассылках известных компаний. Александр Носач, AdSamples
10 ключевых ошибок в рассылках известных компаний Александр Носач (DirectList...
Михаил Терентьев. MailingDay Moscow 2016. Дизайн писем. Взгляд с другой стороны
Типичные проблемы с массовыми рассылками и как их избежать
Удобство ваших писем для читателей. Как это влияет на продажи?
Ad

Similar to CodeFest 2012. Сас А. — Как слать 100М писем каждый день (20)

PDF
Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...
PPT
Доклад Андрея Саса на конференции HPC 2013. "Хайлоад в рассылке почты: как сп...
PDF
SECON'2016. Васильков Василий, Серверное программирование сегодня
PDF
Интернет-бизнес Как повысить доставляемость вашей email-рассылки (email-рассы...
PDF
PDF
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
PDF
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
PDF
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
PDF
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
PDF
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
PDF
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
PDF
Zabbix в badoo, от lld к super discovery
PDF
Алексей Лебедев (Wamba)
PPTX
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
PPTX
Жизнь проекта на production
PPT
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
PDF
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
PDF
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
PDF
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
PPTX
Опыт эксплуатации большого проекта на Ruby
Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...
Доклад Андрея Саса на конференции HPC 2013. "Хайлоад в рассылке почты: как сп...
SECON'2016. Васильков Василий, Серверное программирование сегодня
Интернет-бизнес Как повысить доставляемость вашей email-рассылки (email-рассы...
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Zabbix в badoo, от lld к super discovery
Алексей Лебедев (Wamba)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
Опыт эксплуатации большого проекта на Ruby
Ad

More from CodeFest (20)

PDF
Alexander Graebe
PDF
Никита Прокопов
PPTX
Денис Баталов
PDF
Елена Гальцина
PDF
Александр Калашников
PDF
Ирина Иванова
PDF
Marko Berković
PDF
Денис Кортунов
PDF
Александр Зимин
PDF
Сергей Крапивенский
PDF
Сергей Игнатов
PDF
Николай Крапивный
PDF
Alexander Graebe
PDF
Вадим Смирнов
PDF
Константин Осипов
PDF
Raffaele Rialdi
PDF
Максим Пугачев
PDF
Rene Groeschke
PDF
Иван Бондаренко
PDF
Mete Atamel
Alexander Graebe
Никита Прокопов
Денис Баталов
Елена Гальцина
Александр Калашников
Ирина Иванова
Marko Berković
Денис Кортунов
Александр Зимин
Сергей Крапивенский
Сергей Игнатов
Николай Крапивный
Alexander Graebe
Вадим Смирнов
Константин Осипов
Raffaele Rialdi
Максим Пугачев
Rene Groeschke
Иван Бондаренко
Mete Atamel

CodeFest 2012. Сас А. — Как слать 100М писем каждый день

  • 1. Как слать 100М писем каждый день (и спать спокойно) Сас Андрей, Badoo
  • 3. А кто говорит? Я: •руковожу развитием почтовой рассылки, могу знать не все детали;
  • 4. А кто говорит? Я: •руковожу развитием почтовой рассылки, могу знать не все детали; •не админ (извините!).
  • 5. А кто говорит? Я: •руковожу развитием почтовой рассылки, могу знать не все детали; •не админ (извините!). Хвастаюсь: •год без пролёжек почтовой инфраструктуры;
  • 6. А кто говорит? Я: •руковожу развитием почтовой рассылки, могу знать не все детали; •не админ (извините!). Хвастаюсь: •год без пролёжек почтовой инфраструктуры; •97% доставки в инбокс;
  • 7. А кто говорит? Я: •руковожу развитием почтовой рассылки, могу знать не все детали; •не админ (извините!). Хвастаюсь: •год без пролёжек почтовой инфраструктуры; •97% доставки в инбокс; •среднее время доставки почты – 25 с.
  • 10. О чём буду рассказывать? А как люди отправляют почту?
  • 12. О чём буду рассказывать? Как отправлять много-много писем, быть уверенным в себе и спать по ночам спокойно
  • 13. Бизнес-задачи 2. Предоставить прозрачный API программистам. 3. Обеспечить отправку почты в объёмах до 100М писем в день. 4. Обеспечить доставку почты в инбоксы в 95%+ случаев.
  • 14. О чём НЕ буду рассказывать? Как сделать так, чтобы ваши письма не попадали в Spam
  • 15. А что в этом сложного? Казалось бы: •поднял MTA •сделал mail() •... •PROFIT!
  • 16. А что в этом сложного? Казалось бы: •поднял MTA •сделал mail() Однако: •отправка 1 письма = обработка 1 динамического хита
  • 17. А что в этом сложного? Казалось бы: •поднял MTA •сделал mail() Однако: •отправка 1 письма = обработка 1 динамического хита •а ведь письма ещё нужно сгенерить
  • 18. А что в этом сложного? Казалось бы: •поднял MTA •сделал mail() Однако: •отправка 1 письма = обработка 1 динамического хита •а ведь письма ещё нужно сгенерить •смелость пойти и узнать правду!!1111
  • 19. Откуда взялась цифра 100М? • 50М – каждый день • 70М – в пике • 100М – просто красивая цифра • 150М – «пасаны ваще ребята. молодцы, могёте!»
  • 20. Особенности больших проектов Наши мантры: • нужно отправлять письма асинхронно
  • 21. Особенности больших проектов Наши мантры: • нужно отправлять письма асинхронно • по-настоящему (вдвойне) асинхронно!
  • 22. Особенности больших проектов Наши мантры: • нужно отправлять письма асинхронно • по-настоящему (вдвойне) асинхронно! • требуется балансировка между серверами
  • 23. Порядок отправки письма 2.Появляется необходимость создать письмо. 3.Постановка в очередь на создание письма. 4.Генерация письма по задачам из очереди на создание. 5.Постановка в очередь на отправку. 6.Отсылка письма из очереди на отправку.
  • 24. Очередь на отправку Наша реализация – на файлах. Преимущества: 3.Возможна работа без внешних сервисов. 4.Простота манипулирования письмами. 5.Легко получить статистику / логи. 6.Просто реализуются многократные попытки отправки.
  • 25. SSMTP вместо sendmail Это SMTP-клиент, эмулирующий работу sendmail. Нам он нравится, т.к.: •ничего лишнего, только отсылает письмо в MTA (hub) •супер простой конфиг •мы его слегка допилили (таймауты + параметры)
  • 26. Балансировка между MTA Первая версия – на базе железки F5 LTM: •weighted round robin •SMTP мониторинг Текущая реализация – скрипты на PHP + мониторинг от F5 LTM: •автоматическое управление всей балансировкой •красивый веб-интерфейс •скрипач (админ) не нужен!
  • 27. Автоматизация при отправке Хорошее место, чтобы делать добрые дела: •подстановку мониторинговых параметров в ссылки •подстановку картинок для мониторинга открытий •проверку целостности и корректности письма •подстановку технических заголовков •и даже проверку работоспособности ссылок!
  • 29. Как тюнить MTA? • оптимизировать файловую систему • увеличить число SMTP воркеров • увеличить число DNS воркеров • поставить локальный кэшер DNS-запросов • раскладывать очередь по большому числу директорий • увеличить лимиты на число соединений к одному MX серверу • выставить лимиты на число писем в сессии
  • 30. Наши MTA Исторически – Communigate Pro: •надёжный •ОЧЕНЬ быстрый Для «проблемных» почтовых сервисов – Postfix: •более конфигурируемый •есть возможность доработать напильником
  • 31. Хм, Communigate Pro?.. Но ведь есть Postfix, Exim, Hurricane, Message Systems, Zrinity и даже Exchange!
  • 32. Корпоративный комбайн •Email – первоначальный, основной продукт •Calendaring •VoIP •IM •File storage •IP PBX •Presence
  • 33. А кто им пользуется?
  • 34. Однако, цифры На старой машине с 1 диском SCSI 10k: •5 миллионов писем в сутки •до 100 писем в секунду в пике
  • 35. Общее ощущение + чрезвычайно стабилен, вплоть до LA = 200 и очереди в 1М писем + высокая производительность отправки писем + не требователен к памяти и CPU + достаточно настроек для большинства проектов * платный – нет возможности менять настройки для разных почтовиков – нет возможности допилить самим – проблемы с выводом некоторых видов статистики
  • 36. Статистика и мониторинг Пока не измеряешь – не контролируешь. Что было в начале? •графики по числу писем в очереди на каждом почтовике •сколько каких писем отправили за сутки •статистика по LA / CPU usage / Memory usage в Zabbix
  • 38. Чего не хватало больше всего? • число файлов, ожидающих отправки в MTA • число ошибок отправки писем в MTA • среднее время отправки письма в MTA • самые загруженные отправкой почты скриптовые машины • среднее время доставки почты в отдельный почтовый сервис
  • 39. Как реализовали? Число файлов, ожидающих отправки в MTA: • просто считаем файлы!  Число ошибок отправки в MTA: • просто считаем файлы!  Самые загруженные отправкой почты скриптовые машины: • лог в MySQL
  • 40. Как реализовали? Среднее время отправки в MTA: • PINBA – наш собственный сервис мониторинга Среднее время доставки почты в отдельный почтовый сервис: • парсим логи MTA • хитрая агрегационная структура (highload!!1111)
  • 48. Dashboard нас спасёт? 1. Несколько dashboard’ов. 2. Даже dashboard’ы стали слишком сложными. 3. Детектировать аномалии даже на менее значимых графиках автоматически.
  • 49. 1984
  • 50. Выводы 2. Быть гуру не надо, достаточно хотеть разобраться. 3. Правильная архитектура без мониторинга не спасёт. 4. Внезапно: отправка почты – тоже highload! 5. … 6. PROFIT!!!
  • 51. Ваши вопросы * * Кроме вопросов о том, как мы доставляемся в Inbox