Как строится инфраструктура сервисов email-рассылок: Опыт Pechkin-mail.ru

Сегодня мы расскажем о том, как строится инфраструктура подобных сервисов, на примере проекта Pechkin-mail.ru.

Зачем нужны такие сервисы

Распространенное заблуждение заключается в том, что сервисы для создания email-рассылок используются спамерами для отправки писем с предложениями о покупке виагры. На самом же деле сервисы вроде нашего (или зарубежного Mailchimp) нужны для осуществления email-рассылок на адреса людей, которые подписались на рассылку компании (например, на ее сайте) — то есть явно выразили свое согласие на получение писем.

Компании могут отправлять своим клиентам информационные сообщения о работе своих систем (пример — оповещение о новых комментариях на Хабре), предлагать какие-то товары или скидки (в любой момент от получения таких писем можно отписаться).

Добропорядочные сервисы email-рассылок со спамерами просто не работают и жестко модерируют отправляемый контент, чтобы не самим не попасть под санкции со стороны почтовых сервисов.

Как это работает

На самом деле сервис Pechkin-mail.ru самостоятельно не доставляет письма, а создает их в виде конечного html-кода, формирует в mimi-формате, персонализирует, отслеживает судьбу письма (было ли оно открыто и т.д.), но не «вкладывает» их в почтовые ящики.

Для этой задачи существует множество ESP — например, andrill, smtp.com, mailgun, sendgrid. С помощью эти облачных почтовых провайдеров нам удается добиваться крайне высокого уровня доставляемости писем, высокой контролируемости пула ip-адресов и низкого уровня операционных расходов.

Выбор технологий

По опыту создания высоконагруженных веб-сервисов для бизнеса (сотни и тысячи пользователей) мы знаем, что основные расходы технического характера уходят на поддержку текущего кода, разработку новых функций. Банально, на зарплаты. Именно поэтому часто не стоит мудрить в выборе языка программирования и других технологий. Самое главное, что нужно понимать — 99% проблем могут быть сняты корректной архитектурой.

Ниже представлена информация об основных технических характеристиках проекта Peckin-mail:

Язык программирования

Сервис написан на PHP и JS. При этом в ряде функций используются проприетарные библиотеки на C (их создание — тема для отдельного топика).

Базы данных и ОС

Сервис рассылок — крайне высоконагруженный сервис: в день мы отправляем до 10 млн писем. И значительная доля этих писем отслеживаются (открытия, клики и т.д.). Все это генерирует запросы к базе данных. Соответсвтенно, необходимо всеми силами избегать проблем с ней (отказы вообще недопустимы).

Мы долго решали эту задачу и пришли к кластеру на Percona (на Хабре есть прекрасная статья о его настройке). Это отказоустойчивый, горизонтально-масштабируемый кластер с master-master репликацией (приятный бонус — «горячие» бэкапы без снижения производительности).

Percona используется для реализации бизнес-логики и генерации отчетов, кроме того, для очередей и оперативных хранилищ различных данных в процессе отправки писем мы применяем MongoDB. В качестве ОС используется Debian, виртуализация реализована через OpenVZ.

Железо и каналы

Как уже сказано выше, особенностью сервисов почтовых рассылок является большой объем данных, с которыми необходимо много и часто работать. Это значит, что без быстрых дисков не обойтись (мы сейчас используем SAS, но, конечно, SSD оптимальнее).

Сейчас сервис Pechkin-mail.ru работает на серверах DELL PowerEdgeTM R720 DX-150 64Gb RAM, 4x600Gb SAS, Hetzner EX-5, Hetzner EX-10. Дополнительно используются Amazon EC2 (10 инстансов для пиковой нагрузки) и Selectel Storage, который отвечает за хостинг картинок клиентов и их доставку до получателей рассылок (всем его рекомендуем из-за стоимости).

