作者: 田维常 2021-01-27 09:45:17
服务器
分布式 那今天我们就用生活中的故事来聊聊负载均衡。文章中部分可能有点啰嗦,但是为了更好能让大家理解,我也是拼了
创新互联于2013年成立,先为五指山等服务建站,五指山等地企业,进行企业商务咨询服务。为五指山企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
最近有小伙伴在后台留言,让我写一篇负载均衡的文章,说网上文章其实已经很多了,每次都觉得某某文章讲的不错,可是一旦过段时间,啥都不记得了。那今天我们就用生活中的故事来聊聊负载均衡。文章中部分可能有点啰嗦,但是为了更好能让大家理解,我也是拼了,真真切切的想让大家掌握知识。
什么是负载均衡?
负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
负载均衡通常有两种目的:均摊压力和提供冗余(也可以理解为备份)。
生活案列
上面还看不懂的话,我们继续用生活案列来说:
高速路出口处,如果只有一个出口时,突然有一天出现大量车辆(假设大家都没有办理ETC)这个高速出口下高速, 比如有几百两这会都要下高速,但是下高速要交过路费,每辆车至少也要耽搁几分钟,几百辆!!!意味着后面的可能要等几个小时,如果有多个出口呢?那就没必要等那么久了。
如果在增加一个出口,这时候就是两个出口可以均摊车辆下高速,还得分收费员快慢,车辆3看到车1那边要快点,然后就跟上车1。
如果再增加n个就可以想象效果了。但是太多了,貌似也会造成资源浪费,很多出口一天都没有几辆车出入,如果搞得太多岂不浪费,所以我们一般看到大多数都是两个,可以理解备用急用。
「我们就把司机理解为负载均衡器,可以根据前方路况进行判别走哪个出口。判别的方法就可以理解为负载均衡算法。」
用我们技术领域的术语叫做冗余。收费员的速度我就可以理解为我们系统某个服务的性能。
技术领域
下面用一张图来描述我们技术领域的负载均衡:
结合生活中的场景和技术领域的场景一起理解更酸爽。
注意:集群指的是我们同一个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简单示意图
优点
缺点
实际的情况:在实际的项目部署,我们一般会将部分服务器使用DNS解析,利用域名解析作为第一级负载均衡.再在服务器中使用nginx负载均衡作为第二级负载均衡。
硬件负载均衡
硬件负载均衡是通过单独的设备来实现负载均衡的功能,这类设备和路由器交换机有那么一些类似,更或者可以理解为一个用于负载均衡的基础网络设备。目前业界主要有两款硬件负载均衡:F5和A10。这类设备性能好,功能强大,但是价格可以用昂贵来形容,一般只有银行,国企等大型有钱的企业开会考虑使用此类设备,本人也只是在银行里见识过F5。至于A10没接触过就不撤了。
优点
功能强大:全面支持各层级的负载均衡,支持各种负载均衡算法,支持全局负载均衡。
性能好:一般软件负载均衡能支撑10w+并发已经很不错了,但是硬件的负载均衡却可以支持100w+以上的并发。
高稳定性:因为是商业品,所以经过了良好严格的测试,经过大规模的使用,所以稳定非常高。
安全性高:硬件负载均衡设备除了能处理负载均衡以外,还具有防火墙、防DDOS攻击等效果。
缺点
价格昂贵:我记得之前银行购买F5花了上百万,据说还有更贵的,所以价格可想而知。
扩展性不好:硬件设备可以根据业务进行配置,但无法进行扩展和定制化。
软件负载均衡
软件负载均衡是通过负载均衡软件来实现负载均衡功能的。常见的负载均衡软件有LVS和Nginx。其中LVS是Linux内核的四层负载均衡,四层和七层的区别在于他们协议和灵活性的不同。Nginx是7层负载均衡,支持HTTP,E-mail协议,而LVS是四层负载均衡,所以和协议无关,基本上所有应用都可以做到,比如说:聊天、数据库等。
以下是Nginx的负载均衡简单示意图:
优点
缺点
负载均衡有什么用?
常用负载均衡算法
轮训
负载均衡系统接收到请求后,按照一定顺序将请求分发给服务器上。轮训是一种简单的负载均衡算法策略,不会去关注服务器状态。
优点:如果服务器都是正常的,那么轮训是最理想的,因为它会使得每个服务都得到相等量的请求,可以用"雨露均沾"来形容。
缺点:上面的有点是理想状态的,但是现实往往不是那样的,现实还是很骨感滴,线上系统往往出现各种各样的问题,比如:当有一台服务器挂了,轮训算法不会管服务器状态,就是会导致大量的请求到一台已经挂掉的服务器上,从而导致系统不可用,进而造成用户流失。另外一种常见的问题就是有的服务器响应快,有的响应慢(比如32核的服务器和16核的服务器),轮训算法也不关注相应快慢,所以会导致很多服务请求响应时间慢,简单的导致用户体验不好,由于响应时间慢甚至可能拖垮其他系统。
加权轮训
负载均衡系统根据服务器权重进行请求任务分派到对应的服务器上,这里的权重一般是根据系统硬件配置进行静态配置的,采用动态的方式计算会更加适合业务,但是复杂度相比简单的轮训就高很多。
加权轮训是轮训的一种特殊方式,主要目的是解决服务器处理能力的差异问题,比如:集群中有的服务器是32核,有的老系统却是16核,那么理论上我们可以对其进行权重配置值,即就是32核服务器的处理能力是16核的两倍,负载均衡算法权重比例调整为2:1,让更多的请求分发给32核的服务器。
加权轮训解决了轮训算法中误服根据服务器的配置的差异任务进行更好的分配的问题,其实还是会存在无法根据服务器的状态差异性进行请求任务分配的问题。
负载最低优先
负载系统将请求分配给当前负载最低的服务器,这里的负载根据不同请求类型和业务处理场景,可以用不同的指标来衡量。比如以下几个场景,
负载最低优先算法解决了轮训算法中无法感知服务器状态的问题,但是由此带来的代价是复杂度增加很多,比如:
负载最低优先的算法基板上能够很完美解决了轮训算法的缺点,也因为采用负载最低优先算法后,负载均衡系统需要感知服务器当前运行状态,此时,同样造成代价上升很多。对于开发者来说也许轮训算法只要简短的代码就可以实现,然而负载最低优先算法需要大量的代码来实现。
负载最低优先看起来是解决了轮训中的缺点,然后由于其复杂度的提升,导致真正使用中比例还不如轮训或者轮训加权算法。
性能最优
负载最低优先算法是站在服务器的角度来进行请求分配的,而性能最优算法是站在客户端的角度进行分配的,优先将请求分配给处理速度快的服务器,通过这种方式达到了最快响应给客户端。
性能优先其实也负载最低优先有点类似,都是需要感知服务器的状态,与之不同的是性能最优是通过响应时间这个标准,在外部进行感应服务器状态而已,同样的实现复杂度也很高,主要体现在以下方面:
Hash类
负载均衡系统根据请求中某些关键字进行hash运算,得到的相同值得分发到同一台服务器上去,这样做的目的主要是为了满足特定的业务需求,比如:
负载均衡算法应用
Dubbo中使用了哪些负载均衡算法?
类图
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;
- }
总结
我们用生活中的故事来讲述了负载均衡,讲述了什么是负载均衡,负载均衡的作用,负载均衡的种类,负载均衡算法种类,以及我们在Dubbo和nginx中负载均衡算法的应用。
本文转载自微信公众号「Java后端技术全栈 」,可以通过以下二维码关注。转载本文请联系Java后端技术全栈 公众号。
新闻标题:分布式|不可不知的负载均衡
浏览地址:http://www.shufengxianlan.com/qtweb/news29/551279.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联