RPC基础之负载均衡算法一文全搞懂

文章目录

      • 前言
      • 一、轮询法
      • 二、随机法
      • 三、地址哈希法
      • 四、权重法
      • 五、最小连接数法
      • 六、拓展
      • 结语

前言

在微服务的技术体系中,服务消费者从配置中心获取到服务的地址后,需要选择其中的一台服务器发起RPC调用。但是服务消费者依据什么去选择?怎么去选择?是摆在服务消费者前面的一道小难题。

对于不同的业务场景,选择最合适的算法就显得尤为重要,但是在选择前肯定是要对各个算法内容和特性有一个较为清晰的认识,那么今天的聊的就是几种最常用的负载均衡算法了。

一、轮询法

轮询法听名字就能理解她的核心奥义是:当请求过来之后按照顺序去遍历服务列表。

该算法可以将请求平均的分配到各个服务器上,使用该负载均衡算法的时候只需要深刻了解下面这几个问题就好了:

(1)服务列表的初始化时机?
(2)在生产环境中会出现服务的动态上线和下线,上线的时候需要注意的问题?下线需要注意的问题?
(3)使用轮询算法引起的性能问题?

二、随机法

该轮询算法是当一个请求到达的时候,根据随机数来选择对应的服务器。比如服务器编码1到10,然后每次请求到达的时候都随机生成1到10的随机数,根据生成的随机数来请求对应的服务器。

该负载均衡算法随着样本数的增加,最后的结果也是会越来越接近轮询法的流量分布情况,但是她比轮询法多出了一个生成随机数的过程,还要不要选择该算法是一个值得思考的问题。

三、地址哈希法

该算法是获取客户端的访问IP,然后对其进行哈希运算,将得到的结果对服务器的总和进行取模运算,进而得到服务器的编号。

该算法的特点是在服务器数量不变的情况下,每个客户端访问后都会被映射到后端的同一台服务器,这样可以避免实现session共享。ngnix就提供该负载算法的功能。

四、权重法

具体到后台的每台服务器,他们一方面是配置有高低之分,另一方面是当前机器本身的负载也不尽相同,这时我们就需要根据具体的情况来给不同的机器不同的请求数量,以保证服务的最优。

该算法的核心就是按照权重,权重大的在服务器列表中多加几台,权重小的在服务器列表中少加几台,剩下的按照轮询算法就可以了。

五、最小连接数法

从名字我们也能理解她的核心奥义:当请求达到之后,服务消费者选择一台待处理请求积压最少的机器来处理当前的请求。

​但是该算法实现起来相比较前几种更加的复杂。。

六、拓展

生产环境的情况总是多样的,往往理想很丰满,现实却很骨干。对于小型的系统来说选择其中一个可能就能满足需求,但是对于稍微复杂一点的系统选择其中的某一个或者某几种算法就可能不会那么好的响应全部需求,这时应该怎么办?我们只能根据具体的情况来选择合适的算法。就像风控系统一样,我们需要配置多条规则,在不同的情况下选择合适的算法来响应具体的线上需求。

结语

道阻且长,行则将至,行而不辍,未来可期,加油。

原创不易,如果你觉得文章不错,对你的进步有那么一点帮助,那么就给个小心心,如果觉得文章非常对你的胃口,那么欢迎你关注我,或者关注个人的微信公众号,咱们一起打怪升级。
RPC基础之负载均衡算法一文全搞懂_第1张图片

你可能感兴趣的:(精通JAVA之路,负载均衡,rpc)