Ribbon

一、概述

​ Ribbon是Netflix公司提供的一个基于HTTP和TCP的客户端负载均衡工具

​ Eureka中自带Ribbon了!

​ Ribbon主要有两个功能

  1. 简化远程调用

  2. 负载均衡

    客户端负载均衡:

    • 负载均衡算法在服务端
    • 由负载均衡器维护服务地址列表

服务端负载均衡:

  • 负载均衡算法在客户端
  • 客户端维护服务地址列表

二、入门案例:

简化远程调用:

步骤:

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

  2. 在调用的时候直接使用服务名

    String url="http://EUREKA-PROVIDE/goods/findOne/"+id;
    Goods goods = restTemplate.getForObject(url, Goods.class);
    
  3. 重启,访问下就能看到效果了!

负载均衡:

在provider中加上几行代码,显示调用的端口号

@Autowired
private GoodsService goodsService;
@Value("${server.port}")
private Integer port;
@RequestMapping("/findOne/{id}")
public Goods findOne(@PathVariable Integer id){Goods goods = goodsService.findOne(id);goods.setTitle(goods.getTitle()+":"+port);//将端口号,设置到了 商品标题上return goods;
}

结果显示8001和8002交替显示,显然是轮询!

Ribbon负载均衡策略:

  • 随机 :RandomRule
  • 轮询 :RoundRobinRule(默认的负载均衡策略)
  • 最小并发:BestAvailableRule(服务A-1,服务A-2,服务A-3,这三个服务中谁最闲一般认为是性能高)
  • 过滤:AvailabilityFilteringRule(坏的服务过滤掉)
  • 响应时间:WeightedResponseTimeRule(发送一个数据包到三个服务中,看谁最先响应,谁快就调用谁)
    • 轮询重试:RetryRule(默认轮询10次,如果节点出现问题,会去找第二个,如果轮询到10次都挂了那就响应失败)
  • 性能可用性:ZoneAvoidanceRule(综合考虑性能和可用性,看谁分数高就用谁)

负载均衡配置:

Ribbon默认的负载均衡策略是轮询,如果机器性能差不多,用轮询比较合适。

设置负载均衡策略:两种方法:

  1. JAVA编码的方式

    • 创建一个配置类

      @Configuration
      public class MyRule {@Beanpublic IRule rule(){return new RandomRule();}
      }
      

      注意:这个new RandomRule()可以改成其他IRule接口的实现类

  • 在项目启动类上加上这个注解,指定服务名和规则配置类

    /*配置Ribbon的负载均衡策略 name* name:设置 服务提供方的 应用名称* configuration:设置负载均衡Bean*/
    @RibbonClient(name = "EUREKA-PROVIDE",configuration = MyRule.class)
    
  1. 配置文件的方式

    在application.yml中指定服务的负载均衡策略:

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

置的服务提供方的 应用名称

ribbon:NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 策略类(全路径名)

Ribbon的基本使用相关推荐

  1. 【微服务架构】SpringCloud使用Ribbon实现负载均衡

    说在前面 软负载均衡的实现方式有两种,分别是服务端的负载均衡和客户端的负载均衡 服务端负载均衡:当浏览器向后台发出请求的时候,会首先向反向代理服务器发送请求,反向代理服务器会根据客户端部署的ip:po ...

  2. Rocksdb Ribbon Filter : 结合 XOR-filter 以及 高斯消元算法 实现的 高效filter

    文章目录 前言 XOR-filter 实现原理 xor filter 的构造原理 xor filter 构造总结 XOR-filter 和 ADD-filter对比 XOR-filter 在计算上的优 ...

  3. Spring Cloud(三)服务提供者 Eureka + 服务消费者(rest + Ribbon)

    Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具.它是一个基于HTTP和TCP的客户端负载均衡器.它可以通过在客户端中配置ribbonServer ...

  4. 五、springcloud之客户端负载均衡Ribbon

    一.简介 在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式: 一种是ribbon+restTemplate, ...

  5. Spring Cloud第二篇:服务消费者RestTemplate+Ribbon

    在上一篇文章,讲了服务的注册和发现.在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+r ...

  6. 深入理解Ribbon之源码解析

    什么是Ribbon Ribbon是Netflix公司开源的一个负载均衡的项目,它属于上述的第二种,是一个客户端负载均衡器,运行在客户端上.它是一个经过了云端测试的IPC库,可以很好地控制HTTP和TC ...

  7. ribbon 默认负载均衡 是什么_面试官:说说Ribbon是如何实现负载均衡的?

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 来源:blog.csdn.net/LO_YUN/article/details/ ...

  8. springcloud 子项目怎么导入_使用eclipse一步一步创建SpringCloud项目(二)—— 使用feign和ribbon调用微服务...

    一.创建服务提供者service-hi 1.创建子项目方法类似eureka,略 2.修改pom文件,主要是添加jar包 4.0.0 com.landcode land 1.0.0-SNAPSHOT l ...

  9. Spring Cloud Ribbon(服务消费者)

    Spring Cloud Ribbon 是一个基于Http和TCP的客户端负载均衡工具,基于Netflix Ribbon实现的.它不像服务注册中心.配置中心.API网关那样独立部署,但是它几乎存在于每 ...

  10. Spring Cloud Alibaba 负载均衡:Ribbon 如何保证微服务的高可用

    上一讲我们对 Nacos 的集群环境与实现原理进行了讲解,我们已经可以轻松将单个微服务接入到 Nacos 进行注册,但是微服务本不是孤岛,如何实现有效的服务间稳定通信是本文即将介绍的主要内容,本次我们 ...

最新文章

  1. ubuntu忘记root密码解决
  2. 8支团队正在努力构建下一代Ethereum
  3. linux防火墙 33001端口,Linux操作系统下IPTables配置方法详解
  4. 响应设置cookie_注册登录 与 Cookie
  5. 新版仿小刀资源网模板—木鱼cms
  6. 2018(上)C高级第0次作业
  7. gis地图和普通地图的区别_GIS之如何添加WMTS地图
  8. 拓端tecdat|R语言使用最优聚类簇数k-medoids聚类进行客户细分
  9. 最新BIOS设置中英文对照表
  10. 洛谷OJ P3865 【模板】ST表
  11. Minitab 控制图
  12. 什么是电磁兼容标准?IEC、EN、TC77、CISPR等的区别!
  13. 精灵图,雪碧图的应用
  14. tcl android tv系统,TCL to launch motion-controlled Android TV first in China
  15. 小学计算机表格制作教学,《制作表格》~试讲稿~小学信息技术
  16. c语言用数字代表字母,使用c语言判断数字字母
  17. 机器学习——神经网络实验(附全过程代码)
  18. Gunicorn-使用详解
  19. linux双击运行jar包,linux下发布JAR包 并运行
  20. Java 开发环境搭建

热门文章

  1. ICCV21 - 无监督语义分割《Unsupervised Semantic Segmentation by Contrasting Object Mask Proposals》
  2. spring 自动装配 bean 有哪些方式?
  3. 禁用360浏览器自动填充用户数据
  4. 计算机考数学一英语二的学校,【专硕】初试考数学一的学校统计
  5. quartz 表结构 mysql_Quartz表结构说明
  6. python 如何调试uc浏览器_UC浏览器开发者工具
  7. 斐波那契数列(各种代码实现斐波那契数列)
  8. Mac上添加自己/公司的网络服务器盘
  9. OSChina 周四乱弹 —— 开个程序门诊?
  10. 计算机内部网络连接,在电脑中新建专用网络连接的操作方法【图文教程】