2011-08-13 39 views
1

我有一个要求为高吞吐量的大量客户端(超过500K并发)构建分布式的基于Comet的服务器。我目前正在研究使用Tornado来处理大量长时间轮询请求的高效率的可能性。基于分布式龙卷风的聊天服务器

我担心的是单个Tornado服务器是否可以处理如此大量的长轮询客户端。作为一个实验,我想将Tornado Chat演示(https://github.com/facebook/tornado/tree/master/demos/chat)扩展到分布式环境。即有一堆并行运行的Tornado聊天服务器,每个都负责一组不断变化的客户端。

我希望您对实施这样的方案有任何想法/想法,或对相关资源的任何参考。

谢谢!

回答

0

通常为了让基本的聊天分布在几个Tornado实例中,你需要创建一个分布式的消息传递机制,最直接的实现就是使用像RabbitMQ这样的消息队列(或者它的竞争对手)并发送扇出用户键入内容时的消息,而所有连接都在监听。

+0

伊万,rabbitmq在这种情况下会有用吗? – securecurve

+0

RabbitMQ有助于将消息从一个龙卷风实例chat.services.com:8001服务的客户端传递到另一个由另一个龙卷风实例chat.services.com:8002服务的客户端。主要的挑战是保持每个在线用户(在线状态)的状态:是否在线,离线,闲置。例如,Facebook开发了空闲策略算法:将用户活动确定为空闲1,2,5,8,11秒...等等。它有助于显着降低网络负载并达到良好的吞吐量。 –

0

我最初的想法是在前端有一个Nginx服务器/反向代理,而后面有多个Tornado实例,每个进程都可能是一个Tornado实例,尝试做一些基准测试到您的机器,以查看机器可以处理的不同进程中运行的多少个Tornado实例,当您注意到性能下降时,请在另一台机器上开始执行相同的操作。

Nginx将轮循所有你必须通过长轮询/ Tornado服务器/实例分配负载的服务器。

不太确定rabbitmq在这种情况下将如何有用。