nginx中使用了哪些负载均衡算法

发布时间:2021-12-24 17:41:19 作者:iii
来源:亿速云 阅读:149

这篇文章主要讲解了“nginx中使用了哪些负载均衡算法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nginx中使用了哪些负载均衡算法”吧!

什么是负载均衡?

负载均衡,英文名称为Load  Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。

负载均衡通常有两种目的:均摊压力和提供冗余(也可以理解为备份)。

生活案列

上面还看不懂的话,我们继续用生活案列来说:

高速路出口处,如果只有一个出口时,突然有一天出现大量车辆(假设大家都没有办理ETC)这个高速出口下高速,  比如有几百两这会都要下高速,但是下高速要交过路费,每辆车至少也要耽搁几分钟,几百辆!!!意味着后面的可能要等几个小时,如果有多个出口呢?那就没必要等那么久了。

nginx中使用了哪些负载均衡算法

如果在增加一个出口,这时候就是两个出口可以均摊车辆下高速,还得分收费员快慢,车辆3看到车1那边要快点,然后就跟上车1。

nginx中使用了哪些负载均衡算法

如果再增加n个就可以想象效果了。但是太多了,貌似也会造成资源浪费,很多出口一天都没有几辆车出入,如果搞得太多岂不浪费,所以我们一般看到大多数都是两个,可以理解备用急用。

「我们就把司机理解为负载均衡器,可以根据前方路况进行判别走哪个出口。判别的方法就可以理解为负载均衡算法。」

用我们技术领域的术语叫做冗余。收费员的速度我就可以理解为我们系统某个服务的性能。

技术领域

下面用一张图来描述我们技术领域的负载均衡:

nginx中使用了哪些负载均衡算法

结合生活中的场景和技术领域的场景一起理解更酸爽。

注意:集群指的是我们同一个App应用服务的部署多个节点,集群的主要目的就是为了分担压力的。负载均衡器(系统)就可以理解为指挥员。来一个请求,指挥员把这个请求根据一定方法交给集群中的某个服务。指挥员就可以按照各种方式进行分配请求到集群中的某个服务。随机给、排队给、谁反应快给谁等方法,也就是形成了负载均衡算法。

以上比喻仅仅是个人理解。

负载均衡的种类

DNS

(Domain Name System 域名系统  )它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。DNS是最简单也是最常见的负载均衡方式,一般用来实现“地理级别”的负载均衡,比如说:北方人访问北京的机房,南方人访问广州的机房,西方人访问成都的机房。DNS负载均衡的本质是DNS解析同一个域名可以返回不同的IP地址。比如说:https://www.sina.com.cn/在北方的用户使用时会解析成10.210.1.12(北京机房)返回,南方的用户使用时会解析成14.213.164.27返回(广州机房)。

DNS简单示意图

nginx中使用了哪些负载均衡算法

优点

缺点

实际的情况:在实际的项目部署,我们一般会将部分服务器使用DNS解析,利用域名解析作为第一级负载均衡.再在服务器中使用nginx负载均衡作为第二级负载均衡。

硬件负载均衡

硬件负载均衡是通过单独的设备来实现负载均衡的功能,这类设备和路由器交换机有那么一些类似,更或者可以理解为一个用于负载均衡的基础网络设备。目前业界主要有两款硬件负载均衡:F5和A10。这类设备性能好,功能强大,但是价格可以用昂贵来形容,一般只有银行,国企等大型有钱的企业开会考虑使用此类设备,本人也只是在银行里见识过F5。至于A10没接触过就不撤了。

优点

功能强大:全面支持各层级的负载均衡,支持各种负载均衡算法,支持全局负载均衡。

性能好:一般软件负载均衡能支撑10w+并发已经很不错了,但是硬件的负载均衡却可以支持100w+以上的并发。

高稳定性:因为是商业品,所以经过了良好严格的测试,经过大规模的使用,所以稳定非常高。

安全性高:硬件负载均衡设备除了能处理负载均衡以外,还具有防火墙、防DDOS攻击等效果。

缺点

价格昂贵:我记得之前银行购买F5花了上百万,据说还有更贵的,所以价格可想而知。

扩展性不好:硬件设备可以根据业务进行配置,但无法进行扩展和定制化。

软件负载均衡

软件负载均衡是通过负载均衡软件来实现负载均衡功能的。常见的负载均衡软件有LVS和Nginx。其中LVS是Linux内核的四层负载均衡,四层和七层的区别在于他们协议和灵活性的不同。Nginx是7层负载均衡,支持HTTP,E-mail协议,而LVS是四层负载均衡,所以和协议无关,基本上所有应用都可以做到,比如说:聊天、数据库等。

以下是Nginx的负载均衡简单示意图:

