2009-02-20 131 views
2

我设置了一个项目,主要问题之一是如何实现一个简单的消息队列系统(沿信使服务聊天系统的线东西)的。我想避免轮询,但很可能会有很多并发连接(成千上万)。这些将是HTTP + SSL连接,从应用程序而不是浏览器启动。大量的持久连接

一个解决方案,我发现是DNS负载均衡:跨越一堆nginx的Web服务器的分发这些持久连接。

您认为如何?其他可能的解决方案?

回答

0

DNS负载平衡将允许您在多个IP地址(可能是多个服务器)之间分配查询。请记住,您的客户可以从一个请求到另一个请求获得不同的服务器,因此您的应用程序不能使用本地状态管理。您的应用程序必须将其状态存储在一个集中的位置,如数据库。

0

您是否考虑过点对点?穿过防火墙的最新技术实际上非常有效,尤其是因为您在每个实例中都运行着自己的客户端软件,并且您有服务器来启动连接。

更多的工作,但显着减少服务器资源。

而且,写自己的服务器软件 - 确保它可以处理很多连接,是非常轻巧,你应该能够这样做负载均衡前处理成千上万每个服务器的连接。

-Adam

3

对于负载平衡,保持应用程序服务器无状态将显着地打开该字段。一旦你有了,你可以自由地使用几乎所有的通用负载平衡器。从HTTP负载均衡器等特定协议到通用TCP级负载均衡器。

保持无状态,其余的将比较微不足道。

+0

感谢您的回复瑞安。我的问题是,如果我使用多个分布式负载平衡数据库,那么“最终一致性”模型不会有问题吗?也许一个总是将我的请求指向同一个数据库的分片算法? – idevelop 2009-02-20 18:29:11

1

如果您在使用Web服务(XML消息传递)的规划,你可以使用gSOAP的,其中有一个包含的Web服务器示例应用程序,它使用线程池。我使用这个和MySQL运行服务器(用于持久状态)。我同意Ryan在减少/消除应用程序的状态方面的问题。

0

为这种消息传递设计的很好的解决方案是xmpp。它允许您扩展到拥有10000个连接,并以最小的服务器负载和最小的轮询来回传递消息。

看看下面的帖子来选择一个良好的XMPP框架供您使用。 What XMPP framework for Java to choose