【发布时间】:2012-04-24 07:42:21
【问题描述】:
我正在构建一个分布式系统,该系统可能包含数百万个客户端,这些客户端都需要保持开放(最好是 HTTP)连接以等待来自服务器(在其他地方运行)的命令。消息/命令的负载不会很高,可能是一条消息/秒/1000 个客户端,这意味着它将是 1000 条消息/秒@100 万个客户端。 => 它基本上是关于并发连接的。
要求也很简单。单向消息传递(服务器->客户端),每个“通道”只有 1 个客户端。
我在技术方面非常开放(xmpp / websockets / comet / ...)。我正在使用 Google App Engine 作为服务器,但不幸的是,他们的“通道”对我不起作用(配额太低且没有 Java 客户端)。 XMPP 是一种选择,但非常昂贵。到目前为止,我使用的是 URL Fetch 和 pubnub,但他们刚刚开始为连接收费(大时代)。
所以:
有没有人知道可以以负担得起的方式为我做到这一点的服务?我发现大多数连接都受到限制或收取高额费用。
有自己实现这种服务器的经验吗?我实际上已经这样做了,它工作得很好(基于 Tomcat 和 NIO),但我还没有时间实际设置一个大型负载测试环境(部分是因为这仍然是一个后备解决方案,我更喜欢一个久经沙场的消息服务器)。您对每 GB 获得多少用户有任何经验吗?有什么硬性限制吗?
我的架构还允许对 msg 服务器进行分段,但我想最大化并发连接,因为 msg 处理 CPU 开销很小。
【问题讨论】:
-
这个比较难接受。您是否考虑过像 UDP 这样的无连接协议?您必须编写自己的 ack 协议,但您不必维护连接,也不必承担连接开销。我编写了一些非常高吞吐量的分布式服务器,但不是面向客户的。
-
仅供参考,我同时使用 netty 实现了它(见下面的答案)。
-
酷@Daniel。我得去看看。我听说过有关 Netty 的好消息,但从未使用过。
标签: xmpp websocket messaging publish-subscribe server-push