54
Как слать 100М писем каждый день (и спать спокойно) Сас Андрей, Badoo

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

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

Сас Андрей, Badoo

Page 2: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

Page 3: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 4: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

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

Page 5: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

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

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

Page 6: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

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

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

Page 7: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

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

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

Page 8: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)
Page 9: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

Page 10: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 11: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)
Page 12: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 13: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

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

Page 14: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 15: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 16: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

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

Page 17: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

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

Page 18: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

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

Page 19: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 20: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 21: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 22: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 23: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

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

Page 24: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 25: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

SSMTP вместо sendmail

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

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

Page 26: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

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

Page 27: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 28: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

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

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

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

Page 29: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

Как тюнить MTA?

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

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

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

Page 30: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

Наши MTA

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

Page 31: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

Хм, Communigate Pro?..

 

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

и даже Exchange!  

 

Page 32: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 33: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

Page 34: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 35: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 36: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

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

Zabbix

Page 37: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)
Page 38: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

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

Page 39: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 40: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 41: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)
Page 42: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)
Page 43: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)
Page 44: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)
Page 45: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)
Page 46: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)
Page 47: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

Page 48: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

Dashboard нас спасёт?

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

Page 49: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

1984

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

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

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

Page 50: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

Выводы

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

Page 51: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)

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

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

Page 52: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)
Page 53: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)
Page 54: Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Андрей Сас)