a10负载均衡(a10负载均衡器)

最近有个朋友在后台留言,让我写一篇负载均衡的文章,说其实网上的文章很多。每次都觉得某某文章讲的不错,但是过了一段时间就什么都不记得了。今天,我们用生活故事来谈谈

最近有个朋友在后台留言,让我写一篇负载均衡的文章,说其实网上的文章很多。每次都觉得某某文章讲的不错,但是过了一段时间就什么都不记得了。今天,我们用生活故事来谈谈负载均衡。文章中间部分可能有点啰嗦,但我也是为了让大家更好理解才拼出来的。

a10负载均衡(a10负载均衡器)插图

真的想让大家都掌握知识。

a10负载均衡(a10负载均衡器)插图(1)

什么是负载均衡?

负载均衡,英文命名为Load Balance,是指将负载(工作任务)均衡分布到多个运行单元,如FTP服务器、Web服务器、企业核心应用服务器和其他主任务服务器等。,从而共同完成工作任务。

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

生活案列

如果你还是不能理解上面的话,我们继续用生活清单:

a10负载均衡(a10负载均衡器)插图(2)

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

a10负载均衡(a10负载均衡器)插图(3)

如果增加一个出口,此时两个出口可以平分车辆下高速的速度,收费员的速度也是有分数的。车辆3看到车1要赶紧,然后跟车1。

a10负载均衡(a10负载均衡器)插图(4)

如果再加n个,效果可想而知。但是太多了,似乎也会造成资源的浪费。很多出口一天没有几辆车进出。如果退出太多就不浪费了。所以我们一般看到的大多是两个,可以理解为应急用。

a10负载均衡(a10负载均衡器)插图(5)

“我们把司机理解为一个负载平衡器,可以根据前方路况决定走哪个出口。区分的方法可以理解为负载均衡算法。」

在我们的技术领域,叫冗余。我可以把收费速度理解为我们系统中一项服务的性能。

技术领域

使用下图描述我们技术领域的负载平衡:

a10负载均衡(a10负载均衡器)插图(6)

把生活中的场景和技术领域的场景结合起来,更酸更爽。

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

以上比喻只是个人理解。

负载均衡的种类DNS

(域名系统)作为一个将域名和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图

a10负载均衡(a10负载均衡器)插图(7)

优势

配置简单,无成本费用将负载均衡的工作交给了DNS服务器,省去了管理的麻烦。

劣势

记录的添加与修改是需要一定时间才能够生效的(因为DNS缓存了A记录)。一旦有一台服务器坏了需要下线,即使修改了A记录,要使其生效也需要较长的时间,这段时间,DNS仍然会将域名解析到已下线的服务器上,最终导致用户访问失败。不能按需分配负载,DNS并不知道各服务器的真实负载情况,所以负载效果不是很好

实际情况:在实际项目部署中,我们通常会对部分服务器使用DNS解析,域名解析作为第一级负载均衡,然后在服务器中使用nginx负载均衡作为第二级负载均衡。

硬件负载均衡

硬件负载均衡是通过独立的设备实现负载均衡的功能,类似于路由器和交换机,也可以理解为负载均衡的基本网络设备。目前,业界硬件负载均衡主要有两种类型:F5和A10。这种设备性能好,功能强大,但是价格可以用贵来形容。一般只有银行、国企等大而富的企业才会考虑使用这类设备。我只在银行见过F5。至于A10,它不会被撤回,直到它被感动。

优势

功能强大:全面支持各层级的负载均衡,支持各种负载均衡算法,支持全局负载均衡。性能好:一般软件负载均衡能支持10w+并发已经很不错了,但是硬件的负载均衡却可以支持100w+以上的并发。高稳定性:因为是商业品,所以经过了良好严格的测试,经过大规模的使用,所以稳定非常高。安全性高:硬件负载均衡设备除了能处理负载均衡以外,还具有防火墙、防DDOS攻击等效果。

劣势

价格昂贵:我记得之前银行购买F5花了上百万,据说还有更贵的,所以价格可想而知。扩展性不好:硬件设备可以根据业务进行配置,但无法进行扩展和定制化。软件负载均衡

软件负载均衡就是通过负载均衡软件实现负载均衡的功能。常见的负载均衡软件有LVS和Nginx。LVS是Linux内核的四层负载均衡,四层和七层的区别在于它们不同的协议和灵活性。Nginx是7层负载均衡,支持HTTP和电子邮件协议,而LVS是4层负载均衡,所以与协议无关。基本上所有应用都能做到,比如聊天,数据库。

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

a10负载均衡(a10负载均衡器)插图(8)