Также, очень желателен качественный и широкий канал — SMTP-трафик очень тяжелый, зачастую, это и картинки и контент, отправляемый сотням тысяч получателей за короткое время. Если взять среднюю рассылку в 150Кб (картинок почти нет, хостятся на стороннем сервере), то даже ее отправка по 10 000 подписчиков э — то уже 1,5Гб трафика. Нужно держать это в уме при проектировании системы.

Важные функции

Хороший сервис email-рассылок должен уметь успешно решать целый ряд задач. Ниже представлен список наиболее важных функций подобных инструментов.

Работа с адресными базами

Для работы с любым сервисом, который обрабатывает данные клиентов, важную роль играет скорость и легкость загрузки этой информации. Для сервиса рассылок важно быстро и без проблем для пользователя загружать адресные базы, содержащие email-адреса, имена, фамилии и другие дополнительные данные.

Мы реализовали для этих целей связку Excel и коммерческой библиотеки libxl — описание того, что в итоге получилось, опубликовано в отдельной статье на Хабре.

Помимо этого, «Печкин» предоставляет возможность сегментирования рассылок — например, на основе полей адресной базы, по активности подписчиков в предыдущих рассылках или дате добавления адресов в базу.

Создание рассылок

Верстка email-писем — отдельная и очень интересная тема. Мы публиковали правила верстки рассылок и рассказывали о том, как вставлять в письма видео с YouTube.

Кроме того, часто возникает необходимость в создании plain text версии рассылки — мы решили автоматизировать эту задачу и разработали генератор текстовых версий писем из HTML с помощью текстового браузера lynx (вот здесь можно почитать об этом решении подробнее).

Кроме того, на основе статистических данных об эффективности рассылок возможна тонкая настройка отправки писем — например, отправка в определенное время, равномерными кусками, создание A/B-рассылки (две рассылки для тестирования результативности разных вариантов заголовков, текстов писем и т.п.).

Борьба со спамом

Одна из основных задач сервиса email-маркетинга — это борьба со спамом. В «Печкине» она реализована следующими механизмами:

  • Премодерация отправляемых рассылок — все рассылки просматриваются сотрудниками сервиса вручную для того, чтобы проверить их соответствие политикам модерации (большая их часть основана на Административных и Технических правилах mail.ru). В автоматическом режиме модерация осуществляется лишь для самых «проверенных» клиентов;
  • Автоматическая система репутации — мы рассказывали о том, как она работает, в одном из предыдущих топиков.
  • Контроль за маяками спам-фильтров. Мы работаем со спам-фильтрами Mailgun, CloudMark и многими другими. Кроме того появляются автоматические API, позволяющие осуществлять маркировку потенциально «спамерских» рассылок и следить за ними в процессе отправки.
  • Автоматическая блокировка за спам. Если отчет почтового провайдера свидетельствуе то том, что рассылка детектирована, как спам — она мгновенно прекращается, и пользователю предлагается типовая инструкция по разблокировке (включая заполнение формы на сайте почтового провайдера и разъяснение легитимности адресных баз и контента). По результатам проверки рассылка либо разблокируется, либо аккаунт окончательно блокируется за спам.

Не нужно изобретать велосипед

Добиться хорошей работы высоконагруженного сервиса можно только, если он качественно спроектирован без создания всевозможных костылей. Для того, чтобы этого избежать, мы довольно активно используем доступные облачные решения (Amazon EC2, Selectel Cloud Storage). Это удобно и недорого: например, в период пиковых нагрузок (отправка более 30 рассылок одновременно), мы включаем дополнительно «инстансы» на Amazon EC2.

Благодаря грамотному построению инфраструктуры, нам удалось добиться показателя аптайма сервиса в 2014 году на уровне 99,98%, а с вопросами более 2,5 тысяч платящих клиентов удается справиться всего двум сотрудникам поддержки.

Show your support

Clapping shows how much you appreciated Alex Lashkov’s story.