Высоконагруженный сервис пуш-рассылок для аптечной сети «Фармленд»
Задача
С ростом пользовательской базы мобильного приложения «Фармленд» встала задача создания мощного, но гибкого канала коммуникации. Нужно было не просто заменить дорогие SMS на push, а построить отказоустойчивый сервис, способный:
- Выдерживать пиковые нагрузки.
- Интегрироваться с другими сервисами (остатков, корзины, статистики).
- Предоставлять инструменты для тонкой маркетинговой сегментации.
Мы разработали и внедрили выделенный микросервис пуш-рассылок, который стал частью общей экосистемы.
Архитектура
-
1
Серверная часть (PHP)
- База данных: Хранение информации о пользователях, устройствах, подписках и пуш-уведомлениях.
- API: Реализация API для взаимодействия с клиентскими приложениями. Включает методы для регистрации устройств, отправки пуш-уведомлений и управления подписками.
- Бизнес-логика: Обработка запросов от клиентских приложений, проверка подписок, формирование и отправка пуш-уведомлений.
-
2
Клиентская часть (Swift и Kotlin):
- Регистрация устройства: Взаимодействие с сервером для регистрации устройства и получения уникального идентификатора.
- Подписка на уведомления: Отправка запроса на сервер для подписки на определенные категории уведомлений.
- Обработка уведомлений: Получение и обработка пуш-уведомлений, отображение пользователю.
Для обеспечения безопасности и масштабируемости серверной части нужно использовать технологии, такие как аутентификация и авторизация пользователей, обработка ошибок, мониторинг и логирование. Клиентская часть должна быть оптимизирована для эффективного получения и обработки уведомлений, а также для обеспечения удобного пользовательского интерфейса.
Использование микросервисов
Для проекта Фармленд мы применяем архитектуру микросервисов, где каждая часть функциональности выделена в отдельный сервис. Наша система включает в себя сервис управления остатками товаров, который отвечает за контроль и обновление информации о наличии товаров на складе, а также сервис статистики, который собирает и анализирует данные о деятельности пользователей.
Кроме того, мы разработали отдельный микросервис для управления пуш-рассылками.
-
1
Старт с MVP и правильной архитектурой
Мы начали с базового функционала, но сразу заложили микросервисную архитектуру. Это позволило нам быстро и безболезненно вынести сервис рассылок на отдельный сервер, когда нагрузка выросла.
-
2
Борьба с нагрузкой и оптимизация
Рост числа пользователей выявил «узкие места». Мы провели комплексную оптимизацию:
- Приоритизация очередей: Уведомления о статусе заказов получили высший приоритет над рекламными.
- Шардинг базы данных: Самые большие таблицы с историей сообщений были разделены, что резко снизило нагрузку.
- Распределенная отправка: Чтобы не «положить» сервер в момент пиковой активности, мы реализовали умную рассылку с учетом часовых поясов и текущей нагрузки на систему.
-
3
Внедрение мощных маркетинговых инструментов
Мы превратили простой канал уведомлений в инструмент для роста среднего чека и удержания клиентов:
- Глубокая сегментация: Рассылки можно targeted по истории покупок, просмотрам, брошенным корзинам и даже истории поиска (например, отправка промокода на товары для малышей пользователям, которые искали тест на беременность 9 месяцев назад).
- Массовые рассылки через Excel: Маркетологи получили возможность легко загружать и отправлять персонализированные сообщения через удобный импорт из Excel.
Результат
- Стабильная отправка 1 000 000+ пуш-уведомлений за одну рекламную кампанию.
- Снижение нагрузки на основные сервисы и повышение общей отказоустойчивости системы.
- Рост конверсии и LTV за счет персонализированных коммуникаций.
- Гибкая система, готовная к дальнейшему масштабированию.
Технологический стек
-
Бэкенд
PHP
-
Базы данных
MySQL с шардингом
-
Архитектура
МикросервисыОчереди сообщений
-
Мобильные клиенты
Swift
Kotlin