优势

nginx由C编写,同样的web服务器,占用的资源和内存低性能高。当启动nginx服务器,会生成一个master进程,master进程会fork出多个worker进程,由worker线程处理客户端的请求。nginx支持高并发,每个worker的进程是独立平等的,当有客户端请求时,worker进程公平竞争,抢到的worker进程会把请求提交给后端服务器,当后端服务器没有及时响应时,此worker进程会继续接收下一个request,当上一个请求有响应后会触发事件,此worker进程继续之前的执行,知道响应结束。一个request不会被两个worker进程执行。nginx支持反向代理(用户有感知的访问叫正向代理如使用vpn访问youtube,用户无感知访问叫反向代理如负载均衡),支持7层负载均衡(拓展负载均衡的好处)。nginx是异步非阻塞型处理请求(第三点印证),采用的epollandqueue模式,apache是阻塞型处理请求。nginx处理静态文件速度快(原因:nginx高度模块化,配置简单。nginx是单进程多线程)。

劣势

对比apache不稳定,由于是单进程多线程,进程死掉会影响很多用户。负载均衡有什么用?「流量分发」负载均衡能对多台主机流量进行分发,提高用户系统的业务处理能力,提升服务可用性「会话保持」在会话周期内,会话保持可使来自同一IP或网段的请求被分发到同一台后端服务器上。「健康检查」支持自定义健康检查方式和频率,可定时检查后端主机运行状态,提供故障转移,实现高可用;「负载均衡」解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);提高扩展性通过添加或减少服务器数量,提供网站伸缩性(扩展性);提高安全性安全防护,在负载均衡器上做一些过滤,黑白名单、防盗链等处理;常用负载均衡算法轮训

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

优点:如果服务器都正常,那么轮训是比较理想的,因为它会让每一个服务得到相等的请求数,可以用& # 34;雨全湿透了& # 34;来描述。

缺点:以上优点都很理想,但现实往往不是那样。现实还是很骨感的,线上系统经常出现各种问题。例如,当一个服务器死亡时,轮换训练算法将不会照顾到服务器状态,即会导致对死亡服务器的大量请求,导致系统不可用和用户流失。另一个常见的问题是,有的服务器响应快,有的服务器响应慢(比如32核服务器,16核服务器)。轮换训练算法不注重对应的速度,所以会导致很多服务请求响应时间慢,根本导致用户体验差,甚至可能拖累其他系统。

加权轮训

负载均衡系统根据服务器权重将请求任务分配给相应的服务器,其中权重通常根据系统硬件配置静态配置。以动态的方式计算更适合业务,但复杂度远高于简单的轮训。

加权轮训是轮训的一种特殊方式,主要目的是解决服务器处理能力的差异。比如一个集群中有的服务器有32核,而有的老系统有16核,那么理论上我们可以给它们分配权重,即32核服务器的处理能力是16核的两倍,负载均衡算法的权重比调整为2:1,这样就可以把更多的请求分配到32核服务器上。

加权轮换训练解决了轮换训练算法不能根据服务器配置的差异更好地分配任务的问题。实际上,仍然会存在无法根据服务器状态的不同来分配请求任务的问题。

负载最低优先

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

LVS这种4层网络负载均衡设备,可以以连接数来判断服务器的状态,服务器连接数量越大,表明服务器压力就越大。Nginx这种7层网络负载均衡系统,可以以HTTP请求数量判断服务器的状态(Nginx内置的负载均衡算法不支持这种方式,需要自行进行扩展)。如果我们是自己研发负载均衡系统,可以根据业务特点来选择衡量系统压力的指标。如果CPU是密集型,可以以CPU负载来衡量系统的压力;如果是IO密集型,则可以以IO负载来衡量系统压力。

最低负载优先级算法解决了轮换训练算法无法感知服务器状态的问题,但由此产生的代价是复杂了很多,比如:

最少链接数优先的算法要求负载系统统计每个服务器当前简历的链接,其应用场景仅限于负载均衡接收的任何请求都会转发给服务器进行处理,否则如果负载均衡系统和服务之间是固定的连接池方式,就不适合采取这种算法。LVS可以采取这种算法进行负载均衡,而一个通过连接池的方式链接数据库Mysql集群的负载均衡系统就不适合采取这种算法进行负载均衡了。CPU负载均衡最低优先的算法要求负载均衡系统以某种方式收集每个服务器的CPU的具体负载情况,同时要确定是以一分钟的负载标准,还是以10分钟、15分钟的负载标准,不存在1分钟肯定比15分钟的好或差。不同业务最优的时间间隔也是不一样的,时间间隔太短容易造成频繁波动,时间太长可能造成峰值来临时响应缓慢。

