使用 FCM 向订阅主题的所有设备发送推送通知(批量)时出现缩放问题
Scaling issue while sending push notifications (in bulk) to all the devices subscribed to a topic using FCM
我已经为所有设备订阅了一个主题,即 大约 100 万用户。当设备收到通知时,会出现一个调用 REST api.
的操作按钮
现在,如果我向订阅特定主题的所有设备触发通知,所有用户都会收到通知并点击操作按钮,这会调用其余设备 API 来获取数据。
过多的休息 API 调用将 CPU 利用率提高到 100%,我的服务器停止响应。
有什么方法可以让 FCM 向批量订阅主题的所有设备发送通知,以便我的服务器可以处理负载
Following solutions are workaround if there is no way to send the topic notification in the batch.
1.延迟app端显示通知的时间。
应用程序收到通知后,您可以决定何时向用户显示通知。以这样的方式编写一个逻辑,假设有些用户会在收到通知后立即看到,有些会在 2 分钟后看到,有些会在 4 分钟后看到,依此类推。
您可以使用 AlarmManager, Handler 或类似的东西。
2。创建主题桶
假设您有一个主题 sport_news
。将主题sport_news
分为sport_news_1
、sport_news_2
、sport_news_3
等。实现自己的逻辑来划分用户。
例如
第1天注册的用户将落入sport_news_1
第2天注册的用户将落入sport_news_2
等等。
所以每当你必须向主题 sport_news
发送通知时,你将向属于它的所有主题发送通知,在我们的例子中它将是 sport_news_1
, sport_news_2
等等。您可以按一定的时间间隔发送它来处理批次,因为您有服务器端控件来分批发送它。
3。将服务器缩放一定间隔以处理大流量。
在向数百万用户发送通知并知道您将获得高流量后,然后将您的服务器扩展一段时间以处理大量流量(比如 1-2 小时)。
4.改善获取数据的延迟 api
知道您将收到太多针对特定提取数据的请求api,您可以实施缓存、数据库索引、内存数据存储或任何其他方式来加速提取操作。您只需要找到一种方法来以某种方式减少获取 api 的响应时间,您的服务器将以这种方式提供大量流量,并且 cpu 利用率可能会降低。
我已经为所有设备订阅了一个主题,即 大约 100 万用户。当设备收到通知时,会出现一个调用 REST api.
的操作按钮现在,如果我向订阅特定主题的所有设备触发通知,所有用户都会收到通知并点击操作按钮,这会调用其余设备 API 来获取数据。
过多的休息 API 调用将 CPU 利用率提高到 100%,我的服务器停止响应。
有什么方法可以让 FCM 向批量订阅主题的所有设备发送通知,以便我的服务器可以处理负载
Following solutions are workaround if there is no way to send the topic notification in the batch.
1.延迟app端显示通知的时间。
应用程序收到通知后,您可以决定何时向用户显示通知。以这样的方式编写一个逻辑,假设有些用户会在收到通知后立即看到,有些会在 2 分钟后看到,有些会在 4 分钟后看到,依此类推。
您可以使用 AlarmManager, Handler 或类似的东西。
2。创建主题桶
假设您有一个主题 sport_news
。将主题sport_news
分为sport_news_1
、sport_news_2
、sport_news_3
等。实现自己的逻辑来划分用户。
例如
第1天注册的用户将落入sport_news_1
第2天注册的用户将落入sport_news_2
等等。
所以每当你必须向主题 sport_news
发送通知时,你将向属于它的所有主题发送通知,在我们的例子中它将是 sport_news_1
, sport_news_2
等等。您可以按一定的时间间隔发送它来处理批次,因为您有服务器端控件来分批发送它。
3。将服务器缩放一定间隔以处理大流量。
在向数百万用户发送通知并知道您将获得高流量后,然后将您的服务器扩展一段时间以处理大量流量(比如 1-2 小时)。
4.改善获取数据的延迟 api
知道您将收到太多针对特定提取数据的请求api,您可以实施缓存、数据库索引、内存数据存储或任何其他方式来加速提取操作。您只需要找到一种方法来以某种方式减少获取 api 的响应时间,您的服务器将以这种方式提供大量流量,并且 cpu 利用率可能会降低。