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

Awa*_*esh 3 android load-balancing push-notification firebase-cloud-messaging

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

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

太多的其余 API 调用会将 CPU 利用率提高到 100%,并且我的服务器停止响应。

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

Amo*_*ble 7

如果无法批量发送主题通知,以下解决方案是解决方法。

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

在应用程序上收到通知后,您可以决定何时将其显示给用户。以这样的方式编写一个逻辑,假设一些用户会在收到通知时立即看到它,一些用户会在 2 分钟后看到它,一些用户会在 4 分钟后看到它等等。

您可以使用AlarmManagerHandler或类似的东西。

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. 改善你的 fetch data api 的延迟

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