扩展Ribbon支持Nacos集群配置

SpringCloud微服务核心组件Eureka与Nacos实战指南 微服务架构通过将单体应用拆分为独立部署的小型服务,显著提升了系统的可扩展性和开发效率。服务注册与发现作为微服务通信的基础设施,其核心原理是通过注册中心维护服务实例的动态目录。SpringCloud生态提供了Eureka和Nacos两种主流解决方案,其中Eureka采用AP模型保证高可用,而Nacos支持AP/CP模式切换并集成配置管理功能。在电商、金融等分布式系统中,配合Ribbon或SpringCloud LoadBalancer实现客户端负载均衡,能够有效提升系统吞吐量。本文通过电商项目实战,详细解析服 阅读详情

由于在Nacos上,支持集群配置。集群是对指定微服务的一种虚拟分类。集群还是比较有用的,例如:

为了容灾,把指定微服务同时部署在两个机房(例如同城多活【其中1个机房崩溃另一个机房还能顶】、异地多活【防止自然灾害,例如地震什么的】),比如南京机房和北京机房。
调用时,可优先调用同机房的实例,如果同机房没有实例,再跨机房调用。
当然cluster还有很多其他作用,请各位看客自行脑补,本文将围绕上面描述的场景展开。

虽然Spring Cloud Alibaba支持集群配置,例如:

spring:
  cloud:
    nacos:
      discovery:
        # 北京机房集群
        cluster-name: BJ

但在调用时,服务消费者并不会优先调用同集群的实例。

本节来探讨如何扩展Ribbon,从而实现同集群优先调用的效果,并且还能支持Nacos权重配置。关于权重配置,在 扩展Ribbon支持Nacos权重的三种方式 一文中已经写得比较详细了。本文在前面的基础上实现同集群优先策略。
写代码

@Slf4j
public class NacosRule extends AbstractLoadBalancerRule {
    @Autowired
    private NacosDiscoveryProperties nacosDiscoveryProperties;

    @Override
    public Server choose(Object key) {
        try {
            String clusterName = this.nacosDiscoveryProperties.getClusterName();
            DynamicServerListLoadBalancer loadBalancer = (DynamicServerListLoadBalancer) getLoadBalancer();
            String name = loadBalancer.getName();

            NamingService namingService = this.nacosDiscoveryProperties.namingServiceInstance();

            List<Instance> instances = namingService.selectInstances(name, true);
            if (CollectionUtils.isEmpty(instances)) {
                return null;
            }

            List<Instance> instancesToChoose = instances;
            if (StringUtils.isNotBlank(clusterName)) {
                List<Instance> sameClusterInstances = instances.stream()
                        .filter(instance -> Objects.equals(clusterName, instance.getClusterName()))
                        .collect(Collectors.toList());
                if (!CollectionUtils.isEmpty(sameClusterInstances)) {
                    instancesToChoose = sameClusterInstances;
                } else {
                    log.warn("发生跨集群的调用,name = {}, clusterName = {}, instance = {}", name, clusterName, instances);
                }
            }

            Instance instance = ExtendBalancer.getHostByRandomWeight2(instancesToChoose);

            return new NacosServer(instance);
        } catch (Exception e) {
            log.warn("NacosRule发生异常", e);
            return null;
        }
    }

    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {
    }
}

负载均衡算法:

// Balancer来自于com.alibaba.nacos.client.naming.core.Balancer,也就是Nacos Client自带的基于权重的负载均衡算法。
public class ExtendBalancer extends Balancer {
    /**
     * 根据权重,随机选择实例
     *
     * @param instances 实例列表
     * @return 选择的实例
     */
    public static Instance getHostByRandomWeight2(List<Instance> instances) {
        return getHostByRandomWeight(instances);
    }
}

写配置

microservice-provider-user:
  ribbon:
    NFLoadBalancerRuleClassName: com.itmuch.cloud.study.ribbon.NacosClusterAwareWeightedRule

