我已为所有设备订阅了一个主题,即大约100万用户。在设备中收到通知后,会有一个操作按钮,该按钮调用REST API。
现在,如果我向订阅该特定主题的所有设备触发通知,则所有用户都会收到该通知,然后点击操作按钮,该按钮将调用其余API来获取数据。
过多的剩余API调用将CPU利用率提高到100%,并且我的服务器停止响应。
有什么方法可以使FCM向批处理中订阅该主题的所有设备发送通知,以便我的服务器可以处理负载
答案 0 :(得分:1)
如果无法批量发送主题通知,则以下解决方法是解决方法。
1。延迟在应用程序一侧显示通知的时间。
在应用程序上收到通知后,您可以决定何时向用户显示通知。以这样的方式编写逻辑,例如,某些用户将在收到通知后立即看到通知,有些用户将在2分钟后看到通知,有些用户将在4分钟后看到通知,依此类推。
您可以使用AlarmManager,Handler或类似的东西。
2。创建主题桶
假设您的主题为sport_news
。将主要主题sport_news
分为sport_news_1
,sport_news_2
,sport_news_3
,依此类推。实施自己的逻辑来划分用户。
例如
在第一天注册的用户将属于sport_news_1
用户将属于sport_news_2
以此类推。
因此,每当您必须将通知发送到主题sport_news
时,您都将向所有属于该主题的主题发送通知,在我们的情况下,它将是sport_news_1
,sport_news_2
等上。您可以按一定的时间间隔发送它以处理批处理,因为您具有服务器端控件来按批发送。
3。将服务器扩展一定的间隔以处理大量流量。
在将通知发送给数百万用户并知道您将获得高流量后,请在一定时间内扩展服务器以处理大量流量(例如1-2小时)。
4。改善获取数据API的延迟时间
知道对特定的提取数据api会收到太多请求,因此可以在内存数据存储中实现缓存,数据库索引或其他任何方式来加快提取操作。您只需要找到一种以某种方式减少fetch api响应时间的方法,您的服务器将以此方式处理大量流量,并且CPU利用率可能会降低。