WebSocket負載均衡

 這一期咱們來講一下WebSocket負載均衡的問題java

  咱們知道負載均衡在IT中是個很重要的概念,尤爲是在互聯網行業中,不少的產品都是web形式,提供基於http請求的服務。而單個服務器的處理能力是有限的,每每咱們會用到集羣。集羣環境下,http請求是根據配置的策略來分發到指定的服務節點上的,通常在各個機器的性能都一致狀況下,請求分發到每一個結點的機率都同樣。node

  這裏 我介紹幾種不一樣的方法,有我本身總結的,也有看的網友的方案nginx

  1 是經過jbosscache來實現。JBossCache是一個複製的事務處理緩存,它容許你緩存企業級應用數據來更好的改善性能。緩存數據被自動複製,讓你輕鬆進行Jboss服務器之間的集羣工做。因此並非爲了單純實現Load Balance而引入它,可使用它來作多應用之間的數據共享。每一個程序實例都有本身的一個count,該變量存在cache中,各個程序實例均可以讀取到其餘實例的count值git

  2 使用三方的WebSocket服務,推薦GoEasy,不用考慮負載均衡的問題,WebSocket這一塊都不用操心,簡單穩定。github

  3 websocket相信常常逛cnode社區的孩紙們都知道…具體API使用方式也再熟悉不過了…使用nodejs開發的websocket服務端也是品種繁多…github上總有你喜歡的…平時耍耍固然沒問題…若是真要是承載一個生產環境服務的核心…總會有些問題須要你去解決.
不可避免的問題:
  按照一個web請求佔用線程數爲參照…咱們能夠把nodejs稱之爲單線程語言…而java的servlet這種應該就是多線程語言了…咱們能夠想象在高併發狀況下…單線程語言的運行風險仍是蠻高的…畢竟若是一個請求出事那麼整個線程(進程)就退出了…因而乎中止服務了…爲了規避風險…咱們經常會使用負載均衡技術…保證整個系統的對外正常服務…
解決方案:web

  負載均衡方案目前來說…用apache的也很少了吧…廣泛的解決方案是使用nginx配置多個upstream.實現負載均衡…例子以下:

http{
upstream http_sr {

    server 192.168.0.2:8080;
  server 192.168.0.3:8080;

}

server {
   listen 80 ;
     proxy_pass http_sr;
}
}
  這樣對於部署在192.168.0.2和3這兩臺機器上http服務…就經過這臺nginx服務器實現了負載均衡…可是websocket的服務端nginx的http反向代理是不能支持的.從websocket的specs咱們能夠很明確的其實基於tcp協議的…http協議雖然也是基於tcp…它們都使用了tcp的握手方式…可是nginx的http_proxy_pass是不能支持websocket的…

  因而咱們能夠尋根問主…讓nginx支持tcp_proxy_pass…那websocket負載均衡的問題不就迎刃而解了…nginx有豐富的第三方擴展…一頓搜索在github上找到了yaoweibin老師的nginx_tcp_proxy_module

  二話不說下載此模塊…從新編譯nginx(此過程略吧你們應該都懂) …修改nginx配置文件加入下面conf:

tcp {
      upstream websocket {
          server 192.168.0.2:8080;
          server 192.168.0.3:8080;
          check interval=3000 rise=2 fall=5 timeout=1000;
      }
      server {
           listen 80;
           proxy_pass websocket;

      }
}
這個module的做者在description寫到:
 The motivation of writing these modules is Nginx’s high performance and
    robustness. At first, I developed this module just for general TCP
    proxy. And now, this module is frequently used in websocket reverse
    proxying.
  目前基本就是用來作websocket反向代理的…測試後確實是支持的…很是感謝module的開發者另外值得注意的是你要在nginx裏同時配置tcp和http…那麼它們是不能listen同一端口的…apache

  若是開發項目比較敢,推薦選擇2號方案,GoEasy: http://www.goeasy.io,緩存

若是不急能夠本身研究的話,能夠選其餘方案來深度學習一下。  服務器

相關文章
相關標籤/搜索