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

SpringCloud之Ribbon基础认识-服务负载均衡

0、Ribbon基本认识

  1. Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端 负载均衡的工具。

  2. Ribbon 主要功能是提供客户端负载均衡算法和服务调用

  3. Ribbon 客户端组件提供一系列完善的配置项如连接超时,重试等。

  4. Ribbon 会基于某种规则(如简单轮询,随机连接等)去连接指定服务

  5. 程序员很容易使用 Ribbon 的负载均衡算法实现负载均衡

  6. 一句话: Ribbon: 负载均衡+RestTemplate 调用

官网地址: https://github.com/Netflix/ribbon

Ribbon 目前进入维护模式, 未来替换方案 是 Spring Cloud LoadBalancer

 1、LB(Load Balance)

  1. 集中式 LB
    • 即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5,也可以是软件,如Nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方;
    • LB(Load Balance 负载均衡)
  2. 进程内 LB
    • 将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些服务地址可用,然后再从这些地址中选择出一个合适的服务地址。
    • Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址
    • 取出来的服务存入jvm并且​定时更新​​:默认每30秒(可配置)重新拉取列表,保证数据新鲜度,如果取出来的服务地址有不能用的也会自动选择其他的能够使用的

 2、Ribbon机制和架构

  1. 先选择 EurekaServer,它优先选择在同一个区域内负载较少的 server
  2. 再根据用户指定的策略,在从 server 取到的服务注册列表中选择一个地址
  3. Ribbon 提供了多种策略∶ 比如轮询、随机和根据响应时间加权。

 3、Ribbon常见负载算法

策略名描述特点
BestAvailableRule选择一个最小的并发请求的server。逐个考察Server,如果Server被tripped(跳闸)不能用了,则忽略,再选择其中ActiveRequestsCount最小的server。​低延迟优先​​,适合对响应速度敏感的场景。但是一个一个的看,对服务方来说有一点的资源开销。
AvailabilityFilteringRule过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections超过配置的阈值)。​高可用性​​,自动排除故障或过载节点。
WeightedResponseTimeRule根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低。​动态权重​​,优先选择响应快的节点。
RetryRule对选定的负载均衡策略机上重试机制。在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server,达到一定阈值则不再尝试。​容错性强​​,适合临时性故障恢复。
RoundRobinRule轮询index,选择index对应位置的server。​公平分配​​,按顺序轮询,简单均衡但无视节点状态。Ribbon默认是这个
RandomRule随机选择一个server。在index上随机,选择index对应位置的server。​无状态随机​​,适合低复杂度场景。
ZoneAvoidanceRule复合判断server所在区域的性能和server的可用性选择性server。​区域感知​​,兼顾性能和跨区域容灾,各方面综合考量。

举例配置(Config)如下 :

@Configuration
public class RibbonRule {//配置注入自己的负载均衡算法@Beanpublic IRule myRibbonRule() {//这里返回的是RandomRule,当然也可以自己指定return new RandomRule();}
}

在启动类上加如下注解:

//指定Ribbon的负载均衡算法
@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL",configuration = RibbonRule.class)

相关文章:

  • MySQL索引与事务
  • 游戏引擎学习第268天:合并调试链表与分组
  • windows 环境下 python环境安装与配置
  • KEIL_C51和KEIL_MDK共存
  • AI大模型学习十七、利用Dify搭建 AI 图片生成应用
  • average per-pixel disparity error: EPE及不同距离值下的误差曲线
  • Python函数式编程入门:闭包与装饰器详解
  • 开疆智能Canopen转Profinet网关连接工博士GBS20机器人配置案例
  • 栈应用:辅助站(c++)
  • 使用 CST 软件增强工业设备的电磁兼容性设计:原理、方法和应用
  • SpringBoot框架开发网络安全科普系统开发实现
  • SAP CEO Christian Klein专访:企业AI、云转型与未来战略
  • MySQL进阶篇2_SQL优化、锁
  • JDBC工具类
  • 基于Spring Boot + Vue的母婴商城系统( 前后端分离)
  • PHP框架在分布式系统中的应用!
  • python04——条件判断(选择结构)
  • OLE(对象链接与嵌入)剪贴板内容插入到 CAD 图形中——CAD c# 二次开发
  • Kubernetes生产实战(十二):无工具容器网络连接数暴增指南
  • Baklib加速企业AI数据准备实践
  • 云南一餐馆收购长江野生鱼加工为菜品,被查处罚款
  • 市自规局公告收回新校区建设用地,宿迁学院:需变更建设主体
  • 一周文化讲座|城市移民与数字时代的新工作
  • 读图|展现城市品格,上海城市影像走进南美
  • 重庆党政代表团在沪考察,陈吉宁龚正与袁家军胡衡华共商两地深化合作工作
  • 首批证券公司科创债来了!拟发行规模超160亿元