2

我一直在检查两个类似的解决方案,以使用独立的 Python 服务器通过 sockJS 支持 Web 套接字,到目前为止,我找到了两个解决方案。

我需要编写一个复杂的、可扩展的基于 Web 套接字的 Web 应用程序,而且恐怕很难扩展 Tornado,而且似乎 Vertx 对 Web 套接字的水平扩展更好。

我也知道 Redis 可以与 Tornado 一起用于水平扩展 pub/sub 系统,以及 HAproxy 用于扩展 SockJS 请求。

在 Vertx 和 Tornado 之间,编写支持 SockJS 的可扩展系统的首选解决方案是什么?

4

2 回答 2

3

Vertx 具有内置的集群支持。我还没有在很多节点上尝试过,但它似乎在少数节点上运行良好。在内部,它使用 hazelcast 来组织节点。Vertx 也在 JVM 上运行,它已经有许多可能有用的监控/管理工具。所以 Vertx 在我看来就像“包含电池”的解决方案。

于 2012-11-26T09:46:50.620 回答
2

您还可以使用 Sockjs Tornado + Rabbit MQ + Memcached 来进行水平扩展。RabbitMQ broker 将扮演从物理服务器 A 到物理服务器 B 的消息总线的角色。有关服务器的所有信息都可能存储在 memcache 中。例如,您需要将消息 M 从客户端套接字 C1(A) 发送到客户端套接字 C2(B):

  • 如果 A 的接收者托管在同一台服务器上(通过检查 memcache),则使用 SockJS 路由器直接发送 msg
  • 否则通过 RabbitMQ 代理 B1(A)(通过使用路由逻辑)将 M 发送到 B2(A),其中 SockJS 路由器 B 可以直接将您的消息发送到原始接收器 C2(B)。

由于 RabbitMQ 的 AMQP 协议使用 Erlang,消息传递非常稳定,非常适合高负载的分布式应用程序。为了支持我的话,请看这里:http ://www.rabbitmq.com/blog/2012/04/25/rabbitmq-performance-measurements-part-2/

每个物理服务器(具有以下电源 Xenon 4 节点,MEM 4Gb,HDD-140 -1000Gb)可以处理 3-5 个 sockjs tornado 实例。SockJS 实现也很好地通过 url 中的附加参数利用了反向代理(HaProxy)。

对于分布式测试,您可以使用 gemetr 或 tsung(基于 erlang)。

我在几个分布式应用程序中使用了这种方法。

此外,不要忘记使用 Tornado 内存作为 L1 缓存。

于 2013-06-09T16:26:44.177 回答