Web services 高数量的持久连接

Web services 高数量的持久连接,web-services,persistence,load-balancing,Web Services,Persistence,Load Balancing,我正在设置一个项目,其中一个主要问题是如何实现一个简单的消息排队系统(类似于messenger聊天系统)。我希望避免轮询,但很可能会有很多并发连接(上万个)。这些将是HTTP+SSL连接,从应用程序而不是浏览器启动 我发现的一个解决方案是DNS负载平衡:将这些持久连接分布在一堆nginx Web服务器上 你觉得怎么样?任何其他可能的解决方案?DNS负载平衡将允许您在多个IP地址(可能是多台服务器)之间分发查询。请记住,您的客户端可以从一个请求到另一个请求获得不同的服务器,因此您的应用程序不能使用

我正在设置一个项目,其中一个主要问题是如何实现一个简单的消息排队系统(类似于messenger聊天系统)。我希望避免轮询,但很可能会有很多并发连接(上万个)。这些将是HTTP+SSL连接,从应用程序而不是浏览器启动

我发现的一个解决方案是DNS负载平衡:将这些持久连接分布在一堆nginx Web服务器上


你觉得怎么样?任何其他可能的解决方案?

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

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

工作量更多,但服务器资源明显减少

另外,编写您自己的服务器软件-确保它可以处理大量连接,并且非常轻量级,并且在进行负载平衡之前,您应该能够处理每台服务器数千个连接


-Adam

对于负载平衡,保持应用程序服务器无状态将大大拓宽这一领域。一旦你做到了这一点,你就可以自由地使用几乎任何通用的负载平衡器。从HTTP负载平衡器等特定协议到通用TCP级负载平衡器


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

如果您计划使用web服务(XML消息传递),您可以使用gsoap,它包含一个web服务器示例应用程序,它使用线程池。我已经使用这个和mysql(用于持久状态)运行了一个服务器。我同意Ryan关于减少/消除应用程序状态性的意见。

感谢Ryan的回复。我的问题是,如果我使用多个分布式负载平衡数据库,“最终一致性”模型不会有问题吗?也许是一种总是将我的请求指向同一个数据库的分片算法?我试图避免轮询,这就是为什么我想保持连接的活力。我想更多的是基于客户端IP的盲目第4层负载平衡。不过,我可能完全偏离了我的假设。