这样,服务在调用microservice-provider-user 这个服务时,就会优先选择相同集群下的实例。

ribbon和nacos获取服务列表不一致问题 这两个特性就可能会导致nacos上已经获取到了服务列表但是ribbon还没开始拉取最新的服务信息,导致在调用服务的时候会找不到nacos上的服务。1.在本地nacos监听到事件消息的时候,通过ribbon主动拉取一下服务信息,让ribbon上的服务信息和nacos保持一致,达到同步的目的。nacos官方文档:https://nacos.io/zh-cn/docs/sdk.html。3.nacos事件监听里面主动刷新ribbon里面的服务列表信息。1.nacos是基于推送事件模式获取服务列表信息的。 阅读详情

相关推荐

Megatron-LM深度解析:万亿参数大模型的3D并行训练之道

训练框架,采用创新的"层内模型并行"设计,通过将Transformer层的计算拆分到多个GPU上并行执行,显著提升训练效率。该系统支持3D并行策略(数据并行、张量并行、流水线并行)和序列并行等新技术,成功应用于训练5300亿参数的MT-NLG模型。相比DeepSpeed、TPU GSPMD等框架,Megatron-LM在NVIDIA GPU上展现出卓越性能,并与TensorRT等工具深度集成,形成从训练到部署的完整解决方案。该项目持续演进,已成为大模型训练的重要基准。

数据与算法架构提升之路专栏 2098

Nacos使用Ribbon

Nacos使用Ribbon

Charge8的博客 3151

Speedtree学习笔记(案例)——拥有多种材质的植物如何导入使用(以草为例)

注:Speedtree无论保存还是导入模型其存储路径不可有中文。 第一步拆分草的模型 根据所需的材质去拆分(例:假若草的果实,茎秆和叶子是不同的材质那么就需拆分为三份;假若画的全部颜色及材质一样就没有必要去拆分模型) 第二步导入草的模型 在Mesh面板中依次导入草的模型——Do nothing additional right now 第三步扩大草的生长区域范围(可省略)...

L人青的博客 5722

Nacos中使用ribbon

它会自动引入ribbon的依赖,不需要我们在手动引入。

qq_44027353的博客 1920

基于远程服务器 Tip_Adapter源码从零开始复现

从零一步步实现源代码的运行

zcyzcyjava的博客 1604

Meta DINOv3实战指南:如何用7B参数ViT模型提升你的视觉任务性能(附Hugging Face部署教程)

本文提供了Meta DINOv3 7B参数ViT模型的实战部署指南。文章详细解析了该自监督视觉模型的优势,并重点演示了如何在Hugging Face平台上高效加载这一大规模模型,同时给出了图像分类、语义分割等下游任务的性能提升技巧与代码示例,帮助开发者在实际视觉任务中应用这一前沿技术。

pz89012345的博客 326

通过 Ribbon 查询 Nacos 服务实例

Nacos 服务列表管理Nacos 提供了开放 API 可通过 /nacos/v1/ns/instance/list 获取服务列表。如果我们采用 spring-cloud 方式去获取服务,最终会通过 Nacos Client + loadbalancer 的方式进行客户端负载均衡。Ribbon 源码解析Ribbon 简介Spring Cloud Ribbon 是 Netflix Ribbon 实现的一套客户端负载均衡工具 简单的说,Ribbon 是 Netflix 发布的开源项目,主要功能是提供客户端的复杂

wanger5354的博客 1737

QT 面试题汇总

一、讲述Qt信号槽机制与优势与不足 优点:①类型安全。需要关联的信号槽的签名必须是等同的。即信号的参数类型和参数个数同接受该信号的槽的参数类型和参数个数相同。若信号和槽签名不一致,编译器会报错。 ②松散耦合。信号和槽机制减弱了Qt对象的耦合度。激发信号的Qt对象无需知道是那个对象的那个信号槽接收它发出的信号,它只需在适当的时间发送适当的信号即可,而不需要关心是否被接受和那个对象接受了。Qt就保证了适当的槽得到了调用,即使关联的对象在运行时被删除。程序也不会奔溃。 ...

