分布式系统关注点——仅需这一篇,吃透「负载均衡」妥妥的
如果第二次看到我的文章,欢迎订阅z哥的公众号(跨界架构师)哦~
每周五11:45 按时送达。当然了,也会时不时加个餐~
本文长度为3426字,预计读完需1.2MB流量,建议阅读9分钟。
上一篇《分布式系统关注点——初识「高可用」》我们对「高可用」有了一个初步认识,其中认为「负载均衡」是「高可用」的核心工作。那么,本篇将通过图文并茂的方式,来描述出每一种负载均衡策略的完整样貌。
一、「负载均衡」是什么
正如题图所示的这样,由一个独立的统一入口来收敛流量,再做二次分发的过程就是「负载均衡」,它的本质和「分布式系统」一样,是「分治」。
如果大家习惯了开车的时候用一些导航软件,我们会发现,导航软件的推荐路线方案会有一个数量的上限,比如3条、5条。因此,其实本质上它也起到了一个类似「负载均衡」的作用,因为如果只能取Top3的通畅路线,自然拥堵严重的路线就无法推荐给你了,使得车流的压力被分摊到了相对空闲的路线上。
在软件系统中也是一样的道理,为了避免流量分摊不均,造成局部节点负载过大(如CPU吃紧等),所以引入一个独立的统一入口来做类似上面的“导航”的工作。但是,软件系统中的「负载均衡」与导航的不同在于,导航是一个柔性策略,终还是需要使用者做选择,而前者则不同。
怎么均衡的背后是策略在起作用,而策略的背后是由某些算法或者说逻辑来组成的。比如,导航中的算法属于「路径规划」范畴,在这个范畴内又细分为「静态路径规划」和「动态路径规划」,并且,在不同的分支下还有各种具体计算的算法实现,如Dijikstra、A*等。同样的,在软件系统中的负载均衡,也有很多算法或者说逻辑在支撑着这些策略,巧的是也有静态和动态之分。
二、常用「负载均衡」策略图解
下面来罗列一下日常工作中常见的5种策略。
01 轮询
这是常用也简单策略,平均分配,人人都有、一人一次。大致的代码如下。
int globalIndex = ; //注意是全局变量,不是局部变量。
try
{
return servers[globalIndex];
}
finally
{
globalIndex++;
if (globalIndex == 3)
globalIndex = ;
}
相关文章