常用负载均衡策略分析

背景

一般生产环境单机所能承受的QPS压力为2w左右,过大的压力会导致服务器爆炸。即便是单机能够撑住2w QPS,一般也不会这么做,生产环境一般会预留50%的冗余能力,防止QPS因为某个热门的活动而爆炸。当QPS超过单机所能承受的压力时,自然而然会想到引入分布式集群。那么,某一个请求会被哪台服务器处理呢,这是随机的,还是说按照一定的规则处理的?这就是负载均衡算法所要干的事。

负载均衡器

负载均衡器就是实现一种或者多种负载均衡算法的软件或者硬件设备。负载均衡器根据协议层的不同,通常又分为两种,第一种在四层传输层实现,第二种就是在七层应用层实现。

很多专用的硬件负载均衡器都支持在TCP层实现负载均衡,效率高。当然TCP层实现负载均衡有它的缺点,如无法保存长连接等。所以一般类似于BAT这种大公司,都是多层负载均衡配合的。

一般纯软件实现的通常在应用层来实现,这也是应用比较多的一种实现方式。目前比较流行的实现有Nginx、HAProxy、Keepalived等。当然Linux内核自带的LVS(Linux Virtual Server)就是四层的实现。

轮询(Round Robin)

轮询是一种很简单的实现,依次将请求分配给后端服务器。

  • 优点:实现简单,请求均匀分配。
  • 缺点:请求均匀分配,因为后端服务器通常性能会有差异,所以希望性能好的服务器能够多承担一部分。也不适合对长连接和命中率有要求的场景。

加权轮询(Weighted Round Robin)

加权本质是一种带优先级的方式,加权轮询就是一种改进的轮询算法,轮询算法是权值相同的加权轮询。需要给后端每个服务器设置不同的权值,决定分配的请求数比例。这个算法应用就相当广泛了,对于无状态的负载场景,非常适合。

  • 优点:解决了服务器性能不一的情况
  • 缺点:权值需要静态配置,无法自动调节。也不适合对长连接和命中率有要求的场景。

随机Random

随机把请求分配给后端服务器。请求分配的均匀程度依赖于随机算法了,因为实现简单,常常用于配合处理一些极端的情况,如出现热点请求,这个时候就可以random到任意一台后端,以分散热点。当然缺点也不言而喻。

哈希Hash

哈希算法想必大家并不陌生,应用最为广泛。根据Source IP、 Destination IP、URL、或者其它,算hash值或者md5,再采用取模。比如有N台服务器: S1、S2、S3……Sn

hash值 % N 

显然,相同的请求会被映射到相同的后端。这非常适合维护长连接和提高命中率。

但是它天生也有一些缺点。比如说,现在某个请求通过哈希被映射到S3上去了,如果S3宕机了,就不得不二次Hash,重新计算路由时会剔除宕机的后端。

hash值 % (N - 1)

这样会导致几乎所有请求路由产生变化。由此导致命中率的急剧下降。当然一般生产环境通过提供S3的备机来解决这种问题,但是主备之间切换也是需要时间,它们之间的数据同步也是有延时的。所以需要根据业务场景来权衡了。

扩容也会有类似的问题,计算路由公式变为:

hash值 % (N + 1) 

为了解决这种问题,一般生产环境可能采用成倍扩容的方式。N -> 2N,这样求路由可以做到与原来保持一致。当然必不可少的造成机器资源的浪费。请各位看官自行权衡。

对于热点请求,这种Hash算法也可能成在雪崩效应,取决于采用何种Hash,基于URL还是基于IP等。总之,不能把热点请求路由到单机上,否则单机撑不住,会逐个逐个被打爆,也就是雪崩效应。

最小连接数LC

最小连接数(Least Connection),把请求分配给活动连接数最小的后端服务器。它通过活动来估计服务器的负载。比较智能,但需要维护后端服务器的连接列表。

加权最小连接数WLC

加权最小连接数(Weighted Least Connection),在后端服务器性能差异较大的情况下,可以优化LC的性能,高权值的服务可以承受更多的连接负载。

最短响应时间LRT

最短响应时间(Least Response Time),把请求分配给平均响应时间最短的后端服务器。平均响应时间可以通过ping探测请求或者正常请求响应时间获取。

RT(Response Time)是衡量服务器负载的一个非常重要的指标。对于响应很慢的服务器,说明其负载一般很高了,应该降低它的QPS。

之前有人说使用CPU占用率作为负载均衡的指标,只能说没理解CPU占用率的实质。理论上CPU占用率是越高越好,说明服务充分利用了CPU资源。但对于设计不合理的程序导致的CPU占用过高这是程序的设计问题,并不违背这条理论。

常用「负载均衡」策略优缺点和适用场景

参考文献

原文地址:https://www.cnblogs.com/kaleidoscope/p/9754489.html

时间: 2024-10-08 01:38:40

常用负载均衡策略分析的相关文章

几种软负载均衡策略分析

