【问题标题】:Distributed Tornado-Based Chat Server基于分布式 Tornado 的聊天服务器
【发布时间】:2011-10-26 12:28:12
【问题描述】:

我需要为具有高吞吐量的大量客户端(超过 500K 并发)构建基于 Comet 的分布式服务器。我目前正在研究使用 Tornado 的可能性,因为它可以高效地处理大量长轮询请求。

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

如果您对实施此类计划有任何想法/想法,或对相关资源的任何引用,我将不胜感激。

谢谢!

【问题讨论】:

    标签: comet distributed tornado long-polling


    【解决方案1】:

    一般来说,要使基本聊天分布在多个 Tornado 实例上,您需要创建一个分布式消息传递机制,最直接的实现是使用某种消息队列,如 RabbitMQ(或其竞争对手)并发送扇出消息当用户键入内容时,所有连接都在监听。

    【讨论】:

    • Ivan,rabbitmq 在这种情况下会有什么用处?
    • RabbitMQ 帮助将消息从一个龙卷风实例 chat.services.com:8001 服务的客户端传递到另一个龙卷风实例 chat.services.com:8002 服务的另一个客户端。主要挑战是保持每个在线用户的状态(存在):是否在线、离线、空闲。例如,Facebook 开发了空闲策略算法:将用户活动确定为空闲 1、2、5、8、11 秒……等等。它有助于显着降低网络负载并达到良好的吞吐量。
    【解决方案2】:

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

    Nginx 将轮询您必须在长轮询/Tornado 服务器/实例上分配负载的所有服务器。

    不太确定 rabbitmq 在这种情况下会有什么用处。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多