Spring Cloud 集成 Ribbon

导读:本篇文章讲解 Spring Cloud 集成 Ribbon,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1 Ribbon相关介绍

1.1 Ribbon是什么

Ribbon是Netflix发布的云中间层服务开源项目,主要功能是提供客户端负载均衡算法。Ribbon客户端组件提供一系列完善的配置项,如,连接超时,重试等。简单的说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中列出load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也很容易使用Ribbon实现自定义的负载均衡算法。
Ribbon是一个客户端负载均衡器,它可以按照一定规则来完成多态服务器负载均衡调用,这些规则还支持自定义。
Ribbon是负载均衡器,是基于RestTemplate ,它赋予了RestTemplate 负载均衡的能力。

1.2 集成原理

在这里插入图片描述
其中负载均衡的算法有:轮询算法、随机算法、权重算法、响应权重算法、iphash等,默认使用轮询算法。

2 Spring Cloud 集成 Ribbon

2.1 导入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

2.1 编写配置文件 application.yml

eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:1000/eureka/,http://peer2:1001/eureka/
  instance:
    prefer-ip-address: true
    instance-id: order-server:2000

server:
  port: 2000
spring:
  application:
    name: order-server

2.2 修改RestTemplate的Bean的定义

	/**
     * SpringMvc提供的一个基于Rest风格的http调用工具
     * @LoadBalanced :ribbon的负载均衡标签,赋予RestTemplate有负载均衡的能力
     */
	@Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

2.3 Controller层调用

@RestController
@RequestMapping("/orderserver")
public class OrderServerController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/order/{id}")
    public AjaxResult getUser(@PathVariable("id") Long id){
        String url = "http://user-server/userserver/user/"+id;
        User user = restTemplate.getForObject(url, User.class);
        AjaxResult result = new AjaxResult();
        result.setData(user);
        return result;
    }
}

3 Ribbon默认算法修改

3.1 负载均衡策略

ribbon通过服务名获取到服务列表后,要根据一定规则来选择一个服务实例来完成调用.这个规则就叫负载均衡策略.

  • IRule
    通过配置不同IRule的子类,可以选择不同负载均衡策略,也就是从服务列表以特定策略选择一个服务来完成调用。当然也可以自定义。所以负载均衡策略可以分为内置和自定义。
  • 内置负载均衡策略:
内置负载均衡规则类 规则描述
RoundRobinRule(默认) 简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。
AvailabilityFilteringRule 对以下两种服务器进行忽略:(1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。注意:可以通过修改配置。loadbalancer.[clientName].connectionFailureCountThreshold来修改连接失败多少次之后被设置为短路状态。默认是3次。(2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上线,可以由客户端的[clientName].[clientConfigNameSpace].ActiveConnectionsLimit属性进行配置。
WeightedResponseTimeRule 为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
ZoneAvoidanceRule 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。
BestAvailableRule 忽略哪些短路的服务器,并选择并发数较低的服务器。
RandomRule 随机选择一个可用的服务器。
Retry 重试机制的选择逻辑

3.2 算法修改的实现

	/**
     * 随机算法
     * @return
     */
    @Bean
    public IRule myRule(){
        return new RandomRule();
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/67277.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!