《Spring Cloud微服务实战》读书笔记之客户端负载均衡:Spring Cloud Ribbon - 4

摘要

客户端负载均衡组件部署在客户端,由客户端维护要访问的服务端清单(清单来源于服务注册中心)。在Spring Cloud 中默认使用Ribbon作为客户端负载均衡。

关键词:客户端负载均衡Ribbon

一、什么是客户端负载均衡

负载均衡是对系统高可用、缓解网络压力、处理能力扩容的重要手段之一。通常说的负载均衡指的是服务端负载均衡。即负载均衡组件部署在服务端,进行请求的分发。
客户端负载均衡则是组件部署在客户端,由客户端维护要访问的服务端清单(清单来源于服务注册中心)。
在Spring Cloud 中默认使用Ribbon作为客户端负载均衡。

二、Spring Cloud Ribbon 介绍

Spring Cloud Ribbon 是一个基于Netflix Ribbon实现的、基于HTTP和TCP的客户端负载均衡工具。Ribbon可以将面向服务的REST模板(RestTemplate)请求自动转换成客户端负载均衡调用。

另一个功能相似的工具是Feign,它同样是基于Ribbon实现的客户端负载均衡工具。

RestTemplate是Spring内置的HTTP请求封装,在Spring Cloud中,该对象使用Ribbon的自动化配置。

Ribbon负载均衡器客户端实现
代码中使用@LoadBalanced注解,使用LoadBalancerClient接口来配置RestTemplate。

@Bean
@LoadBalanced
RestTemplate restTemplate() {
    return new RestTemplate();
}

以下是源码里几个比较重要的接口/实现:

接口/实现 说明
LoadBalancerClient Spring Cloud负载均衡器的通用接口,定义客户端应具备的几种能力。(choose-选择负载均衡器实例、execute-执行请求内容、reconstructURI-重构URI)
LoadBalancerAutoConfiguration 客户端负载均衡的自动化配置类,创建LoadBalancerInterceptor拦截器、RestTemplateCustomizer配置器和维护一个RestTemplate对象列表
LoadBalancerInterceptor 用于拦截请求,发起实际的请求
RestTemplateCustomizer 为RestTemplate配置前面的拦截器
ILoadBalancer接口 定义客户端负载均衡器需要的系列抽象操作(维护服务实例、标识服务实例状态、负载均衡策略)
RibbonLoadBalancerClient Ribbon对负载均衡器实现,实现了ILoadBalancer

Ribbon负载均衡器器实现

接口/实现 说明
IloadBalancer 负载均衡器接口
AbstractLoadBalancer 负载均衡器抽象接口,定义服务状态枚举及获取服务相关类
BaseLoadBalancer 负载均衡器的基础实现类,维护服务列表、统计信息、定时健康检查任务、负载处理规则

三、重试机制

Spring Cloud Eureka的服务治理机制强调了CAP(一致性、可用性、可靠性)原理中的AP,牺牲了一定的一致性。为了在可用性和一致性上的取舍,Eureka会在超过85%的实例心跳丢失时触发保护机制(不再剔除服务),允许存在故障服务。因此在服务调用时引入了重试机制。(重试次数由MaxAutoRetriesNextServer配置)

参考资料

  • 《Spring Cloud微服务实战》

猜你喜欢

转载自www.cnblogs.com/guanjianzhuo/p/9822546.html
今日推荐