07-分布式架构设计三(客户端负载均衡)
xiangliheart
xiangliheart
发布于 2022-02-05 / 13 阅读 / 0 评论 / 0 点赞

07-分布式架构设计三(客户端负载均衡)

客户端负载均衡

在生产环境中,每个服务节点都必须保证高可用,因此需要对服务节点进行负载均衡处理。传统的负载均衡属于服务端负载均衡,利用负载硬件或软件实现,如Nginx、LVS、HAProxy都是部署在服务端,如图3-18所示。

图3-18 服务端负载

在微服务架构下,负载均衡方式发生了明显的变化,如图3-19所示,库存服务部署了两个节点,分别位于10.1.22.31和10.1.22.41两台服务器上。当服务启动时,它们都会将自己的IP地址和端口信息发送给注册中心,因此注册表中就会存储两条库存服务的注册记录。

当订单服务请求库存服务时,从注册中心获取注册表信息时就会发现两个可用的库存服务(10.1.22.31:8801、10.1.22.41:8801),订单服务选择其中一个IP地址和端口进行请求即可,每次请求都根据负载策略决定。

图3-19 微服务客户端负载原理

整个负载的过程发生在调用方(客户端),因此称之为客户端负载均衡。客户端负载均衡很好地避免了负载设备的引入,服务节点之间依然可以直接通信,极大地提高了微服务的交互性能,这也是其与

Nginx等服务端负载技术的核心区别。

客户端负载均衡策略主要有以下8种。

(1)   轮询策略:依次向微服务发送请求,一般为默认策略。

(2)   最小并发数策略:选择一个最小并发请求数的服务。

(3)   最小连接数策略:选择一个连接数最小的服务进行调用。

(4)   可用性过滤策略:过滤那些不可用,或者被标记为已中断的服务。

(5)   响应时间权重策略:根据微服务响应的时长计算权重,将请求更多地发送至权重较大的服务上。

(6)   重试策略:使用重试机制,在选择目标服务失败时,重新尝试选择。

(7)   随机策略:随机选择一个微服务进行调用。

(8)   可用区域策略:判断微服务所在的区(一般一个区是一个数据中心)是否可用,只选择可用区的服务进行调用。

Spring Cloud框架中使用Ribbon组件实现负载均衡,默认使用轮询策略,具体细节这里不再深入。


评论