最近有小伙伴在后台留言,让我写一篇负载均衡的文章,说网上文章其实已经很多了,每次都觉得某某文章讲得不错,可是一旦过段时间,啥都不记得了。那今天我们就用生活中的故事来聊聊负载均衡。文章中部分可能有点啰嗦,但是为了更好能让大家理解,我也是拼了
,真真切切地想让大家掌握知识。
什么是负载均衡?
负载均衡,英文名称为LoadBalance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
负载均衡通常有两种目的:均摊压力和提供冗余(也可以理解为备份)。
生活案列
上面还看不懂的话,我们继续用生活案列来说:
高速路出口处,如果只有一个出口时,突然有一天出现大量车辆(假设大家都没有办理ETC)这个高速出口下高速,比如有几百辆这会都要下高速,但是下高速要交过路费,每辆车至少也要耽搁几分钟,几百辆!!!意味着后面的可能要等几个小时,如果有多个出口呢?那就没必要等那么久了。
如果在增加一个出口,这时候就是两个出口可以均摊车辆下高速,还得分收费员快慢,车辆3看到车1那边要快点,然后就跟上车1。
如果再增加n个就可以想象效果了。但是太多了,貌似也会造成资源浪费,很多出口一天都没有几辆车出入,如果搞得太多岂不浪费,所以我们一般看到大多数都是两个,可以理解备用急用。
「我们就把司机理解为负载均衡器,可以根据前方路况进行判别走哪个出口。判别的方法就可以理解为负载均衡算法。」
用我们技术领域的术语叫做冗余。收费员的速度我就可以理解为我们系统某个服务的性能。
技术领域
下面用一张图来描述我们技术领域的负载均衡:
结合生活中的场景和技术领域的场景一起理解更酸爽。
注意:集群指的是我们同一个App应用服务的部署多个节点,集群的主要目的就是为了分担压力的。负载均衡器(系统)就可以理解为指挥员。来一个请求,指挥员把这个请求根据一定方法交给集群中的某个服务。指挥员就可以按照各种方式进行分配请求到集群中的某个服务。随机给、排队给、谁反应快给谁等方法,也就是形成了负载均衡算法。
以上比喻仅仅是个人理解。
负载均衡的种类
DNS
(DomainNameSystem域名系统)它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过个字符。DNS是最简单也是最常见的负载均衡方式,一般用来实现“地理级别”的负载均衡,比如说:北方人访问北京的机房,南方人访问广州的机房,西方人访问成都的机房。DNS负载均衡的本质是DNS解析同一个域名可以返回不同的IP地址。比如说: