我正在构建一个分布式系统,该系统由潜在的数百万个客户端组成,这些客户端都需要保持开放(最好是 HTTP)连接以等待来自服务器(在其他地方运行)的命令。消息/命令的负载不会很高,可能是一条消息/秒/1000 个客户端,这意味着它将是 1000 条消息/秒 @ 100 万个客户端。 => 基本上是关于并发连接。
要求也很简单。一种方式消息传递(服务器-> 客户端),每个“ channel ”只有 1 个客户端。
我在技术方面非常开放(xmpp/websockets/Comet/...)。我使用 Google App Engine 作为服务器,但不幸的是,他们的“ channel ”对我不起作用(配额太低且没有 Java 客户端)。 XMPP 是一种选择,但非常昂贵。到目前为止,我使用的是 URL Fetch & pubnub,但他们刚刚开始对连接收费(很长时间)。
所以:
我的架构还允许分割 msg 服务器,但我想最大化并发连接,因为 msg 处理 CPU 开销最小。
最佳答案
我同时使用 netty.io 实现了我自己的消息服务器。 Netty 使用 Java NIO 并且扩展性非常好。对于空闲连接,每个连接的内存占用为 500 字节。我只做非常简单的消息转发(没有缓存、存储或其他花哨的东西),但是在小型亚马逊实例(1ECU/1.6GB)上,我很容易获得 1000 - 1500 msg/秒(每半 KB)。
否则,如果您正在寻找(付费)服务,那么我可以推荐 spire.io(他们不收取连接费用,但每条消息的价格更高)或 pubnub(他们对连接收费,但每条消息更便宜)。
关于xmpp - 服务器推送数百万并发连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10115477/