HA - 负载均衡实现方式及算法

Posted 技术流攻城狮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HA - 负载均衡实现方式及算法相关的知识,希望对你有一定的参考价值。

一、负载均衡的概念

负载均衡,英文 名称为LoadBalance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。负载均衡能够平均分配客户请求到服务器阵列,借此提供快速获取重要数据,解决大量并发访问服务问题,这种集群技术可以用最少的投资获得接近于大型主机的性能。(来源:网络定义)
用糙话说就是:当服务组成由一台服务器处理的时候期初能够承担所有的网络请求和业务处理,但是随着后期业务量的上升,在不考虑集群和业务拆分的场景下单服务器的处理能力有限,往往会导致服务能力下降甚至宕机,反过来如果需要多服务器协调处理就会出现同样提供服务能力的情况下,应该选择那一台服务器去处理,而这个确定如何分配请求资源的服务在整个集群环境下起着举足轻重的作用,实现的最终目标就是提高并发,达到有限资源使用的合理性,这也就是负载均衡的重要意义。


二、负载均衡分类

根据负载均衡的实施方式总体可分为两种:软件和硬件

1、软件负载均衡

是指基于服务器操作系统安装必要的软件,从而达到负载均衡的效果,最常见的例如:LVS、nginx、HAproxy,其优点是安装简单,配置方便,可以满足大部分的负载均衡的场景,还有最大的一个优点就是:成本低。

2、硬件负载均衡

直接在服务器和外部网络间安装负载均衡硬件设备,这种设备我们通常称之为负载均衡器。由专门的设备完成,独立于操作系统,整体性能得到大量提高,加上更多的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。 一般来说,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵,很常见的有 F5负载均衡器,有钱任性我们就不多阐述了,毕竟我们不是思聪。


三、负载均衡的实现方式

1、HTTP重定向

在整个HTTP重定向实现服务器集群负载均衡过程中,存在三个角色:客户端(浏览器),重定向调度者,请求处理服务器,而对于浏览器其实进行了两次http请求。这也就是为什么叫http重定向

2、DNS

这也就说明一旦域名解析服务异常会导致访问该解析服务器的域名网站无法访问致,也说明什么会出现DNS劫持的问题

3、反向代理

4、负载均衡中间件

这样称呼可能似乎不准,因为不外乎针对软件负载均衡层面有较多的处理方式,但常用有针对性的在整个集群环境下我个人认为也可以理解。 例如:Nginx,lvs,apache,zookeeper等,甚至我们在开发过程中的Dubbo自身的注册中心也具有此角色能力。


四、负载均衡算法

1、轮询法

“风水轮流转 今年到我家”,将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

这样看似我们解决了资源调配的问题,但是资源真正合理利用了吗,愿望很美丽现实却很骨感,实际应用中同一个服务会部署到不同的硬件环境,性能各不相同。若直接使用简单轮询调度算法,给每个服务实例相同的负载,那么,必然会出现有的资源紧张有的浪费的情况。因此为了避免这种情况发生,业界就提出了加权轮询算法的解决方案。

2、加权轮询法

"能力越大,责任越大",不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端

3、随机法

“点兵点将,大兵大将,小兵小将......”,通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。看似随机,其实当请求数增大到一定程度的时候,随机优势不再明显,而最终的分配效果可能更加贴近于轮询方式。

4、加权随机法

与加权轮询法一样,加权随机法也根据后端机器的性能配置,给系统的负载分配不同的权重值,调度者会依据权重值进行随机抽取相应的服务并进行请求,而不是同普通随机法是按照点兵点将的方式盲目提供。

5、哈希值寻址法

6、最小连接数法

“谁有空谁来”,最小连接数算法想对来说已经从死板的轮询和加权中脱离出来,它具有一定的智能性,还是源于我们的后端服务器的配置各不相同,对于请求的处理有快有慢,对于请求的堆积情况有多有少,调度服务需要获取众多服务器当前的实际链接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器

总结:方法千千万,而原则是恒定不变的,负载均衡的最终目的就是在有限的资源配置下如何将资源利用最大化,且保障服务的可用性,才是我们要考虑的方向。


以上是关于HA - 负载均衡实现方式及算法的主要内容,如果未能解决你的问题,请参考以下文章

Nginx负载均衡中常见的算法及原理有哪些

负载均衡的分类及算法

[转帖]利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞

LVS负载均衡群集

Nginx+Keepalived 实现反代 负载均衡 高可用(HA)配置

centos 7 之haproxy的配置文件详解及haproxy参数调优