一个互联网产品在搭建服务时可能经常会遇到以下困境:搭建的单节点 web服务性能和可靠性都无法达到要求,节点挂掉=服务异常;直接使用外网提供服务,经常会担心被人攻破,且公司运维团队水平较低,一不小心就会有打开外网端口的情况。这些场景下如果加入负载均衡服务问题便会迎刃而解。
什么是负载均衡服务
负载均衡,是现代计算机领域的基础服务之一。其基本原理是通过运行在前面的负载均衡服务,按照指定的负载均衡算法,将流量分配到后端服务集群上,从而为系统提供并行扩展的能力。
负载均衡服务一般都会有内外网隔离、健康检查等功能,从而提高系统的安全性和可用性。
下图就是一个标准的负载均衡服务应用场景:
负载均衡服务的功能及特征
流量分发
这个是负载均衡服务的核心功能,作为统一的流量入口,负载均衡服务会把流量分发到后端的多个节点上,从而实现集群的横向扩展。当需要扩容时,只需要在负载均衡服务后面加入新的节点就可以了,而不用改变入口。对于有状态的服务来说,还需要启用会话保持来保证把流量分发到固定的节点上去。
基于应用层内容的流量分发。七层服务还存在着更为复杂的应用场景:外网的 web服务默认使用 80端口,但经常也会有多个不同域名的网站需要使用同样一个出口 IP的情况。这时候就需要通过应用层解析,根据用户的访问域名把同一个端口的流量分发到不同的后端服务中去。而随着结构的进一步拆分,还存在着同一个域名的服务根据 url分流到不同后端集群的情况,这种情况就需要进一步的分流和拆分。
系统高可用
通过加入后端多个节点,可以显著地提高服务的可用性。而且负载均衡服务一般会集成健康检查功能,在后端节点出现异常时会把请求转发到健康的节点上去,从而实现异常的自动处理。
很多负载均衡服务还会提供多 AZ支持,支持跨 AZ的高可用和后端部署。在单个机房宕机时仍然可以做到服务可用。
负载均衡服务本身一般都会采用专门的冗余设备,和专门的故障保证策略,保证自身的可用性。在云计算环境下,负载均衡服务一般都可以提供四个九级别的可靠性保证(99.99%),而通过加入多 AZ(机房级别)甚至多 Region(地区级别),还可以进一步提高服务的可用性。
在线扩容/缩容
当负载均衡服务与云计算结合之后,可以简单地实现资源的扩容/缩容,并且可以做到在线服务的弹性伸缩。
以扩容为例,当需要扩容时,可以预先初始化好需要扩容的节点,然后通过负载均衡接入,实现在线业务的并行扩容。
如果通过服务方提供的 open api,结合监控等其他信息,还可以实现自定义的弹性伸缩策略,实现高峰期预先扩容,低峰缩容。
负载均衡服务的使用建议及常见误区
1. 优先使用无状态服务
有状态服务和无状态服务,原本是各有优势,并没有明显的优劣之分,但是在大集群、服务化的场景下,无状态服务则更有优势。
因为有状态服务在服务架构较为简单时虽然有易开发,高并发等优势,但随着业务规模的扩大,也会造成异常恢复困难、难以并行扩展等问题。而在这种场景下,无状态服务在服务管理、并行扩展方面有着先天的优势。
一般来讲,使用负载均衡,大多是服务规模较大,业务负载的场景,因此更推荐使用无状态化的服务。
2. 注意健康检查配置!
健康检查是负载均衡服务的重要功能之一,也是服务判断后端节点是否存活的重要标准(很多场景下甚至是唯一标准)。不仅仅会影响到显示的状态,还会影响到用户的服务质量,甚至造成整个服务异常。下面举两个例子:
示例1:健康检查判断异常参数过于敏感,在系统压力较大时错误判断而移除正常的节点,导致剩下节点压力增大,从而继续发出移除操作,直到全部节点移除,系统雪崩。
应对之策:在线上压力较大,偶现超时的场景下,建议采用快速拉起,缓慢宕机的策略。通过适当拉长节点异常宕机时周期,减少错误判断的概率,而在服务正常时快速接入服务,缓解负载。
示例2:健康检查宕机参数设置时间过长,结果在节点宕机时无法快速拉起,在异常时影响到了用户访问。
应对之策:在线上压力较小、健康检查接口响应正常的情况下,可以考虑缩短宕机时间,这样在异常时可以快速移除异常节点,减少对用户的影响。
因此,健康检查参数并没有一个固定的原则,关键还是要看业务本身的特点,以及对业务来说,最重要的是什么:是业务稳定,还是用户体验?
3. 接入负载均衡无法保障高可用
有一个常见误区就是认为服务接入负载均衡就算高可用了。而事实上实际服务的高可用性是需要通盘考虑的事情,比如全链路移除单点,服务本身对于异常的处理等。
因此说,接入负载均衡仅仅是保证了接入点的高可用(如果挂单点那接入都不是高可用的),真正要实现高可用还需要全局保证,负载均衡只是构筑服务高可用的一个工具,而不是全部。
4. 接入负载均衡后并不会实现业务加速
负载均衡是一个高性能的转发服务,但是对于单次请求来说,无法做到性能加速。
如果你本来的请求要 100ms返回,使用负载均衡之后也不会把你的请求缩短到 10ms。
而且从理论上说,无论任何形式的负载均衡,都只会增长调用链而不是缩短(一些软负载均衡,如 DNS,Service的 Iptables不会增加调用链本身,但是也会加入额外操作)。因此,对于单个请求,结果往往是变慢而不是加速(一般负载均衡服务增加的成本是微乎其微的 ms以内,应用完全感知不到)。
负载均衡对性能的提升,是通过分担负载带来的并行扩展能力从而提升服务的稳定性。而由于业务并行扩展,造成单台压力变小,从而提升服务的整体性能。
另外分清二层负载均衡和三层负载均衡,由于负载均衡服务往往有更可靠的接入端(BGP网络),更高效的转发设施(专用转发设备和链路),更好的优化,一般性能还是远远优于自己搭建的转发服务。因此很多场景是会有更好的性能表现。
负载均衡建立在现有网络结构之上,提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。说的明白点儿,负载均衡就是多台设备分担任务,单台设备的负载压力有点儿大。解决高并发量访问的的情况。
当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能。那么,在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首先由它接收,调度者再根据每台服务器的负载情况将请求分配给某一台后端服务器去处理。那么在这个过程中,调度者如何合理分配任务,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡问题。说白了负载均衡是个调度员的角色,用来分配任务个完成同一任务的服务器集群。
负载均衡
负载均衡的实现方式要从网络分层结构说起。有二层的负载均衡,三层的负载均衡和高层的负载均衡。高层的负载均衡又有http重定向协议实现负载均衡、dns域名解析负载均衡和反向代理负载均衡。
1 二层负载均衡
二层负载均衡又称为数据链路层负载均衡。主要的实现方式就是PPP捆绑和链路聚合技术。
1) 链路聚合技术
以太网链路聚合简称链路聚合,它通过将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的。同时,这些捆绑在一起的链路通过相互间的动态备份,可以有效地提高链路的可靠性。
链路聚合需要用到LACP协议。LACP(Link Aggregation Control Protocol,链路聚合控制协议)协议是一种实现链路动态聚合的协议,运行该协议的设备之间通过互发LACPDU(Link Aggregation Control Protocol Data Unit,链路聚合控制协议数据单元)来交互链路聚合的相关信息。
链路聚合
2)PPP捆绑技术
PPP捆绑是将多个物理链路合并或者捆绑成一个大逻辑链路的机制。主要起到增加带宽,减少延时,线路备份的作用,另外一个作用是可以将不同类型的接口捆绑为一个逻辑接口。
MLPPP是由LCP在初始化时设置的一个功能选项。MLPPP将packet分成多个小块的片段同时送到远端router,LCP再将它们恢复成完整的packet。
可以在接口或拨号设备上使用下面命令对MLPPP进行配置:
MLPPP配置过程:
第1步 建立一个逻辑的MLPPP接口,使用interface multilink
multilink_interface_number第2步 给MLPPP接口分配IP地址,这一步不需要多说了吧
第3步 把相应的PPP链路配置到相应的MLPPP group, Ppp Multilink ,配置启用MLPPP
Multilink-group multilink_group_number 分配进相应的multilink group
PPP捆绑示例
2 三层负载均衡
三层负载均衡也就是网络层的负载均衡,需要用到网络层的协议,如OSPF协议,RIP协议等。
1)OSPF负载均衡
首先简要的说一下OSPF,OSPF路由协议是一种典型的链路状态路由协议,一般用于同一个路由域内。在这里,路由域是是指一组通过统一的路由政策或路由协议互相交换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个 AS结构的数据库,该数据库中存放的是路由域中相应链路的状态信息,OSPF路由器正是通过这个数据库计算出其OSPF路由表的。 OSPF将链路状态广播数据包LSA传送给在某一区域内的所有路由器,这一点与距离矢量路由协议不同。运行距离矢量路由协议的路由器是将部分或全部的路由表传递给与其相邻的路由器。
OSPF会自动计算接口上的Cost值,但也可以通过手工指定该接口的Cost值,手工指定的优先于自动计算的值。OSPF计算的Cost,同样是和接口带宽成反比,带宽越高,Cost值越小。到达目标相同Cost值的路径相同,可以执行负载均衡,最多6条链路同时执行负载均衡。 OSPF负载均衡是一种等价负载均衡。
OSPF负载均衡一般与其他负载均衡一起搭建成负载均衡集群,提供高可用、高负载服务。
OSPF负载均衡
2)RIP负载均衡
RIP协议目前用的比较少,不详细介绍。
RIP负载均衡与OSPF负载均衡的原理类似。采用了等价负载均衡的原理。到达后端网络的路径开销一致,就达到了负载均衡的目的。
RIP等价负载均衡
3 高层负载均衡
1)http重定向协议实现负载均衡
根据用户的http请求计算出一个真实的web服务器地址,并将该web服务器地址写入http重定向响应中返回给浏览器,由浏览器重新进行访问。这种方式的优点是比较简单。缺点:浏览器需要零次请求服务器才能完成一次访问,性能较差。http重定向服务器自身的处理能力可能成为瓶颈。使用http302响应重定向,有可能使搜索引擎判断为SEO作弊,降低搜索排名。
2)dns域名解析负载均衡
在DNS服务器上配置多个域名对应IP的记录。例如一个域名www.baidu.com对应一组web服务器IP地址,域名解析时经过DNS服务器的算法将一个域名请求分配到合适的真实服务器上。优点:将负载均衡的工作交给了DNS,省却了网站管理维护负载均衡服务器的麻烦,同事许多DNS还支持基于地理位置的域名解析,将域名解析成距离用户地理最近的一个服务器地址,加快访问速度吗,改善性能。这种方式的缺点是:DNS负载均衡的控制权在域名服务商手里,网站可能无法做出过多的改善和管理。 不能够按服务器的处理能力来分配负载。DNS负载均衡采用的是简单的轮询算法,不能区分服务器之间的差异,不能反映服务器当前运行状态,所以其的负载均衡效果并不是太好。
3)反向代理负载均衡
反向代理处于web服务器这边,反向代理服务器提供负载均衡的功能,同时管理一组web服务器,它根据负载均衡算法将请求的浏览器访问转发到不同的web服务器处理,处理结果经过反向服务器返回给浏览器。浏览器访问请求的地址是反向代理服务器的地址114.100.80.10,反向代理服务器收到请求,经过负载均衡算法后得到一个真实物理地址10.0.03,并将请求结果发给真实无服务,真实服务器处理完后通过反向代理服务器返回给请求用户。这种方式的优点是部署简单,处于http协议层面。缺点是使用了反向代理服务器后,web 服务器地址不能直接暴露在外,因此web服务器不需要使用外部IP地址,而反向代理服务作为沟通桥梁就需要配置双网卡、外部内部两套IP地址。
反向代理负载均衡
————————————————
版权声明:本文为CSDN博主「jessicaiu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/jessicaiu/article/details/84564360相关标签: