当前位置: 首页 > news >正文

快速理解微服务中Ribbon的概念

一.基本概念

1.在微服务架构中,Ribbon 是一个客户端负载均衡器,用于控制服务间的通信方式。

2.Ribbon 是一个开源的库,最早由 Netflix 开发,用于实现客户端负载均衡。

3.Ribbon 主要解决的是在微服务架构中,多个服务实例之间进行通信时如何选择合适的服务实例的问题。

但是 Ribbon 已经停止了主动维护

Netflix 于 2018 年宣布 Ribbon 将不再作为新功能的开发重点,并在后续的版本中减少了对 Ribbon 的支持,官方表示,Ribbon 已经进入维护模式,意味着不会有新的功能更新和重大改动,但会继续提供 bug 修复和安全更新。

二.Ribbon的原理

使用方法:

就是在RestTemplate上添加@LoadBalanced注解,Ribbon就生效了,当在使用RestTemplate进行远程请求的时候,就会使用负载均衡策略。

基本原理:

1.通过拦截器对被注解@LoadBalanced修饰的RestTemplate进行拦截(通过AOP扫描到这个注解注释的RestTemplate,然后获取到这个方法的参数,根据获取到的参数就可以做2、3步的操作);

2.将RestTemplate中调用的服务名,解析成具体的IP地址(这一步需要去注册表查询),由于一个服务名会对应多个地址,那么在选择具体服务地址的时候,需要做负载均衡(比如一个Server有IP1和IP2地址的时候,Ribbon会根据不同的负载均衡算法选出合适的IP地址来进行调用)。

3.确定目标服务的IP和PORT后,通过Httpclient进行http的调用

三.Ribbon的负载均衡算法

Ribbon的核心组件IRule自带的七种负载均衡算法:

1.轮询:RoundRobinRule;

2.随机:RandomRule;

3.重试:RetryRule(先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用的服务);

4.RoundRobinRule的扩展:WeightedResponseTimeRule(响应速度越快的实例选择权重越多大,越容易被选择);

5.会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务: BestAvailableRule

6.先过滤掉故障实例,再选择并发较小的实例:AvailabilityFilteringRule;

7.复合判断Server所在区域的性能和Server的可用性选择服务器:ZoneAvoidanceRule(默认规则)。

自定义算法步骤(以随机算法):

1.定义配置类:

@Configuration
public class MyRibbonRuleConfig {@Bean@LoadBalancedRestTemplate restTemplate() {return new RestTemplate();}@Beanpublic IRule MyRibbonRuleConfig (){// 定义随机负载均衡算法return new RandomRule();}
}

2.主启动类上加上@RibbonClient()注解

@SpringBootApplication
@RibbonClient(name = "ORDER-SERVICE",configuration = MyRibbonRuleConfig.class)
public class OrderMain {public static void main(String[] args) {SpringApplication.run(OrderMain80.class, args);}
}

四.推荐的替代方案 

对于新的微服务项目,Spring Cloud 团队推荐使用 Spring Cloud LoadBalancer 来替代 Ribbon,Spring Cloud LoadBalancer 提供了比 Ribbon 更加现代化的负载均衡支持,并与 Spring Cloud 生态系统更紧密集成,如果项目中仍然使用 Ribbon,并且无法立即迁移,可以继续使用,但要注意它不再接收新的功能和改进,且可能会逐步淘汰。

1.Spring Cloud LoadBalancer 提供了不同的负载均衡策略,例如:

(1)RoundRobinLoadBalancer:轮询负载均衡;

(2)RandomLoadBalancer:随机负载均衡;

(3)WeightedResponseTimeLoadBalancer:基于响应时间加权的负载均衡策略。

2.配置负载均衡策略:

@Configuration
public class LoadBalancerConfig {@Beanpublic LoadBalancer loadBalancer() {// 可以根据需要选择不同的负载均衡策略return new RoundRobinLoadBalancer(); // 默认使用 RoundRobin 策略}
}

也可以通过 Spring 配置文件来选择不同的负载均衡策略:

spring:cloud:loadbalancer:ribbon:enabled: false  # 禁用 Ribbon(如果你之前在使用 Ribbon)

启用轮训策略:

spring:cloud:loadbalancer:round-robin:enabled: true  # 启用轮询策略

总结:

1.SpringCloud LoadBalancer 是 Spring Cloud 推荐的负载均衡解决方案,逐渐替代了 Ribbon;

2.它更轻量并且与现代的服务发现和微服务架构更加兼容;

3.配置 RestTemplate 或直接使用 LoadBalancerClient,你可以在代码中实现服务调用时的负载均衡。


http://www.mrgr.cn/news/78537.html

相关文章:

  • Vue前端开发-动态插槽
  • 篡改代码事件升级,字节索赔800万
  • CMDB平台(进阶篇):CMDB的构建指南(三)
  • HCIE IGP双栈综合实验
  • 七牛智能CDN视频优化方案,展现企业长期价值
  • 深度学习:数据集的基本构成及具体实例
  • C7.【C++ Cont】范围for的使用和auto关键字
  • 深度学习基础3
  • Android Studio安装TalkX AI编程助手
  • 性能监控系统Prometheus、Node-exporter与Grafana部署详解搭建
  • 网络原理(一)—— http
  • 虚拟机ubuntu-20.04.6-live-server搭建OpenStack:Victoria(三:安装服务-controller node)
  • OceanBase 大数据量导入(obloader)
  • React第十节组件之间传值之context
  • SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD
  • 【Electron学习笔记(二)】基于Electron开发应用程序
  • 算法基础 - 求解非线性方程(二分迭代法)
  • 超级详细讲解转义字符,\? \‘ \f \0 \t等等!!!
  • 【科研】9如何高效阅读和理解学术论文
  • C++ 类(Class)
  • Web Worker 和 WebSocket的区别
  • 跨平台应用开发框架(3)-----Qt(样式篇)
  • 自动控制原理——BliBli站_DR_CAN
  • python学习——元组的创建于删除
  • 快速理解微服务中Fegin的概念
  • scrapy爬虫框架小案例