本系列文章是把作者学习web中间件时候的实操记录分享出来,内容主要包括web中间件入门的一些理论概念知识、场景应用、程序部署,希望能够帮到一些初学者,少走一些弯路。
负载均衡算法和常见实现方式
负载均衡#、#硬负载#、#软负载#、#什么是负载均衡#、#负载均衡的概念#、#负载均衡的实现方式#、#高可用#、#四层、七层负载均衡的区别#
1.负载均衡的算法/策略
现有的负载均衡算法主要分为静态和动态两类。静态负载均衡算法以固定的概率分配任务,不考虑服务器的状态信息,如轮询法、加权轮询法等;动态负载均衡算法以服务器的实时负载状态信息来决定任务的分配,如最小连接法、加权最小连接法等。
(1)随机、加权随机
随机(Random),是随机选择一台服务器来分配任务。它保证了请求的分散性达到了均衡的目的。同时它是没有状态的不需要维持上次的选择状态和均衡因子。但是随着任务量的增大,它的效果趋向轮询后也会具有轮询算法的部分缺点。
加权随机,就是在随机算法的基础上,给每个服务增加一个权重,权重越大,概率越大。
(2)轮询、加权轮询
轮询(Round Robbin),就是将用户的请求轮流分配给服务器,就像是挨个数数,轮流分配。这种算法比较简单,他具有绝对均衡的优点,但是也正是因为绝对均衡它必须付出很大的代价,例如它无法保证分配任务的合理性,无法根据服务器承受能力来分配任务。存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。轮询法适合服务器群中各服务器的处理能力相同,且每笔业务处理量差异不大的场景。
加权轮询(Weighted Round Robbin),解决了简单轮循调度算法的缺点,根据服务器各自处理能力为轮询中的每台服务器附加一定权重的算法。比如服务器1权重1,服务器2权重2,服务器3权重1,则各自的权重为1/4、1/4、3/4。
(3)最小连接、加权最小连接
最少连接(Least Connections),在多个服务器中,与处理连接数(会话数)最少的服务器进行通信的算法。即使在每台服务器处理能力各不相同,每笔业务处理量也不相同的情况下,也能够在一定程度上降低服务器的负载。
加权最少连接(Weighted Least Connection),为最少连接算法中的每台服务器附加权重的算法,该算法事先为每台服务器分配处理连接的数量,并将客户端请求转至连接数最少的服务器上。
(4)源地址哈希法
源地址哈希的思想是获取客户端访问的IP地址值,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是要访问的服务器的序号。保证了相同客户端IP地址将会被哈希到同一台后端服务器,直到后端服务器列表变更。根据此特性可以在服务消费者与服务提供者之间建立有状态的session会话。当某一服务提供者宕机时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
2.负载均衡的实现/应用
这部分讲解负载均衡实现的应用,列举了常见的应用场景和均衡器。
PS:OSI模型共有七层,从下到上分别是物理层、数据链路层、网络层、运输层、会话层、表示层和应用层。
任何的负载均衡技术都要想办法建立某种一对多的映射机制:一个请求的入口映射到多个处理请求的节点,从而实现分而治之(Divide and Conquer)。这种映射机制使得多个物理存在对外体现为一个虚拟的整体,对服务的请求者屏蔽了内部的结构。
采用不同的机制建立映射关系,可以形成不同的负载均衡技术,常见的有DNS、硬件负载均衡(F5、深信服AD等)、LVS、Nginx、HAProxy等。
(1)DNS域名解析负载均衡
利用DNS解析到多个地址实现负载均衡。大型网站使用较多。一般大型网站喜欢使用DNS域名解析作为一级负载均衡,然后再在内部用其他手段做二级负载均衡。
(2)四层负载均衡实现(硬件负载):
F5、深信服AD:硬件负载均衡,功能和性能很好,但是成本很高。
(3)四层负载均衡实现方式(软件负载):
LVS:重量级的四层负载软件。
Nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活。(通过stream模块)
HAProxy:模拟四层转发,较灵活。
(4)七层负载均衡实现(软件负载):
HAProxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移。
Nginx:只在http协议和mail协议上功能比较好,性能与HAProxy差不多。
Apache:配置简单,但功能较差。
总的来说,一般是LVS做4层负载;Nginx做7层负载(也能做4层负载,通过stream模块);HAProxy比较灵活,4层和7层负载均衡都能做。
一般情况下采用F5/深信服AD/LVS + Nginx/HAProxy,最理想的负载均衡是DNS + F5/深信服AD + LVS +
Nginx/HAProxy。
IT小胖豆:初学者踩坑之路及过程分享,希望能够帮到一些初学者,欢迎各位IT打工人,入坑讨论-_-