公司去年上了F5,好用是好用,但是费用太高昂了,所以最近一直在研究软负载均衡这一块儿,恰巧今年年初谷歌开源了seesaw,让自己可以绕过很多弯路.特此总结下之前了解的负载均衡策略. -Sunface 在分布式系统中,负载均衡是非常重要的环节,通过负载均衡将请求派发到网络中的一个或多个节点上进行处理.通常来说,负载均衡分为硬件负载均衡及软件负载均衡.硬件负载均衡,顾名思义,在服务器节点之间安装专门的硬件进行负载均衡的工作,F5便为其中的佼佼者.软件负载均衡则是通过在服务器上安装的特定的负载均衡软件

负载均衡技术分析与测试报告

负载均衡技术分析与测试报告                 目录 负载均衡测试报告... 1 负载均衡技术概述:... 2 服务器负载均衡... 2 链路负载均衡... 3 Outbound链路负载均衡... 3 Inbound链路负载均衡... 4 常见负载均衡调度算法... 5 测试目的... 6 测试环境搭建... 7 1:原始网络环境... 7 2:测试网络环境... 7 测试设备介绍... 8 1:产品介绍... 8 2:产品操作界面... 8 出现问题... 9 最终解决方案...

lvs/nginx/haproxy 负载均衡优缺点分析讲解

PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术.具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了:如果机器不少,可以用DNS轮询,LVS所耗费的机器还是比较多的:大型网站或重要的服务,且服务器比较多时,可以考虑用LVS. 一种是通过硬件来进行进行,常见的硬件有比较昂

数据库读写分离和负载均衡策略

最近在学习数据库的读写分离和主从复制,采用的是一主多从策略,采用轮询的方式,读取从数据库的内容.但是,假如某一台从数据库宕机了,而客户端不知道,每次轮选到此从数据库,不都要报错?到网上查阅了资料,找到一篇不错的博文,不仅讲了解决方案,也详细的讲述了数据库的分区,分表,集群和负载均衡策略,博文原址http://www.cnblogs.com/zhongxinWang/p/4262650.html 第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互

四层和七层负载均衡的特点及常用负载均衡Nginx、Haproxy、LVS对比

一.四层与七层负载均衡在原理上的区别 图示: 四层负载均衡与七层负载均衡在工作原理上的简单区别如下图: 概述: 1.四层负载均衡工作在OSI模型中的四层,即传输层.四层负载均衡只能根据报文中目标地址和源地址对请求进行转发,而无法修改或判断所请求资源的具体类型,然后经过负载均衡内部的调度算法转发至要处理请求的服务器.四层负载均衡单纯的提供了终端到终端的可靠连接,并将请求转发至后端,连接至始至终都是同一个.LVS就是很典型的四层负载均衡. 2.七层负载均衡工作在OSI模型的第七层应用层,所以七层负载

dubbo负载均衡策略和集群容错策略都有哪些

dubbo负载均衡策略 random loadbalance 默认情况下,dubbo是random load balance随机调用实现负载均衡,可以对provider不同实例设置不同的权重,会按照权重来负载均衡,权重越大分配流量越高,一般就用这个默认的就可以了. roundrobin loadbalance 均匀地将流量打到各个机器上去,但是如果各个机器的性能不一样,容易导致性能差的机器负载过高.所以此时需要调整权重,让性能差的机器承载权重小一些,流量少一些. leastactive load

面试系列16 dubbo负载均衡策略和集群容错策略都有哪些?动态代理策略呢

(1)dubbo负载均衡策略 1)random loadbalance 默认情况下,dubbo是random load balance随机调用实现负载均衡,可以对provider不同实例设置不同的权重,会按照权重来负载均衡,权重越大分配流量越高,一般就用这个默认的就可以了. 2)roundrobin loadbalance 还有roundrobin loadbalance,这个的话默认就是均匀地将流量打到各个机器上去,但是如果各个机器的性能不一样,容易导致性能差的机器负载过高.所以此时需要调整权

Nginx专题(2):Nginx的负载均衡策略及其配置

摘要:本文介绍了Nginx的负载均衡策略,一致性hash分配原理,及常用的故障节点的摘除与恢复配置. 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第一期-宜信支付结算八方数据团队高级技术经理 周恒<Nginx的细枝末节> 分享者:宜信支付结算八方数据团队高级技术经理 周恒 原文首发于支付结算技术团队公号:野指针 前篇Nginx专题(1):Nginx之反向代理及配置详细介绍了Nginx功能之一--反向代理.本篇文章将重点介绍Nginx功能之二--负载均衡. 为了增加对负载均衡的好

Nginx的负载均衡策略及配置

转:https://www.cnblogs.com/yixinjishu/p/12028327.html 为了增加对负载均衡的好感,我们先了解负载均衡能实现什么. 将多个服务器节点绑定在一起提供统一的服务入口. 故障转移,在意外发生的时候,可以增加一层保险,减少损失. 降低上线运维复杂度,实现平滑上线.运维和开发同学都喜欢. 下面正式进入主题. 一.Nginx的负载均衡策略 负载均衡就是将请求“均衡”地分配到多台业务节点服务器上.这里的“均衡”是依据实际场景和业务需要而定的. 对于Nginx来说