负载均衡是什么鬼?从字面意思来看,它应该有两层意思分别是负载和均衡。而对于系统负载均衡它同样具有两层意思,其中系统负载指的系统能够承载的最大访问流量,系统均衡指的是前端请求要均匀地分配给后端机器,同时,同一用户要尽可能分配给同一机器。系统通过负载均衡以后具有如下好处:
1、避免资源浪费。如果我们均衡算法选的不好,就会导致后端资源浪费。比如:如果选择一致Hash算法,可以很好利用cache的容量。而如果用随机,有可能会让cache效果大打折扣。
2、避免服务不可用。当我们不考虑系统的承载能力,有可能直接把某台机器压垮,比如当机器的CPU利用率达到80%,如果再有大量的请求,那么该机器直接宕机,甚至于导致雪崩情况(一台机器宕机,对应的请求会分给其他机器上,那么其他机器也会出现宕机,以至于全部机器都宕机)。
系统要实现负载均衡,背后肯定需要一些算法支撑,下面就来看下对应的算法。
1、负载算法
既然要解决后端系统的承载能力,那我们就有很多方式,常用的有以下几种:
静态配置
这种方式对于中小系统来讲是最有效最稳定的。因为后端机器的性能配置、上面部署哪些服务,还能有多大的承载能力等等,我们是最清楚的。比如,我们经常看到nginx的配置:
动态调整
当碰到机器故障,以及由于性能问题无法处理请求时,如果此时还将新来的请求分配到该节点,那么可能导致该节点宕机。因此,根据节点的实际负载动态调整节点的权重是非常重要的。当然,要得到节点的真正负载,以及如何定义负载,无论负载是否及时收集,都是需要考虑的问题。
动态调整首先计算所有节点的请求响应时间,对于响应较快的节点,我们可以多分配请求给它,然后增加它的请求数,当它的响应变慢时再慢慢减少它的请求数,慢慢地我们找到这个节点最佳平衡点,即分配多少请求给它。通过相同方法我们找到所有节点的平衡点。
这种方法的好处在于可以动态平衡后面服务器的处理能力。不过,任何事物都有两面性。这种方案如果遇到极端情况,可能会造成雪崩。当某台机器出现短暂网络抖动的时候,它的响应就可能变慢,这个时候,前端服务就会将它的请求分配给其他机器。如果分配的很多,就有可能造成某些机器响应也变慢。然后又将这些机器的请求分配给另外机器。如此这般,就会造成雪崩。
2、均衡算法
均衡算法主要解决将请求如何发送给后端服务。经常会用到以下三种算法:随机(random)、轮询(round-robin)和 哈希算法。
随机算法
随机算法就是通过一个随机函数将所有请求分散到各个节点上, 该方法比较简单,且能做到将请求均匀地分散到各个节点上,因此经常使用随机算法。
轮询算法
轮询算法就是将所有节点以同样的概率向外提供服务,但是它没有考虑各个节点之间的性能差别,对于同样数目的请求,性能好的节点能够轻松完成,而性能差的节点完成的比较费力。因此,我们提出了加权轮询算法,为不同性能的节点赋予不同权重。
哈希算法
通常将用户 id 或 ip 作为key,计算出对应的hash值,然后再对节点数量取模,即hash(key) mode n,其中n为节点数,得到该用户请求落到哪个节点上。该方法可以做到让同一个请求落到同一个节点中,但是当节点数量发生动态变化时,该方法就不太适应了。此时,就应该使用一致性hash算法。一致性hash算法就是把每台server分成v个虚拟节点,再把所有虚拟节点(n*v)随机分配到一致性哈希的圆环上,这样所有的用户从自己圆环上的位置顺时针往下取到第一个vnode就是自己所属的节点。当此节点存在故障时,再顺时针取下一个作为替代节点。
目前负载均衡系统有Nginx、LVS、F5,其总会难过Nginx是软件的7层负载均衡,LVS是内核的4层负载均衡,F5是硬件的4层负载均衡。
软件和硬件的区别在于性能,硬件远远高于软件,Nginx的性能是万级的,一般的Lin服务器上安装一个Nginx能达到每秒5万并发请求;而F5的性能能达到百万级,从200万每秒到800万每秒都有,不过价格很贵。
4层和7层的区别在于协议和灵活性,Nginx是7层的,它支持HTTP等协议,而LVS和F5是4层协议,它们和协议无关,几乎所有应用都可以做。
评论时间:2024-05-10 06:25:02
20.节阿里虚拟主机 能服务器机柜牌子 0.节能环保
评论时间:2024-01-16 00:25:02
主机型服务器(简称主机)一般由一台或多租用云服务器多少钱 台计算机组成电信云主机可以做什么 计算机组成
评论时间:2023-04-01 15:25:02
25购买国外虚拟主机 .快速部署独享虚拟主机是干啥的 署
评论时间:2023-01-05 00:25:02
3、在“选项-高级/服务器租用多少钱一年学生 安全”选项卡上单击“创建虚拟网卡(XP)”命令虚拟主机或者云主机
2023-12-25 22:44:35 admin
活动发布区版规2023-05-27 22:03:52 御风而行
容器、无服务器、虚拟机:安全性差...2023-05-27 20:43:39 1356
服务器宕机的造成原因和解决方法介...2023-05-27 20:43:25 qingym
别糊涂了!服务器与工作站的五大区...2023-05-27 19:08:41 小绵羊0123
科技巨头布局云端 服务器 网络硬...2023-05-27 18:17:46 姐姐的跟屁虫
钉钉因系统访问流量激增,宕机1小...2022-07-23 00:34:02 freeatom
常见ftp命令 FTP命令使用详...2022-07-21 02:17:02 ares
双硬盘组建Raid0磁盘阵列图文...2022-07-20 06:17:02 mankeung123
用友软件客户端连接不上服务器的解...2022-07-23 00:51:02 antonfxb
WebService实例2022-07-13 05:38:02 苯小孩
开发、运维不可不看的Linux调...2022-07-20 18:51:02 nightstone
如何使用Charles抓取Web...2022-01-18 05:38:03 jiess
是自购服务器、还是租用虚拟机、亦...2022-01-26 05:38:02 zhg1
web服务器配置2022-07-19 20:17:02 dengyu0429
linux vi使用及详细介绍2022-07-19 22:00:04 madmadcat
Linux视频教程:用户管理相关...2022-07-20 02:17:02 yuxuezeng
linux ACL权限介绍(1)2022-07-20 03:34:02 流浪的风
常用的财务软件有哪些?2022-07-19 20:17:02 dengyu0429
linux vi使用及详细介绍2022-07-20 01:00:05 激动的舌头
Linux视频教程:用户管理命令...2022-07-21 20:51:02 jessica-an
创建本地FTP站点2022-02-07 05:38:03 jasonkidd
WEB服务器配置详解2022-07-20 04:51:02 wolfssss
ACL权限-默认与递归(4)2022-07-22 15:00:05 淡水珊瑚
Linux下 Samba Ser...