编程菜鸟 4万+

nacos使用ribbon报异常java.net.UnknownHostException

搭建nacos集群服务后整合ribbon进行测试时报错UnknownHostException。

weixin_46719403的博客 678

汽车OTA 测试用例

汽车OTA 测试用例

天赐好车的博客 977

apple游客下单逆向分析

Apple游客下单Cookies注册激活流程逆向分析与算法实现

吴秋霖的博客 2002

扩展Ribbon:支持Nacos集群配置

点击上方"IT牧场",选择"设为星标"技术干货每日送达!TIPS本文所讲已给Spring Cloud Alibaba提交PR,并已被合并。详见:https://githu...

ITMuch的专栏 3584

复制幻灯片到另一个PPT编程

请确保将源PPT文件和目标PPT文件的文件名修改为你实际使用的文件名。运行上述代码后,目标PPT将包含源PPT中的所有幻灯片和形状。这里假设源PPT文件名为"source.pptx",目标PPT文件名为"target.pptx"。方法将每个幻灯片的布局添加到目标PPT中。是一个强大的库,可以用于创建、修改和操作PPT文件。要将一个PPT中的幻灯片复制到另一个PPT,可以使用Python的。这段代码遍历源PPT的每个幻灯片,并使用。步骤 3: 打开源PPT和目标PPT。这将保存修改后的目标PPT文件。

ByteSparkX的博客 1322

nacos集群_扩展Ribbon:支持Nacos集群配置

点击上方"IT牧场",选择"设为星标"技术干货每日送达!TIPS本文所讲已给Spring Cloud Alibaba提交PR,并已被合并。详见:https://github.com/spring-cloud-incubator/spring-cloud-alibaba/pull/720在Nacos上,支持集群配置。集群是对指定微服务的一种虚拟分类。集群还是比较有用的,例如:•为了容灾,把...

weixin_39748773的博客 305

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

负载均衡-Ribbon

一、SpringCloud整合Ribbon 1.加入nacos-discovery依赖即可,因为ribbon是包含在nacos-discovery中的: 2.在RestTemplates上加@LoadBalanced注解: 二、使用Ribbon调用服务接口 其中第一个member为微服务名称,ribbon会自动去nacos上寻找名称为member的实例,如果有多个,会自动使用负载均衡算法挑选一个实例使用,member替换为该实例的ip+port,后面的/member/getMemberInfo为接口地

weixin_41997692的博客 283

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

spring cloud Alibaba 实现负载均衡 Ribbon学习笔记五

Ribbon实现负载均衡一、实现方式二、手写客户端侧负载均衡器三、使用Ribbon实现负载均衡四、Ribbon 组成五、Ribbon 配置 一、实现方式 服务器端负载均衡(单体架构) 客户端侧负载均衡(内容中心相对用户中心,属于客户端,可在内容中心集群中配置负载均衡规则) 二、手写客户端侧负载均衡器 随机负载均衡算法 三、使用Ribbon实现负载均衡 1、定义:Netfix开源的客户端侧负载均衡器,即提供了负载均衡算法 2、架构演进: 3、整合Ribbon 加依赖:不需要,spri

lzf2284466的博客 977

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Ribbon的介绍和使用(二)

1.前言 本文基于上一节内容继续讲解,上一节内容传送门:Ribbon的介绍和使用(一) 2.Ribbon 支持Nacos权重 Ribbon内置的负载均衡规则是不支持Nacos权重的,这里我们写个扩展规则实现权重。

吉京伟 488

六、实现负载均衡-Ribbon