最低负载优先级算法基本上可以完美的解决轮换训练算法的缺点,而且由于负载均衡系统在采用最低负载优先级算法后需要感知服务器当前的运行状态,此时,成本也上升了不少。对于开发人员来说,也许轮换训练算法只需要很短的代码就可以实现,但是最低负载优先级算法需要大量的代码来实现。

最低负载优先级似乎解决了轮换训练的缺点,然后由于其复杂性,在实际使用中的比例还不如轮换训练或轮换训练加权算法。

性能最优

最低负载优先级算法从服务器的角度分配请求,最佳性能算法从客户端的角度分配请求,优先考虑处理速度快的服务器,从而实现对客户端最快的响应。

其实性能优先级也是最低负载优先级,有点类似。两者都需要感知服务器的状态,但不同的是,最好的性能是通过响应时间的标准对外感知服务器的状态,同样的实现复杂度也很高,主要体现在以下几个方面:

负载均衡系统需要收集每次请求的响应时间,如果在大量请求处理的场景下,这种收集再加上响应时间的统计本身也会消耗系统的性能。为了减少这种统计上的消耗,可以采取采样的方式进行统计,即就是不用很完全的去统计所有服务器的所有请求时间,而是抽样统计部分任务的响应时间来估算整体请求所花的响应时间。采样统计虽然能减轻性能的消耗,但使得实现的复杂度增加了很多,因为要确定合适的采样率,采样率太低会导致数据的正确性,采样率高同样会造成性能的消耗,要找到一个合适的采样率的复杂度也是可想而知的。无论全部统计,还是采样统计,都需要选择合适的周期,是30秒性能最优还是1分钟最优?目前是没有标准的周期,都是需要具体业务场景进行决策,是不是感觉到了其复杂性,尤其是线上系统需要不断地调试,然后找出相对合适的标准。Hash类

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

源地址Hash:将来源于同一个IP地址的请求分配给同一个服务器进行处理,适合于存在事务、会话的业务。例如:当我们通过浏览器登录网上银行时,会生成一个会话信息,这个会话是临时的,关闭浏览器后就会失效。网上银行后台无须持久会话信息,只需要在某台服务器临时保留这个会话就可以了,但需要保证用户在会话存在期间,每次请求都能访问在同一个服务器,这种业务场景就是通过源地址hash来实现的。ID hash :将某个ID表示的业务分配到同一台服务器上进行处理,比如:userId session id。上述的网上银行登录的例子,用session id hash可以实现同一个会话期间,用户每次都是访问同一台服务器上的目的。负载均衡算法应用Dubbo中使用了哪些负载均衡算法?Random LoadBalance(随机算法,默认)RoundRobin LoadBalance(权重轮训算法)LeastAction LoadBalance(最少活跃调用数算法)ConsistentHash LoadBalance(一致性Hash法)

类图

a10负载均衡(a10负载均衡器)插图(9)

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

“循环调度”(round robin)(默认):轮询方式,将请求依次分配给各个后台服务器,是默认的负载均衡方式。适用于性能一致的后台机。报废的机器可以自动从服务列表中删除。

“权重”:根据权重将请求分配到不同的机器上,并指定轮询概率。权重与访问比例成正比,用于后端服务器性能不均衡的情况。例如:

upstreambakend { server 192 . 168 . 0 . 14 weight = 10;server 192 . 168 . 0 . 15 weight = 10;}“ip _ hash”:根据请求者ip的哈希值向后台服务器发送请求,可以保证来自同一个IP的请求发送到固定的机器上,解决会话问题。例如:

upstreambakend { ip _ hash服务器192 . 168 . 0 . 14:88;服务器192 . 168 . 0 . 15:80;}“url _ hash(第三方)”:根据请求的URL的哈希值将请求划分到不同的机器上,在后台服务器缓存时效率高。

比如在上游增加一个hash语句,其他参数比如权重不能写在server语句中,hash_method就是使用的hash算法。

“公平(第三方)”:根据后台响应时间分配请求,响应时间短的分配更多的请求。例如:

上游后端{服务器服务器1;服务器服务器2;公平;}总结我们讲述关于负载均衡的生活故事,什么是负载均衡,负载均衡的作用,负载均衡的类型,负载均衡算法的类型,以及我们的负载均衡算法在Dubbo和nginx中的应用。

如有疑问或疑问,评论区见~

“只要我们方向正确,就不怕路途遥远!」

码字不易,求赞转发。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/180410.html

发表回复

登录后才能评论