【SpringCloud】Ribbon

文章详细介绍了Ribbon作为负载均衡器的工作原理,包括从order-service发起对user-service的请求,Ribbon如何从注册中心获取服务列表,以及默认的轮训策略。此外,还讨论了其他内置的负载均衡策略,如随机、基于响应时间的权重分配和区域避免规则等。文章还提到了通过代码和配置文件方式改变负载均衡策略,以及启用饥饿加载以预先加载服务列表,以减少首次访问时的延迟。
摘要由CSDN通过智能技术生成

Ribbon

负载均衡原理

  1. order-service 发起 user-service 请求,被ribbon进行拦截;
  2. ribbon会向注册中心拉取user-service 相对应的服务;
  3. 注册中心返回user-service服务列表;
  4. 由ribbon的负载均衡机制去选择一个服务进行访问;默认采用的是轮训的机制。

负载均衡流程

请求示例

配置

@Configuration
public class RestTemplateConfiguration {

    /**
     * 添加LoadBalanced,使RestTemplate以负载均衡的方式调用服务
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return  new RestTemplate();
    }
}

接口调用

@RequestMapping("consumer")
@RestController
public class ConsumerController {
    /**
     * spring提供的一个用于访问rest接口的模板对象
     * 提供了多重便捷访问远程HTTP服务的方法,简单的RestFul 服务模板
     */
    @Resource
    private RestTemplate restTemplate;
    
    /**
     * 服务地址
     */
    private static final String REST_FIX_URL_PREFIX = "http://XY-PROVIDER";
    
    @GetMapping("/getProvider")
    public String getConsumerByIp() {
        String res = restTemplate.getForObject(REST_FIX_URL_PREFIX + "/helloProvider", String.class);
        return res;
    }
}

Debug 效果如下所示

暂时先保留

负载均衡策略

内置负载均衡类说明
RoundRobinRule简单的轮训服务列表来选择服务器。Ribbon的默认规则
AvailabilityFilteringRule对以下两种服务器进行忽略:
(1)在默认的情况下:这台服务器如果3次连接失败,这台服务器就会被设置“短路”状态。短路状态将持续30S,如果在此连接失败,短路的持续时间就会几何级增加
(2)并发数较高的服务器。如果一个服务器的并发连接数过高,配置了此规则的而客户端也会将忽略,可以有客户端的ActiveConnectionsLimit属性进行配置
WeightedResponseTimeRule为每一个服务器赋予一个权重。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择
ZoneAvoidanceRule以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架。而在对Zone内的多个服务器进行轮询
BestAvailableRule忽略那些短路的服务器,并选择并发数较低的服务器
RandomRule随机选择一个可用的服务器
RetryRule重试机制的选择逻辑

负载均衡策略配置

负载均衡策略配置的方式有两种:
代码方式、配置文件方式

代码方式

配置灵活,修改时需要重新打包发布,针对全局配置。

指定为随机策略

 @Bean
    public IRule randomRule(){
        return new RandomRule();
    }
配置文件方式

直观、方便、无需重新打包,但无法做全局配置

# 指定某个服务
xy-provider:
  ribbon:
    # 指定负载均衡规则
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

饥饿加载

配置方式

ribbon:
  eager-load:
    # 开启饥饿加载
    enabled: true
    # 指定饥饿加载的服务器列表名称
    clients: 
      - xy-provider

开启前

第一次访问时耗时会比较长,因为会去注册中心拉取注册列表缓存到本地。
之后的访问耗时都会很短,因为少了一步操作。

浏览器请求耗时

控制台

  1. 从注册中心拉取所有的实例(服务)
  2. 然后拉取我们需要的服务,由负载均衡去选择访问节点。

开启后

控制台

开启饥饿加载后,重新启动,我们会发现项目一启动,就去加载服务列表。

浏览器

跟没开启之前,耗时会相差很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值