nginx中使用了哪些负载均衡算法

优点

缺点

负载均衡有什么用?

常用负载均衡算法

轮训

负载均衡系统接收到请求后,按照一定顺序将请求分发给服务器上。轮训是一种简单的负载均衡算法策略,不会去关注服务器状态。

优点:如果服务器都是正常的,那么轮训是最理想的,因为它会使得每个服务都得到相等量的请求,可以用"雨露均沾"来形容。

缺点:上面的有点是理想状态的,但是现实往往不是那样的,现实还是很骨感滴,线上系统往往出现各种各样的问题,比如:当有一台服务器挂了,轮训算法不会管服务器状态,就是会导致大量的请求到一台已经挂掉的服务器上,从而导致系统不可用,进而造成用户流失。另外一种常见的问题就是有的服务器响应快,有的响应慢(比如32核的服务器和16核的服务器),轮训算法也不关注相应快慢,所以会导致很多服务请求响应时间慢,简单的导致用户体验不好,由于响应时间慢甚至可能拖垮其他系统。

加权轮训

负载均衡系统根据服务器权重进行请求任务分派到对应的服务器上,这里的权重一般是根据系统硬件配置进行静态配置的,采用动态的方式计算会更加适合业务,但是复杂度相比简单的轮训就高很多。

加权轮训是轮训的一种特殊方式,主要目的是解决服务器处理能力的差异问题,比如:集群中有的服务器是32核,有的老系统却是16核,那么理论上我们可以对其进行权重配置值,即就是32核服务器的处理能力是16核的两倍,负载均衡算法权重比例调整为2:1,让更多的请求分发给32核的服务器。

加权轮训解决了轮训算法中误服根据服务器的配置的差异任务进行更好的分配的问题,其实还是会存在无法根据服务器的状态差异性进行请求任务分配的问题。

负载最低优先

负载系统将请求分配给当前负载最低的服务器,这里的负载根据不同请求类型和业务处理场景,可以用不同的指标来衡量。比如以下几个场景,

负载最低优先算法解决了轮训算法中无法感知服务器状态的问题,但是由此带来的代价是复杂度增加很多,比如:

负载最低优先的算法基板上能够很完美解决了轮训算法的缺点,也因为采用负载最低优先算法后,负载均衡系统需要感知服务器当前运行状态,此时,同样造成代价上升很多。对于开发者来说也许轮训算法只要简短的代码就可以实现,然而负载最低优先算法需要大量的代码来实现。

负载最低优先看起来是解决了轮训中的缺点,然后由于其复杂度的提升,导致真正使用中比例还不如轮训或者轮训加权算法。

性能最优

负载最低优先算法是站在服务器的角度来进行请求分配的,而性能最优算法是站在客户端的角度进行分配的,优先将请求分配给处理速度快的服务器,通过这种方式达到了最快响应给客户端。

性能优先其实也负载最低优先有点类似,都是需要感知服务器的状态,与之不同的是性能最优是通过响应时间这个标准,在外部进行感应服务器状态而已,同样的实现复杂度也很高,主要体现在以下方面:

Hash类

负载均衡系统根据请求中某些关键字进行hash运算,得到的相同值得分发到同一台服务器上去,这样做的目的主要是为了满足特定的业务需求,比如:

负载均衡算法应用

Dubbo中使用了哪些负载均衡算法?

类图

nginx中使用了哪些负载均衡算法

nginx中使用了哪些负载均衡算法?

「round  robin(默认)」:轮询方式,依次将请求分配到各个后台服务器中,默认的负载均衡方式。适用于后台机器性能一致的情况。挂掉的机器可以自动从服务列表中剔除。

「weight」:根据权重来分发请求到不同的机器中,指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如:

upstream bakend {     server 192.168.0.14 weight=10;     server 192.168.0.15 weight=10;     }

「IP_hash」:根据请求者ip的hash值将请求发送到后台服务器中,可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。例如:

upstream bakend {     ip_hash;     server 192.168.0.14:88;     server 192.168.0.15:80;     }

「url_hash(第三方)」:根据请求的url的hash值将请求分到不同的机器中,当后台服务器为缓存的时候效率高。

例如:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法 。

「fair(第三方)」:根据后台响应时间来分发请求,响应时间短的分发的请求多。例如:

upstream backend {     server server1;     server server2;     fair;     }

感谢各位的阅读,以上就是“nginx中使用了哪些负载均衡算法”的内容了,经过本文的学习后,相信大家对nginx中使用了哪些负载均衡算法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. Nginx是怎么实现负载均衡的?Nginx负载均衡实现案例
  2. Nginx七层负载均衡的调度算法有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

nginx

上一篇:Tomcat入门知识点有哪些

下一篇:linux中如何删除用户组

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》