为上游google gcm

时间:2015-10-20 08:08:33

标签: android google-cloud-messaging xmpp ejabberd

假设有一个应用程序在给定的时间点拥有数百万的安装量和数十万活跃用户。我需要将用户的活动数据记录到我的服务器。目前,我从设备向我的服务器发出HTTP请求。我有一堆运行Web服务器的机器,坐在亚马逊的ELB后面。他们解析来自设备的数据并将其放入mongodb。

现在,我想通过使用Google'GCM提供的上游CCS捕获设备数据(这样我就可以搭载GCM以获得更可靠的数据传输)我已经编写了一个原型XMPP服务器,我可以完成所有工作,但我担心扩大规模。如果Google开始以比我消耗的速度更快的速度向我发送消息,会发生什么?之前,我能够在负载均衡器后面使用多个服务器来解决高请求率问题。这里有负载均衡的概念吗?

如果我打开从我的服务器到Google服务器的多个连接(Google表示我可以为给定的发件人ID提供1000个连接),那么这些连接之间的传入请求是否会进行负载平衡?

最后,是否有推荐的解决方案来解决上述大多数问题?使用ejabberd会解决上面的一些问题吗?

非常感谢。

2 个答案:

答案 0 :(得分:3)

  

如果Google开始以比我消耗的速度更快的速度向我发送消息会怎样?

最后https://developers.google.com/cloud-messaging/ccs你可以阅读

  

相反,为避免app服务器过载,如果有太多未确认的消息,CCS将停止发送。因此,应用服务器应该"确认"通过CCS从客户端应用程序接收的上游消息,以尽快维持传入消息的持续流量。上述未决消息限制不适用于这些ACK。即使待处理的消息计数达到100,app服务器也应该继续为从CCS接收的消息发送ACK,以避免阻止传输新的上游消息。

在同一份文件中,您可以找到对第二和第三个问题的部分答案

  

如果连接失败,您应立即重新连接。验证后发生断开连接后无需退回。

对我来说,这意味着,谷歌实施了一个简单的冗余逻辑,可能不是一个公平的负载平衡系统(无论如何我希望如此)。如果您的数量很大,我建议您直接与他们联系。

对于最后一个,ejabberd是一个很好的产品,有很多部署的系统具有集群基础设施和大量关于如何做的文件。我建议你从这里开始http://docs.ejabberd.im/admin/guide/clustering/

无论如何,对于你的高音量,我会评估RabbitMQ,这是另一个Erlang宝石。

答案 1 :(得分:1)

ejabberd可以集群化并放置在负载均衡器后面以分发连接。 3或4服务器群集应该能够正确处理该负载并为您提供故障转移保护。您可以根据需要添加服务器。一旦接近10台服务器,您可能需要考虑将Redis用于内存数据库而不是mnesia。