SpringCloud 服务调用: Ribbon与OpenFeign

更多SpringCloud组件学习

Ribbon 负载均衡与服务调用

Ribbon 基础概念

Ribbon 完成了那些功能?
   Spring Cloud Ribbon是一个基于HTTP和TCP的 客户端负载均衡工具 ,主要提供客户端需要的负载均衡算法和服务调用 。(目前 Ribbon 也已经进入维护阶段)

Ribbon 的本地 LB(Load Balance)与 Nginx 服务端 LB 的区别是?
   Ribbon 是本地的 LB ,通过到注册中心获取服务列表缓存到本地,在调用接口时,选取对应服务器执行 RPC 远程调用。
  Ngix 是服务端的 LB,客户端请求到 Nginx 服务端,由服务端实现调用。

Ribbon 的常见相关类

RestTemplate 服务调用

官方文档

IRule 接口实现的负载均衡方案
策略名策略描述实现说明
BestAviableRule跳过熔断的Server,在剩下的Server中选择并发请求最低的Server逐个考察Server,如果Server被tripped了,则忽略,在选择其中ActiveRequestsCount最小的server
RoundRobinRule轮询。默认策略轮询index,选择index对应位置的server
RandomRule随机选择在index上随机,选择index对应位置的server
RetryRule可重试的策略。可以对其他策略进行重试,默认重试轮询策略在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server
WeightedResponseTimeRule根据相应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。一个后台线程定期的从status里面读取评价响应时间,为每个server计算一个weight。Weight的计算也比较简单responsetime 减去每个server自己平均的responsetime是server的权重。当刚开始运行,没有形成statas时,使用roubine策略选择server。
AvailabilityFilteringRule过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值)使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个server的运行状态
ZoneAvoidanceRule复合判断server所在区域的性能和server的可用性选择server使用ZoneAvoidancePredicate 和 AvailabilityPredicate 来判断是否选择某个server,前一个判断判定一个zone的运行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于过滤掉连接数过多的Server。
替换负载策略

  负载规则替换,需注意,是否需要让 @ComponentScan 扫描到(即与主启动类在同一个包下);如果被扫描到,那么该 LB 配置会被集群中所有的 Ribbon 客户端公用,如果不会被扫描到,那么该配置只会适用到当前 Ribbon 客户端。

(自定义lb类的使用,p40节跳过)

Ribbon 使用过程中的注意事项

  1. 服务的命名问题:
      Request URI does not contain a valid hostname,在给服务命名时,不能包含特殊字符( _ 、+ 、等等 ),但可以有中划线 在这里插入图片描述
  2. 各个服务间传输的公共实体类,需要有空参构造器。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值