简单聊聊负载均衡的那些事

| 作者:江夏

| 知乎:https://www.zhihu.com/people/1024-paper-96

| GitHub:https://github.com/JiangXia-1024?tab=repositories

| 博客地址:https://blog.csdn.net/qq_41153943

| 掘金:https://juejin.cn/post/6986279448853086216

| 公众号:1024笔记

本文大概11088字,读完共需25分钟

什么是负载均衡

负载均衡(Load balance,LB),是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。

通俗点理解有点类似于常说的一句话,一碗水端平。如果我们只有一个碗,那么无论有多少水,那么我们只能装一碗水。在单服务器的应用场景,碗就是服务器,而水就是流量。所以我们知道,一旦水(流量)过大时,一个碗肯定是不够用的。这时候就需要多来几个碗(服务器)来支撑更多的水(流量)。但是不能让这个碗接的水满满的,而有的碗没有水,或者水少,水就是负载,而这种就是负载不均衡了。负载均衡就是为了让所有碗里的水都尽量一样多,不至于让有的服务器压力大,而有的服务器压力小甚至用不上。

那么我们知道尽管有很多的碗,能够装得下足够多的水,但是这么多碗,哪个先用,哪个后用呢?这时候我们可以想象以前读书的时候的洗衣池,一个池子上面有n个水龙头,这时候每个水龙头下都放这一个碗,这样就能够保证这些碗基本是同时被使用到的,而这种就是分布式服务器集群的基本概念了。

那么这些碗如何能够达到负载均衡呢?因为会有有得水龙头流量大,有得水龙头流量小的情况,这样的话流量大的地方的碗的负载压力就大。那么这时候,如果我们把所有的碗都打通,然后再用一个水管把他们连起来,这样是不是就能够基本保证,所有的碗的水都一样多了?因为水多的碗里面的水也很流到水少的碗里。这样就能够达到负载均衡的目的了。这里面用来连接碗之间的水管就是连通器的概念,但是连通器其实只是用于解决服务器之间的通信问题,其并不是减轻服务器性能的算法。负载均衡就是通过分流算法,合理的分摊服务器压力,达到服务器性能的最大优化。但是这里也不能简单地理解为分配给所有实际服务器一样多的工作量,因为不同的服务器在硬件配置、网络带宽的不同,导致它们具体的承载能力也不相同,这里的“均衡”,其实就是尽可能地使得所有的服务器都不要过载,并且能够最大程序地发挥作用。

总结:负载均衡(Load Balance),就是是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行,用来解决高性能,单点故障(高可用),扩展性(水平伸缩)的场景需求!

几种常见的负载均衡方案

1、HTTP重定向

当我们向web服务器发送一个请求后,web服务器可以通过http响应头信息中的Location标记来返回一个新的URL,然后浏览器需要继续请求这个新的URL,完成自动跳转。

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

图片

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

这种 HTTP重定向负载均衡方案的优点是比较简单,但是也存在一些缺点:

1、性能较差

浏览器需要请求两次才能完成一次访问。同时,重定向服务器本身的处理能力有可能成为瓶颈,整个集群的伸缩性规模有限;使用HTTP返回码302重定向,有可能使搜索引擎判断为SEO作弊,降低搜索排名。

2、吞吐率限制

主站点服务器的吞吐率平均分配到了被转移的服务器。现假设使用RR(Round Robin)调度策略,子服务器的最大吞吐率为1000reqs/s,那么主服务器的吞吐率要达到3000reqs/s才能完全发挥三台子服务器的作用,那么如果有100台子服务器,那么主服务器的吞吐率可想而知得有大?相反,如果主服务的最大吞吐率为6000reqs/s,那么平均分配到子服务器的吞吐率为2000reqs/s,而现子服务器的最大吞吐率为1000reqs/s,因此就得增加子服务器的数量,增加到6个才能满足。

3、重定向访问深度不同

有的重定向一个静态页面,有的重定向相比复杂的动态页面,那么实际服务器的负载差异是不可预料的,而主站服务器却一无所知。因此整站使用重定向方法做负载均衡不太好。

需要权衡转移请求的开销和处理实际请求的开销,前者相对于后者越小,那么重定向的意义就越大,例如下载。你可以去很多镜像下载网站试下,会发现基本下载都使用了Location做了重定向。

因此在实际应用中很少使用这种负载均衡方案来部署。

2、DNS负载均衡

DNS(Domain Name System)是因特网的一项服务,它作为域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。DNS负责提供域名解析服务,当访问某个站点时,实际上首先需要通过该站点域名的DNS服务器来获取域名指向的IP地址,在这一过程中,DNS服务器完成了域名到IP地址的映射,同样,这样映射也可以是一对多的,这时候,DNS服务器便充当了负载均衡调度器,它就像http重定向转换策略一样,将用户的请求分散到多台服务器上,但是它的实现机制完全不同。

利用DNS工作原理处理负载均衡的工作原理图大致如下:

图片

在DNS系统中有一个比较重要的的资源类型叫做主机记录也称为A记录,A记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上。如果你有一个自己的域名,那么要想别人能访问到你的网站,你需要到特定的DNS解析服务商的服务器上填写A记录,过一段时间后,别人就能通过你的域名访问你的网站了。

通过上面的原理图可以看出,在DNS服务器中应该配置了多个A记录,如:

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值