Ribbon

为什么会出现Ribbon?

当启动某个服务的时候,可以通过HTTP的形式将信息注册到注册中心,并且可以通过Spring Cloud提供的工具获取注册中心的服务列表。但是服务之间的调用还存在很多的问题,如何更加方便的调用微服务,多个微服务的提供者如何选择,如何负载均衡等。

Ribbon概述

什么是Ribbon?

Ribbon是Netflix发布的一个负载均衡器,有助于控制HTTP和TCP客户端行为。在SpringCloud中,Eureka一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从Rureka中读取到的服务信息,在调用服务节点提供的服务时,会合理地进行负载。

在SpringCloud中可以将注册中心和Ribbon配合使用,Ribbon自动地从注册中心中获取服务提供者的列表信息,并基于内置的负载均衡算法,请求服务。

Ribbon的主要作用?

  • 服务调用

基于Ribbon实现服务调用,是通过拉取到所有的服务列表组成(服务名-请求路径)的映射关系。借助RestTemplate最终进行调用。

  • 负载均衡

Ribbon是一个典型的客户端负载均衡器;而nginx属于服务端的负载均衡;

当有多个服务提供者时,Ribbon可以根据负载均衡的算法自动地选择需要调用的服务地址。

@LoadBalanced:是ribbon提供的负载均衡的注解

负载均衡策略

RoumdRobinRule:以轮询的方式进行负载均衡

RandomRule:随机策略

RetryRule:重试策略

WeightedResponseTimeRule:权重策略,会计算每个服务的权重,越高的被调用的可能性越大

BestAvailableRule:最佳策略,遍历所有的服务实例,过滤掉故障实例,并返回请求数量最小的实例

AvailabilityFilteringRule:可用过滤策略,过滤掉故障和请求数量超过阈值的服务实例,再从剩下的实例中轮询调用

策略选择

如果每个机器配置一样,则建议不修改策略

如果部分机器配置强,则可以改为WeightedResponseTimeRule

重试机制

坐标

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>

yml

#修改ribbon的负载均衡策略 服务名 - ribbon - NFLoadBalancerRuleClassName : 策略
service-product:
  ribbon:
    #NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandonRule
    ConnectTimeout: 250 #Ribbon的超时时间
    ReadTimeout: 1000 #Ribbon的数据读取超时时间
    OkToRetryOnAllOperations: true #是否对所有操作都进行重试
    MaxAutoRetriesNextServer: 1 #切换实例的重试次数
    MaxAutoRetries: 1 #对当前实例的重试次数

在一个请求过来时,ribbon会添加请求拦截器,执行intercept方法,根据请求的serviceId筛选服务列表并根据负载均衡算法得出来一个地址,最终调用远程服务。

重试也是添加拦截器

RibbonAutoConfiguration(自动装配)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值