2015-10-20 128 views
4

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

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

如果我打开谷歌的服务器从我的服务器的多个连接(谷歌说,我可以有,直到对于给定的发件人ID 1000个连接),将传入的请求被加载这些连接之间的平衡?

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

谢谢你一堆。

回答

1

ejabberd可以群集并放置在负载均衡器后面以分配连接。一个3或4个服务器集群应该能够处理这个负载,并让您保护失败。如果需要,您可以添加服务器。一旦你接近10台服务器,你可能会考虑使用Redis作为内存数据库而不是mnesia。

3

如果Google开始以比我消费快的速度发送邮件,会发生什么情况?

在结束https://developers.google.com/cloud-messaging/ccs你可以阅读

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

在同一份文件,你找到了部分答案,你的第二个和第三个问题

如果在连接失败的任何时候,你应该立即重新连接。认证后发生断开连接后,无需退出。

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

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

无论如何,为了您的高产量,我会评估另一个Erlang宝石RabbitMQ。