Ribbon 客户端负载均衡

 Ribbon简介

Ribbon是Neflix提供的一个基于HTTP和TCP的客户端负载均衡

Ribbon两个功能:

  1. 简化远程调用
  2. 负载均衡

负载均衡

  •  服务端负载均衡
  1. 负载均衡算法再服务端
  2. 由负载均衡维护服务地址列表

Ribbon 客户端负载均衡_第1张图片

  •  客户端负载均衡
  1. 负载均衡算法再客户端
  2. 客户端维护服务地址列表

Ribbon 客户端负载均衡_第2张图片

 Ribbon远程调用

这里使用到eureka的consumer provider和server具体搭建参考

spirngcloud Eureka服务治理(注册中心)实操_爱画图的小火纸的博客-CSDN博客

  • 使用Ribbon 简化restTemplate调用
  1. 在声明restTemplate的Bean时候,添加一个注解:@LoadBalanced
  2. 在使用restTemplate发起请求时,需要定义url时,host:port可以替换为 服务提供方的应用名

 1.添加注解@LoadBalanced

 Ribbon 客户端负载均衡_第3张图片

 2.host:port可以替换为 服务提供方的应用名

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/goods/{id}")
    public Goods findGoodsById(@PathVariable("id") int id){
        
        //host:port可以替换为 服务提供方的应用名
        String url = "http://EUREKA-PROVIDER/goods/findOne/"+id;

        //3.调用方法
        Goods goods = restTemplate.getForObject(url,Goods.class);

        return goods;

    }
}

负载均衡初识

Ribbon 客户端负载均衡_第4张图片

 为了方便监控消费者调用了哪个服务,注入port监控

Ribbon 客户端负载均衡_第5张图片

 打开使程序可并行按钮,可以一个程序运行同时运行两个

Ribbon 客户端负载均衡_第6张图片

 将provider服务开启两次,第二次开始时修改端口,再此打开即可有两个程序运行(模拟两个服务)

启动步骤: 

  1.  启动次序为 server ——>provider ——> 修改provider端口号8001后再启动 ——> consumer
  2.  刷新consumer web界面 所调用的服务在改变 可根据port的改变监控到

 Ribbon 客户端负载均衡_第7张图片

 Ribbon负载均衡策略

  • 随机:RandomRule                                     生成随机数,随机选择一个服务
  • 轮询:RounRobinRule                                 默认的一个一次
  • 最小并发:BestAvailableRule                     哪个访问的少选哪个(eureka内有记录)
  • 过滤:AvailabilityFilteringRule                   过滤掉坏的和并发高的
  • 响应时间:WeightedResponseTimeRule  eureka向每个服务发一个数据包,哪个服务先响应 选哪个
  • 轮询重试:RetryRule                                    轮询十圈都没找到好的服务 就会回复响应失败
  • 性能可用性:ZoneAvoidanceRule               综合服务性能可用性得分哪个高选哪个

共7种 默认轮询

设置负载均衡策略

负载均衡算法在客户端 

两种方式:

  • 编码

Ribbon 客户端负载均衡_第8张图片

 编写类MyRule

//设置负载均衡的规则
@Configuration
public class MyRule {
    @Bean
    public IRule rule(){

        return new RandomRule();
    }
}

 在consumer的启动类添加注解

@EnableDiscoveryClient //激活DiscoveryClient   可无
//启动类
@EnableEurekaClient    //可无
@SpringBootApplication

/*
* 配置Ribbon的负载均衡策略
* name 设置服务提供方的应用名称
* configuration 设置负载均衡Bean
* */

@RibbonClient(name="EUREKA-PROVIDER",configuration = MyRule.class)
public class ConsumerApp {
    public static void main(String[] args){
        SpringApplication.run(ConsumerApp.class,args);
    }
}
  • 配置 

consumer添加配置yml文件中

#配置的方式设置Ribbon的负载均衡策略
EUREKA-PROVIDER: #设置的服务提供方的 应用名称
  ribbon:
    NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #策略类

结果: 

这个端口随机显示意思就是消费者随机使用eureka里的服务 ,修改负载均衡策略成功

你可能感兴趣的:(spring,cloud,负载均衡,ribbon,java)