向使用 FCM 订阅主题的所有设备发送推送通知(批量)时出现扩展问题



我已经将所有设备订阅到一个主题,即大约 100 万用户。当设备中收到通知时,有一个操作按钮调用 REST api。

现在,如果我触发对订阅特定主题的所有设备的通知,所有用户都会收到通知并点击操作按钮,该按钮将调用其余 API 来获取数据。

过多的 rest API 调用会将 CPU 利用率提高到 100%,我的服务器停止响应。

有什么方法可以让 FCM 批量向订阅主题的所有设备发送通知,以便我的服务器可以处理负载

如果无法

在批处理中发送主题通知,则以下解决方案是解决方法。

1.延迟在应用端显示通知的时间。

在应用上收到通知后,您可以决定何时向用户显示通知。以这样的方式编写一个逻辑,假设某些用户将在收到通知时立即看到通知,某些用户将在 2 分钟后看到它,某些用户将在 4 分钟后看到它,依此类推。

您可以使用AlarmManager,Handler或类似的东西。

2. 创建主题桶

假设您有一个主题为sport_news.将主要话题sport_news分为sport_news_1sport_news_2sport_news_3等。实现自己的逻辑来划分用户。

例如

在第 1 天注册的用户将陷入sport_news_1

在第 2 天注册的用户将陷入sport_news_2

等等。

因此,每当您必须向主题sport_news发送通知时,您都会将通知发送到属于它的所有主题,在我们的例子中,它将是sport_news_1sport_news_2等。您可以按一定的时间间隔发送它来处理批处理,因为您具有服务器端控件来批量发送它。

3. 将服务器扩展一定间隔以处理大流量。

在向数百万用户发送通知并知道您将获得高流量后,然后将服务器扩展一段时间以处理大量流量(例如 1-2 小时(。

4. 改善提取数据 API 的延迟

知道您将收到太多针对特定提取数据 API 的请求,您可以实现缓存、数据库索引、内存数据存储或任何其他方法来加快获取操作。您只需要找到一种方法以某种方式减少获取 api 的响应时间,您的服务器将以这种方式提供大量流量,并且 CPU 利用率可能会降低。

相关内容

  • 没有找到相关文章

最新更新