文章目录一、负载均衡的两种方式二、手写一个客户端侧负载均衡器 一、负载均衡的两种方式 服务器端负载均衡 客户端侧负载均衡 二、手写一个客户端侧负载均衡器 修改内容中心代码 在用户中心启动两个实例 访问并多次刷新浏览器http://localhost:8010/shares/1,实现随机负载均衡算法 持续更新中,敬请期待! ...

年少不知曲中意,再听已是曲终人 669

Spring Cloud Alibaba之负载均衡组件 - Ribbon详解(三)

Ribbon是Netflix公司开源的一个负载均衡的项目(https://github.com/Netflix/ribbon),它是一个基于HTTP、TCP的客户端负载均衡器。 服务端负载均衡 负载均衡是微服务架构中必须使用的技术,通过负载均衡来实现系统的高可用、集群扩容等功能。负载均衡可通过硬件设备及软件来实现,硬件比如:F5、Array等,软件比如:LVS、Nginx等。 ...

Lambda 1964

Spring Cloud学习——客户端负载均衡:Ribbon

Sping Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netfix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的Rest模板请求自动转换成客户端负载均衡的服务调用。 RestTemplate和Ribbon相结合 Ribbon在Netflix组件是非常重要的一个组件,在Zuul中使用Ribbon做负载均衡,以及Feign组...

hxyascx的博客 479

Java 客户端负载均衡

客户端侧负载均衡 在下图中,负载均衡能力算法是由内容中心提供,内容中心相对于用户中心来说,是用户中心的客户端,所以又被称为客户端侧负载均衡 自定义实现Client Random负载均衡 获取所有的服务list 随机获取需要访问的服务信息 // 自定义客户端负载均衡能力 // 获取所有用户中心服务的实例列表 List...

weixin_30869099的博客 461

微服务中的nacos,Ribbon,Feign,Gateway

nacos,ribbon,gateway,feign

weixin_45820447的博客 1107

扩展Ribbon-基于元数据的版本控制

文章目录前言下面来实现。一、配置yml二、content-center端扩展Ribbon 前言 假设有两个微服务一个叫user-center ,一个叫content-center。为了容灾,两个微服务在BJ集群和CD集群都有部署。 且 user-center ,content-center两个微服务都有不同的版本,v1版本的content-center 只能调用v1版本的user-center 且 要求同一集群下的应用优先调用,也就是说:content-center如果在BJ集群里那么在调用user-ce

Tiny_Demon的博客 252

Spring Cloud(Ribbon、Feign) Alibaba——Nacos

微服务环境搭建 电商系统:搭建用户微服务,商品微服务,订单微服务 技术选型 maven:3.5+ 数据库:mysql 5.7 持久层:MybatisPlus 其他:springboot→springcloud Alibaba

m0_53698336的博客 596

ribbon 配置 动态更新_SpringCloud Alibaba Nacos服务注册和配置中心的学习

SpringCloud AlibabaSpring Cloud Alibaba为分布式应用程序开发提供了一站式解决方案。 它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用Spring Cloud开发应用程序。使用Spring Cloud Alibaba,您只需添加一些注释和少量配置即可将Spring Cloud应用程序连接到Alibaba的分布式解决方案,并使用Alibaba中间件构建分...

weixin_39637260的博客 329

Springcloud alibaba Nacos有什么功能 nacos服务注册中心用过吗,注册过什么业务 ribbon是什么 ribbon常用的负载均衡算法 ribbon和nginx的区别

openfeign是什么openfeign的调用方式feign和openfeign的区别openfeign使用什么注解sentinel是什么sentinel常见的容错机制怎么使用sentinelsentinel怎么持久化什么是gateway流量网关和服务网关的区别gateway三大属性gateway三大案例组件gateway过滤器分类3PC与2PC的区别Seata的原理了解TCCsaga工作原理

qq_52963857的博客 495
上一篇: ConfigurationProperties,@ConditionalOnClass,@EnableConfigurationProperties,@PropertiesSource
yonhu123java
博客等级 码龄14年 6粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值