Проблема масштабирования при отправке push-уведомлений (навалом) на все устройства, подписанные на тему с помощью FCM - PullRequest
0 голосов
/ 09 сентября 2018

Я подписал все устройства на тему, т.е. около 1 миллиона пользователей . Когда на устройстве получено уведомление, появляется кнопка действия, которая вызывает API REST.

Теперь, если я вызову уведомление для всех устройств, подписанных на определенную тему, все пользователи получат уведомление и коснутся кнопки действия, которая вызывает API остальных для получения данных.

Слишком много вызовов API отдыха увеличивают загрузку ЦП до 100%, и мой сервер перестает отвечать.

Можно ли заставить FCM отправлять уведомления всем устройствам, подписанным на разделы в пакетах, чтобы мой сервер мог справиться с нагрузкой

1 Ответ

0 голосов
/ 09 сентября 2018

Следующие решения являются обходным решением, если нет возможности отправить уведомление о теме в пакете.

1. Задержка времени отображения уведомления на стороне приложения.

После получения уведомления о приложении вы можете решить, когда показывать его пользователю. Напишите логику таким образом, чтобы, скажем, некоторые пользователи увидели уведомление сразу же после его получения, некоторые увидят его через 2 минуты, другие увидят его через 4 минуты и т. Д.

Вы можете использовать AlarmManager , Обработчик или что-то подобное.

2. Создать ведро из тем

Предположим, у вас есть тема sport_news. Разделите основную тему sport_news на sport_news_1, sport_news_2, sport_news_3 и так далее. Реализуйте свою собственную логику, чтобы разделить пользователей.

Например

пользователей, зарегистрированных в первый день, попадут в sport_news_1

пользователи, зарегистрированные в день 2, попадут в sport_news_2

и т. Д.

Таким образом, всякий раз, когда вам нужно отправить уведомление в тему sport_news, вы отправите уведомление всем темам, которые ему принадлежат, в нашем случае это будет sport_news_1, sport_news_2 и так далее. Вы можете отправить его через определенный интервал для обработки пакетов, поскольку у вас есть серверный элемент управления для отправки пакетов.

3. Масштабируйте сервер на определенный интервал для обработки большого трафика.

После отправки уведомления нескольким миллионам пользователей, зная, что вы получите высокий трафик, масштабируйте сервер в течение определенного времени для обработки большого трафика (скажем, 1-2 часа).

4. Увеличьте задержку ваших данных выборки api

Зная, что вы получите слишком много запросов для конкретного API данных выборки, вы можете реализовать кэширование, индексирование базы данных, в хранилище данных памяти или любой другой способ ускорить операцию выборки. Вам просто нужно найти способ как-то сократить время отклика для API выборки, и ваш сервер будет таким образом обслуживать большой трафик, и использование ЦП может уменьшиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...