Spring Cloud Ribbon源码分析(二) 列表更新

简介: Spring Cloud Ribbon源码分析(二) 列表更新

image.png


上节回顾:

通过Ribbon集成之后,RestTemplate做了什么事情?RestTemplate本身是一个HTTP客户端,让我们更加简化的完成HTTP请求,但是因为集成Ribbon后需要对请求实现负载均衡,所以在RestTemplate真正发起HTTP请求之前做了一个拦截,这个拦截就是LoadBalancerInterceptor完成的,它的最终实现是RibbonLoadBlancerClient去进行拦截和处理,在拦截过程中分析了几个阶段,第一个阶段是初始化阶段,怎么对加了LoadBalancer的注解RestTemplate进行拦截,通过讲解了自动装配过程,讲到LoadBalancerAutoConfiguration自动装配类,这个装配类里边是嵌套的Bean的依赖,下图的顺序就是bean的初始化的过程。通过这个一个过程对RestTemplate加了一个拦截,就可以使用负载均衡处理。


image.png


image.png


负载均衡规则:

RoundRobbinRule:默认的轮询规则

WeightedResponseTimeRule:通过服务平均的响应时间,给每一个服务一个权重,响应时间越长,权重越小,开始统计信息不足,应用轮序策略。

RandonRule:随机获取一个服务

RetryRule:先按照轮询策略获取服务如果获取服务失败则在指定时间内会重试,获取可用的服务。


image.png


allServerList和upServerList,服务器端提供地址列表在客户端内存中的缓存


image.png


调用规则


1,我们构建ZoneAwareLoadBalancer的其父类方法DynamicServerListLoadBalancer中的构造方法会执行,会调用this.restOfInit(clientConfig);


2,restOfInit中有两个重要的方法,enableAndInitLearnNewServersFeature和updateListOfServers;


3,enableAndInitLearnNewServersFeature调用,总体思想是用定时器scheduled通过updateListOfServers()来更新Eurake实例列表,enableAndInitLearnNewServersFeature中this.serverListUpdater.start(this.updateAction)默认每30s执行一次更新本地服务器列表,run中定时器,updateAction中调用了updateListOfServers方法。

serverListUpdater.start是在RibbonClientConfiguration中初始化的。


4,updateListOfServers调用serverListImpl.getUpdatedListOfServers()来更新服务器列表,getUpdatedListOfServers可以有多个实现,可以从本地配置文件获取,也可以从Eurake列表获取;


5,updateListOfServers中调用updateAllServerList,updateAllServerList调用setServersList,setServersList调用父类BaseLoadBalancersetServersList方法,更新BaseLoadBalancer中allserverList和upserverList列表


6,ping确认存活策略,DynamicServerListLoadBalancer的父类BaseLoadBalancer的构造方法中会设置this.initWithConfig();,this.initWithConfig会调用


this.setPingInterval(pingIntervalTime)不断去检查,将无法连接的节点去除掉。定时器也是通过scheduled。


相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
7天前
|
消息中间件 Java 数据安全/隐私保护
Spring Cloud 项目中实现推送消息到 RabbitMQ 消息中间件
Spring Cloud 项目中实现推送消息到 RabbitMQ 消息中间件
|
7天前
|
负载均衡 监控 Java
我把Spring Cloud的超详细资料介绍给你,面试官不会生气吧?geigei
我把Spring Cloud的超详细资料介绍给你,面试官不会生气吧?geigei
|
7天前
|
负载均衡 Java 应用服务中间件
Spring Cloud 负载平衡的意义什么?
负载平衡是指将网络流量在多个服务器之间分布,以达到提高系统性能、增强可靠性和提供更好用户体验的目的。在负载平衡的架构中,多个服务器被组织成一个集群,共同处理用户的请求。
32 4
|
8天前
|
缓存 负载均衡 算法
【微服务 SpringCloud】实用篇 · Ribbon负载均衡
【微服务 SpringCloud】实用篇 · Ribbon负载均衡
26 0
|
8天前
|
监控 安全 Java
Spring cloud原理详解
Spring cloud原理详解
22 0
|
8天前
|
消息中间件 负载均衡 Java
【Spring Cloud 初探幽】
【Spring Cloud 初探幽】
20 1
|
8天前
|
安全 Java Docker
|
8天前
|
Java 开发者 微服务
Spring Cloud原理详解
【5月更文挑战第4天】Spring Cloud是Spring生态系统中的微服务框架,包含配置管理、服务发现、断路器、API网关等工具,简化分布式系统开发。核心组件如Eureka(服务发现)、Config Server(配置中心)、Ribbon(负载均衡)、Hystrix(断路器)、Zuul(API网关)等。本文讨论了Spring Cloud的基本概念、核心组件、常见问题及解决策略,并提供代码示例,帮助开发者更好地理解和实践微服务架构。此外,还涵盖了服务通信方式、安全性、性能优化、自动化部署、服务网格和无服务器架构的融合等话题,揭示了微服务架构的未来趋势。
39 6
|
8天前
|
JSON Java Apache
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
|
8天前
|
负载均衡 Java 开发者
Spring Cloud:一文读懂其原理与架构
Spring Cloud 是一套微服务解决方案,它整合了Netflix公司的多个开源框架,简化了分布式系统开发。Spring Cloud 提供了服务注册与发现、配置中心、消息总线、负载均衡、熔断机制等工具,让开发者可以快速地构建一些常见的微服务架构。