2012-09-29 134 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緩存。