WebSocket负载均衡

这一期我们来说一下WebSocket负载均衡的问题

我们知道负载均衡在IT中是个很重要的概念,尤其是在互联网行业中,很多的产品都是web形式,提供基于http请求的服务。而单个服务器的处理能力是有限的,往往我们会用到集群。集群环境下,http请求是根据配置的策略来分发到指定的服务节点上的,一般在各个机器的性能都一致情况下,请求分发到每个结点的机率都一样。

这里 我介绍几种不同的方法,有我自己总结的,也有看的网友的方案: 1 是通过jbosscache来实现。JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能。缓存数据被自动复制,让你轻松进行Jboss服务器之间的集群工作。所以并不是为了单纯实现Load Balance而引入它,可以使用它来做多应用之间的数据共享。每个程序实例都有自己的一个count,该变量存在cache中,各个程序实例都可以读取到其他实例的count值

2 使用三方的WebSocket服务,推荐GoEasy,不用考虑负载均衡的问题,WebSocket这一块都不用操心,简单稳定。

3 websocket相信经常逛cnode社区的孩纸们都知道…具体API使用方式也再熟悉不过了…使用nodejs开发的websocket服务端也是品种繁多…github上总有你喜欢的…平时耍耍当然没问题…如果真要是承载一个生产环境服务的核心…总会有些问题需要你去解决. 不可避免的问题:

按照一个web请求占用线程数为参照…我们可以把nodejs称之为单线程语言…而java的servlet这种应该就是多线程语言了…我们可以想象在高并发情况下…单线程语言的运行风险还是蛮高的…毕竟如果一个请求出事那么整个线程(进程)就退出了…于是乎停止服务了…为了规避风险…我们常常会使用负载均衡技术…保证整个系统的对外正常服务… 解决方案: 负载均衡方案目前来讲…用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同一端口的…

如果开发项目比较敢,推荐选择2号方案,GoEasy: http://www.goeasy.io, 如果不急可以自己研究的话,可以选其他方案来深度学习一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值