Техническая сторона построения мобильных push-бекендов
Мнение автора может не совпадать с мнением редакции
Альтернативное название статьи "Зачем нужен Jeapie?"
В этой статье разберемся с техническими проблемами, возникающими при доставке push-уведомлений в режиме реального времени на сотни тысяч и миллионы устройств.
Этот материал будет полезен техническим специалистам и руководству компаний, которые уже имеют некоторый опыт выпуска продуктов для мобильных платформ. На написание этой статьи нас навели типичные вопросы “технарей”, которые мы слышим практически на каждом мероприятии, а также в комментариях к нашим постам в различных профессиональных сообществах.
Примерно такие:
Давайте разберемся подробнее.
Проблема 1. Одновременная работа с разными мобильными платформами.
Каждый провайдер уведомлений дает собственный сервис доставки push-уведомлений на устройства. В Android - это GCM (Google Cloud Messaging), в iOS и Mac - APNS (Apple Push Notification service). Для Windows Phone и Windows 8 используются Microsoft Push Notification Service (MPNS) и Windows Notification Service (WNS) соответственно. Для более экзотических устройств типа Blackberry или Samsung SmartTV это также собственные сервисы.
Если, к примеру, у вас уже есть класс на бекенде, который отсылает пуш-уведомления для iOS, то нужно будет вносить дополнительные библитеки для других платформ. Далее придется проводить рефакторинг и создавать дополнительный уровень абстракции (универсальный класс для работы с push-уведомлениями), чтобы постоянно не затрагивать логику работы всего бекенда в целом. Собрать даже из готовых open-source решений такой продукт задача сама по себе довольно трудоемкая, а уж поддерживать, покрывать тестами, отлавливать баги - и вовсе непростая.
Проблема 2. Хранение и использование неоднородных данных пользователей, идентификаторов, локализации.
Каждая платформа поддерживает разные типы идентификаторов устройств, разные форматы данных запроса и ответа сервера. Вам неизбежно придется делать новые и новые слои абстракции для собственного push-решения, к примеру такие:
Это все неизбежно приведет к росту доли бюджета разработки push-системы внутри общего бюджета на создание и поддержку продукта. Для эффективной работы в режиме реального времени вам прийдется инвестировать существенные ресурсы в разработку относительно простой системы коммуникации с пользователями.
Проблема 3. Масштабирование.
Если даже у вас уже есть свое собственное решение, которое справляется с вышеперечисленными задачами, вы можете также столкнуться с проблемами когда ваше приложение станет успешным. Начиная с порядка в десятки тысяч устройств, на которые вы пожелаете выслать уведомления, простой перебор идентификаторов в цикле уже будет давать задержки, существенно влияющие на опыт использования вашего приложения. Актуальность множества типов push-уведомлений очень ограничена по времени. “Через несколько минут” - это уже не вовремя.
К примеру, один "воркер", отправляющий последовательно уведомления на одну платформу одному миллиону устройств, справится с задачей за 28(!) часов.
Также вы скорее всего не будете иметь возможности восстановить процесс, если что-нибудь пойдет не так в процессе работы цикла отправки уведомлений. А как показывает практика ошибки время от времени случаются, ведь для доставки уведомления на девайс ваш запрос должен пройти вашу инфраструктуру, сервисы вендора мобильной ОС, интернет-канал пользователя.
Как результат: вам прийдется также вынести свои push-сервисы на отдельные сервера и сделать еще один финальный уровень абстракции, чтобы по сути создать отдельный собственный сервис push-уведомлений и работать с ним через API из вашего слоя бизнес-логики.
Очевидно, что даже если вы решите эти проблемы, сохраняя информацию об устройствах в нескольких базах данных (шардинг), создавая множество виртуальных машин, которые будут отправлять уведомления одновременно, периодически сохраняя прогресс отправки на дисковое хранилище, все равно это останется слишком сложной задачей для реализации в виде всего лишь части вашего бэкенда.
Как Jeapie решает эти задачи?
Продукт Jeapie предлагает вам масштабируемую инфраструктуру для отправки различных типов push-уведомлений, которая поможет вам эффективно направлять кроссплатформенные, персонализированные уведомления миллионам пользователей.
Кроссплатформенность. Всего одним вызовом API Jeapie ваш мобильный бэкенд может отправить одновременные пуш-уведомления пользователям на устройствах Windows Phone 8, iOS, Android и др.
Управление устройствами. Использование Jeapie избавит вас от необходимости необходимости хранить и управлять идентификаторами устройств, которые используются сервисами уведомлений каждой из платформ (APNS, GCM, MPNS и др.). Наш продукт сам безопасно обрабатывает служебные ответы, истечение срока идентификатора устройства и так далее для каждой из платформ.
Сегментация. Мы даем полные возможности управления гибкой системой тегов. Вы можете назначать теги различным девайсам. Эти теги показывают интерес пользователя в уведомлениях или его свойства (возраст, пол, любимый спорт/команда, гео-расположение, биржевой индекс, логический идентификатор пользователя и так далее). Эти теги не нужно обрабатывать повторно или заботиться об их актуальности. Они обеспечивают приложениям очень простой путь для отправки таргетированных уведомлений миллионам устройств с помощью всего лишь одного вызова API, без необходимости для вас создавать свою собственную инфраструктуру маршрутизации уведомлений для каждого устройства.
Высокая персонализация. Jeapie предлагают встроенный механизм шаблонов, который позволит вам задать форму, формат и локализацию уведомлений для своих клиентов, оставляя ваш собственный код бэкенда чистым и независимым от мобильной платформы. Также наш продукт позаботится об правильном времени доставки согласно часовым поясам пользователя.
Масштабирование. Jeapie оптимизирован для отправки широковещательных рассылок пуш-уведомлений миллионам устройств с очень низкими задержками. Мы используем все современные облачные “примочки” - нереляционные базы данных, шардинг, балансировку нагрузки, кеширование и занимаемся постоянным улучшением производительности системы.
Универсальное API. Jeapie может быть легко интегрирован в любой имеющийся серверный бэкенд (Java, .NET, PHP, Python, Ruby или Node.js) c помощью понятного, хорошо документированного RESTful API. В мобильные приложения он интегрируются путем вставки готовых SDK-библиотек. Мы максимально упростили интеграцию Jeapie со сторонними системами и сервисами.
Enterprise поддержка. Наша команда предоставляет полную R&D поддержку и консультирование для высоконагруженных систем с потенциалом роста до сотен тысяч и миллионов подписчиков. Мы сфокусированы на push-уведомлениях уже очень долгое время, так что вы сможете положиться на нашу экспертизу и опыт, чтобы построить изначально устойчивую систему реал-тайм уведомлений для вашего продукта.
Итог. Вданной статье мы постарались показать как такая простая “фишка” приложения как push-уведомления довольно быстро может стать головной болью для любого паблишера, который выпускает успешные приложения.
Также были описаны какие основные задачи с технической стороны решает Jeapie как продукт и с помощью каких инструментов это достигается.
Любые вопросы вы можете оставлять в комментариях или присылать прямо на email
В этой статье разберемся с техническими проблемами, возникающими при доставке push-уведомлений в режиме реального времени на сотни тысяч и миллионы устройств.
Этот материал будет полезен техническим специалистам и руководству компаний, которые уже имеют некоторый опыт выпуска продуктов для мобильных платформ. На написание этой статьи нас навели типичные вопросы “технарей”, которые мы слышим практически на каждом мероприятии, а также в комментариях к нашим постам в различных профессиональных сообществах.
Примерно такие:
- Push - хорошо документированная технология, что мешает нам написать собственный класс на нашем бекенде и не платить за ваше решение?
- В сети Интернет можно найти много open-source библиотек для разных языков программирования, в которых уже реализована работа с APNS, GCM и так далее;
- Проблемы доставки push-уведомлений нет. Просто написал цикл по всем идентификаторам устройств, пробежался, разослал и все ок;
- У нас уже есть свой “велосипед”, написанный для прошлых проектов, почему бы нам просто не скопировать его еще раз?
- Мы будем платить вам просто за хостинг open-source библиотеки?
Давайте разберемся подробнее.
Проблема 1. Одновременная работа с разными мобильными платформами.
Каждый провайдер уведомлений дает собственный сервис доставки push-уведомлений на устройства. В Android - это GCM (Google Cloud Messaging), в iOS и Mac - APNS (Apple Push Notification service). Для Windows Phone и Windows 8 используются Microsoft Push Notification Service (MPNS) и Windows Notification Service (WNS) соответственно. Для более экзотических устройств типа Blackberry или Samsung SmartTV это также собственные сервисы.
Если, к примеру, у вас уже есть класс на бекенде, который отсылает пуш-уведомления для iOS, то нужно будет вносить дополнительные библитеки для других платформ. Далее придется проводить рефакторинг и создавать дополнительный уровень абстракции (универсальный класс для работы с push-уведомлениями), чтобы постоянно не затрагивать логику работы всего бекенда в целом. Собрать даже из готовых open-source решений такой продукт задача сама по себе довольно трудоемкая, а уж поддерживать, покрывать тестами, отлавливать баги - и вовсе непростая.
Проблема 2. Хранение и использование неоднородных данных пользователей, идентификаторов, локализации.
Каждая платформа поддерживает разные типы идентификаторов устройств, разные форматы данных запроса и ответа сервера. Вам неизбежно придется делать новые и новые слои абстракции для собственного push-решения, к примеру такие:
- учет локализации (языка уведомления) для пользователей из разных стран;
- учет часовых поясов и времени доставки уведомлений;
- учет нескольких устройств на одного пользователя, исключение дублирования уведомлений;
- шаблонизация уведомлений, выбор из готовых шаблонов;
- хранение различной персональной информации и классификация пользователей (возраст, пол, поведение в приложении).
Это все неизбежно приведет к росту доли бюджета разработки push-системы внутри общего бюджета на создание и поддержку продукта. Для эффективной работы в режиме реального времени вам прийдется инвестировать существенные ресурсы в разработку относительно простой системы коммуникации с пользователями.
Проблема 3. Масштабирование.
Если даже у вас уже есть свое собственное решение, которое справляется с вышеперечисленными задачами, вы можете также столкнуться с проблемами когда ваше приложение станет успешным. Начиная с порядка в десятки тысяч устройств, на которые вы пожелаете выслать уведомления, простой перебор идентификаторов в цикле уже будет давать задержки, существенно влияющие на опыт использования вашего приложения. Актуальность множества типов push-уведомлений очень ограничена по времени. “Через несколько минут” - это уже не вовремя.
К примеру, один "воркер", отправляющий последовательно уведомления на одну платформу одному миллиону устройств, справится с задачей за 28(!) часов.
Также вы скорее всего не будете иметь возможности восстановить процесс, если что-нибудь пойдет не так в процессе работы цикла отправки уведомлений. А как показывает практика ошибки время от времени случаются, ведь для доставки уведомления на девайс ваш запрос должен пройти вашу инфраструктуру, сервисы вендора мобильной ОС, интернет-канал пользователя.
Как результат: вам прийдется также вынести свои push-сервисы на отдельные сервера и сделать еще один финальный уровень абстракции, чтобы по сути создать отдельный собственный сервис push-уведомлений и работать с ним через API из вашего слоя бизнес-логики.
Очевидно, что даже если вы решите эти проблемы, сохраняя информацию об устройствах в нескольких базах данных (шардинг), создавая множество виртуальных машин, которые будут отправлять уведомления одновременно, периодически сохраняя прогресс отправки на дисковое хранилище, все равно это останется слишком сложной задачей для реализации в виде всего лишь части вашего бэкенда.
Как Jeapie решает эти задачи?
Продукт Jeapie предлагает вам масштабируемую инфраструктуру для отправки различных типов push-уведомлений, которая поможет вам эффективно направлять кроссплатформенные, персонализированные уведомления миллионам пользователей.
Кроссплатформенность. Всего одним вызовом API Jeapie ваш мобильный бэкенд может отправить одновременные пуш-уведомления пользователям на устройствах Windows Phone 8, iOS, Android и др.
Управление устройствами. Использование Jeapie избавит вас от необходимости необходимости хранить и управлять идентификаторами устройств, которые используются сервисами уведомлений каждой из платформ (APNS, GCM, MPNS и др.). Наш продукт сам безопасно обрабатывает служебные ответы, истечение срока идентификатора устройства и так далее для каждой из платформ.
Сегментация. Мы даем полные возможности управления гибкой системой тегов. Вы можете назначать теги различным девайсам. Эти теги показывают интерес пользователя в уведомлениях или его свойства (возраст, пол, любимый спорт/команда, гео-расположение, биржевой индекс, логический идентификатор пользователя и так далее). Эти теги не нужно обрабатывать повторно или заботиться об их актуальности. Они обеспечивают приложениям очень простой путь для отправки таргетированных уведомлений миллионам устройств с помощью всего лишь одного вызова API, без необходимости для вас создавать свою собственную инфраструктуру маршрутизации уведомлений для каждого устройства.
Высокая персонализация. Jeapie предлагают встроенный механизм шаблонов, который позволит вам задать форму, формат и локализацию уведомлений для своих клиентов, оставляя ваш собственный код бэкенда чистым и независимым от мобильной платформы. Также наш продукт позаботится об правильном времени доставки согласно часовым поясам пользователя.
Масштабирование. Jeapie оптимизирован для отправки широковещательных рассылок пуш-уведомлений миллионам устройств с очень низкими задержками. Мы используем все современные облачные “примочки” - нереляционные базы данных, шардинг, балансировку нагрузки, кеширование и занимаемся постоянным улучшением производительности системы.
Универсальное API. Jeapie может быть легко интегрирован в любой имеющийся серверный бэкенд (Java, .NET, PHP, Python, Ruby или Node.js) c помощью понятного, хорошо документированного RESTful API. В мобильные приложения он интегрируются путем вставки готовых SDK-библиотек. Мы максимально упростили интеграцию Jeapie со сторонними системами и сервисами.
Enterprise поддержка. Наша команда предоставляет полную R&D поддержку и консультирование для высоконагруженных систем с потенциалом роста до сотен тысяч и миллионов подписчиков. Мы сфокусированы на push-уведомлениях уже очень долгое время, так что вы сможете положиться на нашу экспертизу и опыт, чтобы построить изначально устойчивую систему реал-тайм уведомлений для вашего продукта.
Итог. Вданной статье мы постарались показать как такая простая “фишка” приложения как push-уведомления довольно быстро может стать головной болью для любого паблишера, который выпускает успешные приложения.
Также были описаны какие основные задачи с технической стороны решает Jeapie как продукт и с помощью каких инструментов это достигается.
Любые вопросы вы можете оставлять в комментариях или присылать прямо на email
0