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,在给服务命名时,不能包含特殊字符( _ 、+ 、等等 ),但可以有中划线 SpringCloud 服务调用: Ribbon与OpenFeign_第1张图片
  2. 各个服务间传输的公共实体类,需要有空参构造器。

你可能感兴趣的:(#,SpringCould)