转载请说明出处:http://blog.csdn.net/cywosp/article/details/38014581

由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设备根本无法承担。在此情况下,如果扔掉现有设备去做大量的硬件升级,这样将造成现有资源的浪费,而且如果再面临下一次业务量的提升时,这又将导致再一次硬件升级的高额成本投入,甚至性能再卓越的设备也不能满足当前业务量增长的需求。 针对此情况而衍生出来的一种廉价有效透明的方法以扩展现有网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性的技术就是负载均衡(Load Balance)。
    
    一个能够提供高并发访问,快速响应的服务器集群不是一开始就能设计出来的,但对于软件架构师而言,在架构设计之初就要有应付这种高并发,为集群提供水平扩展的计划,具体何时进行扩展,就需要在后续处理业务的过程中慢慢演化了。同时,在设计之初,为了能快速扩展而不影响集群的正常使用,建议把服务器设计成无状态的,也就是集群服务器不存储请求上下文信息,这样用户的请求被发往集群中的任何一个节点所处理的返回结果都将是一样的。因此在集群中就可以使用负载均衡技术将不同的请求发往不同的节点上进行处理。如下图:
                                

负载均衡服务器需要能够感知或者可以配置集群中的服务器数量,可以及时发现集群中新上线或者下线的服务器,并能向新上线的服务器分发请求,停止向已下线的服务器分发请求,这样就实现了服务器集群的伸缩性。负载均衡的实现技术有多种多样,从硬件实现到软件实现,从商业产品到开源产品,应有尽有。本文主要介绍Web服务器中HTTP反向代理机制,以此来达到服务器之间的负载均衡。

利用HTTP重定向协议实现负载均衡大概工作原理如下图:
                              

HTTP重定向服务器是一台普通的应用服务器,其唯一个功能就是根据用户的HTTP请求计算出一台真实的服务器地址,并将该服务器地址写入HTTP重定向响应中(重定向响应状态码为302)返回给用户浏览器。用户浏览器在获取到响应之后,根据返回的信息,重新发送一个请求到真实的服务器上。如上图所示,浏览器访问www.apusapp.com,DNS服务器解析到IP地址为114.100.20.200,即HTTP重定向服务器的IP地址。重定向服务器计根据某种负载均衡算法算出真实的服务器地址为114.100.20.203并返回给用户浏览器,用户浏览器得到返回后重新对114.100.20.203发起了请求,最后完成访问。

这种负载均衡方案的有点是比较简单,缺点是浏览器需要两次请求服务器才能完成一次访问,性能较差;同时,重定向服务器本身的处理能力有可能成为瓶颈,整个集群的伸缩性规模有限;使用HTTP返回码302重定向,有可能使搜索引擎判断为SEO作弊,降低搜索排名。因此实践中很少使用这种负载均衡方案来部署。

---------------------
作者:cywosp
来源:CSDN
原文:https://blog.csdn.net/cywosp/article/details/38014581
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. iOS沙盒路径变化的说明详解
  2. linux 学习之路
  3. 史上最易懂的Android jni开发资料--NDK环境搭建
  4. apache配置多个虚拟主机
  5. HDU1232畅通工程
  6. 关于安装完Node.js 出现node is not dedined 问题
  7. Java实战之01Struts2-02配置文件
  8. sql数值显示成千分位分隔符的形式
  9. C++服务器设计(一):基于I/O复用的Reactor模式
  10. Unix/Linux环境C编程入门教程(31) 数学函数带你战胜企业面试
  11. mysql主从备份+keepalived自动切换
  12. 简单了解JS中的几种遍历
  13. tar解压指定文件
  14. 让你一看就懂的快速排序算法(Java)
  15. box-sizing:border-box的作用
  16. 最大频率栈 Maximum Frequency Stack
  17. Oracle自我补充之trunc()函数使用介绍
  18. appium +ios 判断元素是否存在,排除visible=“false”的数据
  19. C# sqlserver ExecuteNonQuery()方法详解
  20. ThreadLocal的练习代码

热门文章

  1. decode-encode --其他使用可能有问题
  2. tortoisegit错误: disconnected - no supported authentication methods available(server sent: publickey)
  3. 第08章—整合Spring Data JPA
  4. elastic search安装与本地测试
  5. javascript教程2:---DOM操作
  6. 48dp rhythm
  7. windows下的Mysql安装与基本使用(zip)
  8. Java读写.properties文件实例,解决中文乱码问题
  9. python2函数
  10. Python(模块(modue)、包(package))