Android 为上游google gcm构建xmpp服务器

Android 为上游google gcm构建xmpp服务器,android,google-cloud-messaging,xmpp,ejabberd,Android,Google Cloud Messaging,Xmpp,Ejabberd,假设有一个应用程序,在给定的时间点上有上千万的安装和上千万的活跃用户。我需要将用户的活动数据记录到服务器上。目前,我从设备向服务器发出HTTP请求。我有一堆机器运行一个web服务器,位于亚马逊的ELB后面。他们解析来自设备的数据并将其放入mongodb中 现在,我想通过使用谷歌的GCM提供的上游CCS来捕获设备数据(这样我就可以借助GCM来更可靠地交付数据)。我已经编写了一个XMPP服务器原型,我可以让整个过程正常工作,但我担心它的扩展。如果谷歌开始以超出我消费能力的速度向我发送消息,会发生什么

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

现在,我想通过使用谷歌的GCM提供的上游CCS来捕获设备数据(这样我就可以借助GCM来更可靠地交付数据)。我已经编写了一个XMPP服务器原型,我可以让整个过程正常工作,但我担心它的扩展。如果谷歌开始以超出我消费能力的速度向我发送消息,会发生什么?早些时候,我能够使用负载平衡器后面的多个服务器来处理高请求率。这里有负载平衡的概念吗

如果我打开了从我的服务器到谷歌服务器的多个连接(谷歌说,对于给定的发送者id,我最多可以有1000个连接),传入的请求会在这些连接之间进行负载平衡吗

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


非常感谢。

ejabberd可以集群并放置在负载平衡器后面以分发连接。3或4服务器集群应该能够很好地处理该负载,并为您提供故障转移保护。如果需要,您可以添加服务器。一旦你接近10个服务器,你可能想考虑使用RISIS内存中的数据库,而不是MNESIA.

如果谷歌开始以超出我消费能力的速度向我发送消息,会发生什么

最后你可以读一读

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

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

如果在任何时候连接失败,应立即重新连接。在身份验证后发生断开连接后,无需后退

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

对于最后一个,ejabberd是一个很好的产品,有很多部署的系统都有集群基础设施,并且有很多关于如何实现taht的文档。我建议你从这里开始

无论如何,对于您的高容量,我将评估RabbitMQ,它是另一个Erlang宝石