SpringCloud-Alibaba-02负载均衡器Ribbon;LoadBalancer
2022-12-15 17:54:04 10 举报
AI智能生成
SpringCloud-Alibaba-02负载均衡器Ribbon&LoadBalancer
作者其他创作
大纲/内容
LoadBalancer
Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器, 用来替代Ribbon
可以使用loadbalancer的客户端
RestTemplate
Spring提供的用于访问Rest服务的客户端
RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率
RestTemplate默认依赖jdk的HTTP连接工具
RestTemplate整合LoadBalancer
引入依赖
nacos-discovery中引入了ribbon,需要移除ribbon的包
如果不移除,也可以在yml中配置不使用ribbon
默认情况下,如果同时拥有RibbonLoadBalancerClient和BlockingLoadBalancerClient,
为了保持向后兼容性,将使用RibbonLoadBalancerClient。要覆盖它,可以设置spring.cloud.loadbalancer.ribbon.enabled属性为false
为了保持向后兼容性,将使用RibbonLoadBalancerClient。要覆盖它,可以设置spring.cloud.loadbalancer.ribbon.enabled属性为false
使用@LoadBalanced注解修饰RestTemplate,开启客户端负载均衡功能
WebClient
Spring WebFlux 5.0版本开始提供的一个非阻塞的基于响应式编程的进行Http请求的客户端工具
响应式编程的基于Reactor
WebClient中提供了标准Http请求方式对应的get、post、put、delete等方法,可以用来发起相应的请求
WebClient整合LoadBalancer
引入依赖
配置WebClient作为负载均衡器的client
负载均衡介绍
负载均衡(Load Balance),其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行
负载均衡方案
集中式负载均衡
消费者和服务提供方中间使用独立的代理方式进行负载
F5
Nginx
客户端的负载均衡
Ribbon
在客户端就进行负载均衡算法分配
客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问
常见负载均衡算法
随机,通过随机选择服务进行执行,一般这种方式使用较少
轮训,负载均衡默认实现方式,请求来之后排队处理
加权轮训,通过对服务器性能的分型,给高配置,低负载的服务器分配更高的权重,均衡各个服务器的压力
地址hash,通过客户端请求的地址的hash值取模映射进行服务器调度
最小连接数法就是根据服务器的情况,比如请求积压数等参数,将请求分配到当前压力最小的服务器上
Ribbon
是基于Netflix Ribbon 实现的一套客户端的负载均衡工具
Ribbon客户端组件提供一系列的完善的配置,如超时,重试
通过Load Balancer获取到服务提供的所有机器实例,Ribbon会自动基于某种规则(轮询,随机)去调用这些服务
Ribbon内核原理
@LoadBalanced
@LoadBalanced使用了@Qualifier
spring中@Qualifier用于筛选限定注入Bean
@LoadBalanced利用@Qualifier作为restTemplates注入的筛选条件,筛选出具有负载均衡标识的RestTemplate
被@LoadBalanced注解的restTemplate会被定制,添加LoadBalancerInterceptor拦截器。
如果不使用@LoadBalanced注解,也可以通过添加LoadBalancerInterceptor拦截器让restTemplate起到负载均衡器的作用。
Ribbon相关接口
IClientConfig
Ribbon的客户端配置,默认采用DefaultClientConfigImpl实现
IRule
Ribbon的负载均衡策略,默认采用ZoneAvoidanceRule实现,该策略能够在多区域环境下选出最佳区域的实例进行访问
IPing
Ribbon的实例检查策略,默认采用DummyPing实现,该检查策略是一个特殊的实现,
实际上它并不会检查实例是否可用,而是始终返回true,默认认为所有服务实例都是可用的
实际上它并不会检查实例是否可用,而是始终返回true,默认认为所有服务实例都是可用的
ServerList
服务实例清单的维护机制,默认采用ConfigurationBasedServerList实现
ServerListFilter
服务实例清单过滤机制,默认采ZonePreferenceServerListFilter,该策略能够优先过滤出与请求方处于同区域的服务实例
ILoadBalancer
负载均衡器,默认采用ZoneAwareLoadBalancer实现,它具备了区域感知的能力
Ribbon负载均衡策略
RandomRule
随机选择一个Server
RetryRule
对选定的负载均衡策略机上重试机制
在一个配置时间段内当选择Server不成功,则一直尝试使用subRule的方式选择一个可用的serve
RoundRobinRule
轮询选择, 轮询index,选择index对应位置的Server
AvailabilityFilteringRule
过滤掉一直连接失败的被标记为circuit tripped的后端Serve
过滤掉那些高并发的后端Server或者使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就是检查status里记录的各个Server的运行状态
BestAvailableRule
选择一个最小的并发请求的Server,逐个考察Server,如果Server被tripped了,则跳过
WeightedResponseTimeRule
根据响应时间加权,响应时间越长,权重越小,被选中的可能性越低
ZoneAvoidanceRule
默认的负载均衡策略,即复合判断Server所在区域的性能和Server的可用性选择Server,在没有区域的环境下,类似于轮询
NacosRule
优先调用同一集群的实例,基于随机权重
修改默认负载均衡策略
全局配置
调用的微服务,一律使用指定的负载均衡策略
局部配置
调用指定微服务时,使用对应的负载均衡策略
修改application.yml
自定义负载均衡策略
通过实现 IRule 接口可以自定义负载策略,主要的选择服务逻辑在 choose 方法中
实现基于Nacos权重的负载均衡策略
0 条评论
下一页