首页 > 其他分享 >Spring Cloud【Ribbon】客户端负载均衡

Spring Cloud【Ribbon】客户端负载均衡

时间:2022-09-30 11:02:13浏览次数:60  
标签:负载 服务 策略 Spring Cloud 均衡 Ribbon 客户端


微服务负载均衡器Ribbon

文章目录


一、什么是Ribbon?

目前主流的负载均衡方案分为以下两种:

  • 集中式的(服务端)在消费者和服务的提供方使用独立的代理方式负载均衡(有用硬件,也有用软件nginx)
  • 客户端的根据自己的请求情况负载均衡,Ribbon就属于客户端的负载均衡

SpringCloud Ribbon 是基于​​Netffix Ribbon​​​是实现的​​一套客户端负载均衡工具​​​,Ribbon客户端提供了一系列的完善的配置,如超时,重试等等,通过​​LoadBalance​​​获取到服务提供的所有机器的实例。Ribbon会自动地基于某种规则​​(轮询,随机)​​ 去调用这些服务,Ribbon也可以自己实现自己的负载均衡算法。

1.1 客户端的负载就均衡

例如SpringCloud 中的Ribbon 客户端会有一些服务地址列表,再发送请求前通过负载均衡算法到另一个服务器,然后进行访问,这是客户端的负载均衡,

​​即在客户端就进行了负载均衡算法的分配​​

Spring Cloud【Ribbon】客户端负载均衡_负载均衡

1.2 服务端的负载均衡

Spring Cloud【Ribbon】客户端负载均衡_spring cloud_02

1.3 常见的负载均衡算法

  • 随机:Random
  • 轮询:一个接一个 One By One
  • 加权:在服务提供者有一个weight的概念,根据机器的性能分配不同的权重,权重高的机器高配置,低负载,用以画质各个服务器的压力
  • 地址hash:通过客户端的地址的hash值取模后进行服务的调度, ip — > hash
  • 最小链数:即使请求均衡了压力也不一定均衡,最小链数算法就是根据服务的情况,比如请求积压数等等参数,将请求分配到当前压力最小的服务器上,最小活跃数。

二、Nacos使用Ribbon

nacos-discovery依赖了ribbon,可以不再引入ribbon的依赖

Spring Cloud【Ribbon】客户端负载均衡_客户端_03

2.1 具体使用

  1. 需要加上一个配置注解​​@LoadBalanced​​实现负载均衡
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
// 剋以进行连接超时的设置
builder.setConnectTimeout(3000);
RestTemplate restTemplate = builder.build();
return restTemplate();
}
  1. 在控制层上
@AutoWired
private RestTemplate restTemplate;

@RequestMapping("/findOrderByUserId/{id}")
public R findOrderById(@PathVariable("id") Integer id){
String url = "http://mall-order/order/findOrderById/"+id;
R result = restTemplate.getForObject(url,R.class);
return result;
}

可以写在配置类中,也可以直接写在启动类上。

三、Ribon内核原理

3.1 Ribbon负载均衡策略

Spring Cloud【Ribbon】客户端负载均衡_负载均衡_04


Ribbon的负载均衡策略:

Spring Cloud【Ribbon】客户端负载均衡_spring cloud_05

3.1.1 修改默认的负载均衡策略

全局配置: 调用其他服务,一律使用指定的负载均衡策略

例如使用nacos的集群负载均衡

Spring Cloud【Ribbon】客户端负载均衡_spring cloud_06

@Configuration
public class RibbonConfig(){
/**
* 全局配置
*指定负载均衡策略
*@return
*/
@Bean
public IRule iRule(){
// 指定使用nacos的提供负载均衡策略(优先调用统一集群上的实例,基于随机权重)
return new NacosRule();
}
}

这里返回IRule的类,原因是所有的负载均衡策略都有一个公共的父接口就是IRule,所以返回后,可以使用任何一种负载均衡策略。

局部配置:调用指定的微服务的服务提供者提供的服务,使用对应的负载均衡算法

修改application.yml

# 被调用的微服务名称
mall-servicce:
ribbon:
# 只当使用Nacos的负载均衡策略,
NFLoadBalancerRuleClassName:

最后还要再启动类上加上ribbonClients的注解

标签:负载,服务,策略,Spring,Cloud,均衡,Ribbon,客户端
From: https://blog.51cto.com/u_14957231/5725633

相关文章

  • SpringBoot之Mybatis开启SQL记录和Pagehelper
    配置mybatismybatis:#mapper路径mapper-locations:classpath:mapper/*.xmlconfiguration:#日志输出log-impl:org.apache.ibatis.logging.stdout.StdO......
  • SpringBoot2 不同版本中 文件上传大小配置
    由于springboot具有几个版本,不同版本对于文件上传最大限制的配置也有所不同。所以要注意springboot本身的版本,不然会一直报错#在springboot1.3版本中:multipart.maxFil......
  • SpringMVC常用注解
    分享几个SpingMVC常用注解(注解的本质是一类继承了Annotation的特殊接口)@Controller是处理请求业务逻辑的组件,这个组件会被Spring识别为可以接受并处理网页请求的组件。@Co......
  • Spring启动报错-WebServerException: Unable to start embedded Tomcat
    今天在启动《Spring实战》的示例项目时,出现以下错误:ERROR21308---[ restartedMain]o.s.boot.SpringApplication       :Applicationrunfailedo......
  • Springboot从入门到精通
    SpringBoot创建SpringBoot有两种创建方法,一种是在IDEA中创建,一种是在Spring官网创建,两种方法是一样的,但是需要联网。SpringBoot项目快速启动1.对SpringBoot项目打包(执行......
  • springboot发送邮件
    springboot发送邮件简化版:1.pom.xml引入依赖<!--e-mail--><dependency><groupId>com.sun.mail</groupId><artifactId>java......
  • 一文搞定 Spring事务
    Spring事务上文使用SpringJDBC1、JDBC事务控制​ 不管你现在使用的是那一种ORM开发框架,只要你的核心是JDBC,那么所有的事务处理都是围绕着JDBC开展的,而JDBC之中的事......
  • 用spring 创建ComboPooledDataSource和JdbcTemplate对象
    用spring创建ComboPooledDataSource和JdbcTemplate对象3.1添加ioc相关jar包 <dependency><groupId>org.springframework</groupId><artifactId>spring-core<......
  • 实现循环重试功能-spring-retry
    《@Retryable》1.POM依赖 <dependency>  <groupId>org.springframework.retry</groupId>  <artifactId>spring-retry</artifactId> </dependency>2、启用@Retryab......
  • Spring Cloud Gateway 服务网关的部署与使用详细介绍
    一、为什么需要服务网关:1、什么是服务网关:        传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网......