SpringCloud入门 5. Ribbon负载均衡

负载均衡

LB,即负载均衡(Load Balance),在微服务或分布式集群中经常用的一种应用。

负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA。

常见的负载均衡有软件Nginx,LVS,硬件 F5等。

相应的在中间件,例如:dubbo和SpringCloud中均给我们提供了负载均衡。

负载均衡的主要实现方式可以分为:

  • 集中式,就是在服务提供者和消费者之间提供负载均衡服务,如nginx,硬件等
  • 进程内,集成于消费者进程内,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。

Ribbon就是一个消费方的负载均衡。

初步配置过程

修改消费者模块的配置信息

   <!-- Ribbon相关 -->
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-eureka</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-ribbon</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-config</artifactId>
   </dependency>

追加服务注册地址

eureka:
  client:
    register-with-eureka: false
    service-url: 
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

对使用的restTemplate进行负载均衡设置

@Configuration
public class ConfigBean
{
  @Bean
  @LoadBalanced
  public RestTemplate getRestTemplate()
  {
   return new RestTemplate();
  }
}

消费者端开启eureka设置

@SpringBootApplication
@EnableEurekaClient
public class DeptConsumer80_App
{
  public static void main(String[] args)
  {
   SpringApplication.run(DeptConsumer80_App.class, args);
  }
}

修改restTemplate调用方法的方式,将原来的http路径前缀替换为服务名

private static final String REST_URL_PREFIX="http://MICROSERVICECLOUD-DEPT";

ribbon会通过eureka查找对应的服务,并在多个服务实例之间进行负载均衡。

Ribbon和Eureka整合后Consumer可以直接调用服务而不用再关心地址和端口号

多服务提供者配置

配置过程和上面的相似,只是重复多次,每个服务提供者的服务端口不同,关联的数据库不同,其他的都相同

Ribbon其实就是一个软负载均衡的客户端组件,可以和其他所需请求的客户端结合使用,和eureka结合只是其中的一个实例。

默认的负载均衡是轮询算法

自定义负载均衡在只要自定义IRule实现类即可

自定义的IRule实现类,不能放在@componentScan所在的包及其子包下,这个实现类注意用@configuration形式加入容器

@Configuration
public class MyRibbon {
    
    @Bean
    public IRule getRule(){
        return new RandomRule();//随机
    }

}
发布了47 篇原创文章 · 获赞 1 · 访问量 1599

猜你喜欢

转载自blog.csdn.net/chinamen1/article/details/102995262