2012-09-29 97 views
2

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

我需要编写一个复杂的,可扩展的基于网络套接字的web应用程序,恐怕很难缩放Tornado,而且看起来Vertx更适合于web套接字的水平缩放。

我也明白,Redis可以与Tornado结合使用来水平缩放发布/订阅系统,以及HAproxy来扩展SockJS请求。

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

+0

两者都可以。看不到缩放龙卷风的问题。 Vertx可能更容易,没有看过它。 –

回答

3

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

2

您还可以使用Sockjs Tornado + Rabbit MQ + Memcached来水平缩放。 RabbitMQ brocker将扮演消息总线从物理服务器A到物理服务器B的角色。 有关服务器的所有信息都可能存储在内存缓存中。例如需要从客户端插座C1(A)发送的消息M,以客户端 - 插座C2(B):

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

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

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

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

我在分散的应用程序中使用了这种方法。

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