>>分享Java Web开发技术,并且对孙卫琴的《Tomcat与Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 23468 个阅读者 刷新本主题
 * 贴子主题:  Java高级——HTTP重定向实现负载均衡 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2018-06-15 05:06:44     消息  查看  搜索  好友  邮件  复制  引用

过程描述
当用户向服务器发起请求时,请求首先被集群调度者截获;调度者根据某种分配策略,选择一台服务器,并将选中的服务器的IP地址封装在HTTP响应消息头部的Location字段中,并将响应消息的状态码设为302,最后将这个响应消息返回给浏览器。

当浏览器收到响应消息后,解析Location字段,并向该URL发起请求,然后指定的服务器处理该用户的请求,最后将结果返回给用户。

在使用HTTP重定向来实现服务器集群负载均衡的过程中,需要一台服务器作为请求调度者。用户的一项操作需要发起两次HTTP请求,一次向调度服务器发送请求,获取后端服务器的IP,第二次向后端服务器发送请求,获取处理结果。

Java高级——HTTP重定向实现负载均衡
调度策略
调度服务器收到用户的请求后,究竟选择哪台后端服务器处理请求,这由调度服务器所使用的调度策略决定。

随机分配策略
当调度服务器收到用户请求后,可以随机决定使用哪台后端服务器,然后将该服务器的IP封装在HTTP响应消息的Location属性中,返回给浏览器即可。
轮询策略(RR)
调度服务器需要维护一个值,用于记录上次分配的后端服务器的IP。那么当新的请求到来时,调度者将请求依次分配给下一台服务器。
由于轮询策略需要调度者维护一个值用于记录上次分配的服务器IP,因此需要额外的开销;此外,由于这个值属于互斥资源,那么当多个请求同时到来时,为了避免线程的安全问题,因此需要锁定互斥资源,从而降低了性能。而随机分配策略不需要维护额外的值,也就不存在线程安全问题,因此性能比轮询要高。

Java高级——HTTP重定向实现负载均衡
优缺点分析
采用HTTP重定向来实现服务器集群的负载均衡实现起来较为容易,逻辑比较简单,但缺点也较为明显。

在HTTP重定向方法中,调度服务器只在客户端第一次向网站发起请求的时候起作用。当调度服务器向浏览器返回响应信息后,客户端此后的操作都基于新的URL进行的(也就是后端服务器),此后浏览器就不会与调度服务器产生关系,进而会产生如下几个问题:

由于不同用户的访问时间、访问页面深度有所不同,从而每个用户对各自的后端服务器所造成的压力也不同。而调度服务器在调度时,无法知道当前用户将会对服务器造成多大的压力,因此这种方式无法实现真正意义上的负载均衡,只不过是把请求次数平均分配给每台服务器罢了。
若分配给该用户的后端服务器出现故障,并且如果页面被浏览器缓存,那么当用户再次访问网站时,请求都会发给出现故障的服务器,从而导致访问失败。


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->流程控制
  JavaWeb开发-->访问数据库(Ⅰ)
  JSP与Hibernate开发-->数据库事务的概念和声明
  Java网络编程-->创建非阻塞的HTTP服务器
  精通Spring-->Vue组件开发高级技术
  Vue3开发-->Vue简介
  统计网站访问次数的过滤器
  面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?
  在Java Web应用中获取绝对路径和相对路径
  Java二维码生成-谷歌(Google.zxing)开源二维码生成的范例及...
  Resin部署安装
  Tomcat中对静态资源的处理
  自查Web应用缺陷的有效测试方法
  Java动态追踪技术探究
  配置简单的嵌入式tomcat和jetty
  用@WebFilter配置过滤器
  JSP自定义标签的用法
  如何用Servlet动态生成验证码
  用Maven部署war包到远程Tomcat服务器
  如何修改request的parameter的几种方式
  Java Servlet完全教程
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。