dubbo源码分析之运行时服务治理-19

SpringCloud Alibaba系列——13Dubbo的服务治理和监听机制(上) Dubbo的服务上下线流程以及动态感知Dubbo的动态配置监听Dubbo的路由监听。 阅读详情

在之前的 dubbo 源码分析中我们分析了 dubbo 的服务暴露。provider 把需要暴露的服务地址信息注册到注册中心(比如:zookeeper),然后把通过 java nio 框架 netty 以 socket 的方式把远程服务暴露给 consumer 调用,并且订阅注解中心,当注册中心发生变化的时候 Inovke 调用就会改变。当 consumer 需要引用服务的时候通过 javassist 创建代理对象,获取到代理对象 InvokerInvocationHandler,而它组合了一个 MockClusterInvoker。dubbo 通过这个对象进行服务治理,也就是之前分析的集群容错源码的分析。我们再来看一下集群容错的架构图:

dubbo 不仅提供了 dubbo monitor 来监控服务指数,还提供了一个管理控制台用于服务的治理。

1、dubbo admin 安装

安装

wget https://archive.apache.org/dist/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35.tar.gz
tar zxvf apache-tomcat-6.0.35.tar.gz
cd apache-tomcat-6.0.35
rm -rf webapps/ROOT

git clone https://github.com/dubbo/dubbo-ops.git /var/tmp/dubbo-ops
pushd /var/tmp/dubbo-ops
mvn clean package
popd

unzip /var/tmp/dubbo-ops/dubbo-admin/target/dubbo-admin-2.0.0.war -d webapps/ROOT

 配置 dubbo.properties 把 dubbo 注解中心地址配置成真正项目里面的注册中心

vi webapps/ROOT/WEB-INF/dubbo.properties

#dubbo.properties

dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
运维:

# 启动: ./bin/startup.sh # 停止: ./bin/shutdown.sh

然后可以通过: http://127.0.0.1:8080/ 进行访问。

2、dubbo admin

dubbo admin 主要包含以下几个页面。

搜索页面

当你需要管理 Dubbo 的服务时,首先要搜索到这个服务,然后打开它的管理页面

服务提供者页面

服务消费者页面

服务应用页面

添加路由规则页面

添加动态配置页面

通过这些页面可以查询所有的服务提供者、服务消费者、服务的应用以及动态的添加路由规则或者添加动态的配置。当然也包含服务的降级、服务访问权重的调节以及负载均衡的调节。

3、服务治理原理

dubbo admin 使用 Spring MVC 来自页面展示的。我们先来看一下dubbo admin 中的配置文件 dubbo.properties里面配置了 dubbo 的注册中心地址以及 dubbo admin 的用户名与密码。

dubbo.properties

dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

 

通过配置的暴露服务的注册中心地址,就可以从注册中心获取提供者、消费者、路由信息、权重等信息。

下面我们再来看一下 dubbo-admin 里面的配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
        <property name="ignoreResourceNotFound" value="true"/>
        <property name="locations">
            <list>
                <value>/WEB-INF/dubbo.properties</value>
                <value>file://${user.home}/dubbo.properties</value>
            </list>
        </property>
    </bean>

    <dubbo:application name="dubbo-admin"/>

    <dubbo:registry client="curator" address="${dubbo.registry.address}" check="false" file="false"/>

    <dubbo:reference id="registryService" interface="com.alibaba.dubbo.registry.RegistryService" check="false"/>

    <bean id="configService" class="com.alibaba.dubbo.governance.service.impl.ConfigServiceImpl"/>

    <bean id="consumerService" class="com.alibaba.dubbo.governance.service.impl.ConsumerServiceImpl"/>

    <bean id="overrideService" class="com.alibaba.dubbo.governance.service.impl.OverrideServiceImpl"/>

    <bean id="ownerService" class="com.alibaba.dubbo.governance.service.impl.OwnerServiceImpl"/>

    <bean id="providerService" class="com.alibaba.dubbo.governance.service.impl.ProviderServiceImpl"/>

    <bean id="routeService" class="com.alibaba.dubbo.governance.service.impl.RouteServiceImpl"/>

    <bean id="userService" class="com.alibaba.dubbo.governance.service.impl.UserServiceImpl">
        <property name="rootPassword" value="${dubbo.admin.root.password}"/>
        <property name="guestPassword" value="${dubbo.admin.guest.password}"/>
    </bean>

    <bean id="governanceCache" class="com.alibaba.dubbo.governance.sync.RegistryServerSync"/>

</beans>

3.1 RegistryService

这个其实就是 dubbo admin 进行服务治理的对象,当在页面更新了服务信息的时候后台会通过这个对象进行服务信息的更新:

# 取消注册旧的服务信息
registryService.unregister(oldOverride);
# 注册新的服务信息
registryService.register(newOverride);

在这里它会引用 dubbo.properties 里面配置的注册中心,然后引用 RegistryService 这个服务。这个是不是和 consumer 引用远程服务的配置是一样的。但是我们可以使用 Zookeeper 数据查看工具 ZooInspector 查看 zookeeper 节点上面的数据。

可以看到在 zookeeper 里面并没有暴露远程服务 RegistryService 。然后我们来看打断点的跟踪到 RegistryProtocol#refer的时候:

 public <T> Invoker<T> refer(Class<T> type, URL url) throws RpcException {
        url = url.setProtocol(url.getParameter(Constants.REGISTRY_KEY, Constants.DEFAULT_REGISTRY)).removeParameter(Constants.REGISTRY_KEY);
        Registry registry = registryFactory.getRegistry(url);
        if (RegistryService.class.equals(type)) {
            return proxyFactory.getInvoker((T) registry, type, url);
        }

        // group="a,b" or group="*"
        Map<String, String> qs = StringUtils.parseQueryString(url.getParameterAndDecoded(Constants.REFER_KEY));
        String group = qs.get(Constants.GROUP_KEY);
        if (group != null && group.length() > 0) {
            if ((Constants.COMMA_SPLIT_PATTERN.split(group)).length > 1
                    || "*".equals(group)) {
                return doRefer(getMergeableCluster(), registry, type, url);
            }
        }
        return doRefer(cluster, registry, type, url);
    }

 发现 dubbo admin 再进行服务引用的时候会先根据配置 URL 获取一个 Registry 而 Registry 又是继承于 RegistryService 接口。然后再选择远程服务之前会判断这个服务是不是 RegistryService 。如果是就会根据已经获取到的 Registry 创建一个本地 Invoke,然后由这个本地 Invoke 创建 ZookeeperRegistry 的代理对象。(这个比较坑,我纠结了很久才发现 :( )。


3.2 RegistryServerSync

这个对象实现了 Spring 框架的 InitializingBean,所以在这个 bean 初始化的时候就会订阅以下 URL:

 private static final URL SUBSCRIBE = new URL(Constants.ADMIN_PROTOCOL, NetUtils.getLocalHost(), 0, "",
            Constants.INTERFACE_KEY, Constants.ANY_VALUE,
            Constants.GROUP_KEY, Constants.ANY_VALUE,
            Constants.VERSION_KEY, Constants.ANY_VALUE,
            Constants.CLASSIFIER_KEY, Constants.ANY_VALUE,
            Constants.CATEGORY_KEY, Constants.PROVIDERS_CATEGORY + ","
            + Constants.CONSUMERS_CATEGORY + ","
            + Constants.ROUTERS_CATEGORY + ","
            + Constants.CONFIGURATORS_CATEGORY,
            Constants.ENABLED_KEY, Constants.ANY_VALUE,
            Constants.CHECK_KEY, String.valueOf(false));

因为它的 interface 设置的是 Constants.ANY_VALUE 也就是 * ,所以会订阅所有的服务。具体 zookeeper 注册中心的订阅服务可以参考 ZookeeperRegistry#doSubscribe 方法。订阅了所以服务并且会获取到所有服务的服务信息缓存到 RegistryServerSync#registryCache 属性中。RegistryServerSync 还实现了NotifyListener,所以在注册中心订阅的时候还把它本身传进进去了。当注册中心的所有服务信息发生变更的时候就会调用 RegistryServerSync#notify 更新RegistryServerSync#registryCache 缓存信息。这样就可以对服务进行治理。
 

3.3 原理分析

dubbo admin 通过 Spring mvc 来展示注册中心保存的服务地址信息:提供者、消费者、路由信息、权重等信息。通过 com.alibaba.dubboadmin.web.mvc.BaseController 的继承类来修改注册中心中的服务信息:

这些 controller 主要是通过 AbstractService 的继承类来修改注册中心里面的注册信息。

public class AbstractService {

    protected static final Logger logger = LoggerFactory.getLogger(AbstractService.class);
    @Autowired
    protected RegistryService registryService;
    @Autowired
    private RegistryServerSync sync;

    public ConcurrentMap<String, ConcurrentMap<String, Map<Long, URL>>> getRegistryCache() {
        return sync.getRegistryCache();
    }

}

 它有一个 RegistryService 是 ZookeeperRegistry 的代理对象,而且还有 RegistryServerSync 这个注册中心的服务信息缓存(当服务地址信息发生变更时还可以动态更新缓存)。这样就起到了服务治理的效果。以下都是可以动态修改信息的实现类:

4、服务治理应用

通过 dubbo admin 页面不仅仅可以展示服务提供者、消费者、路由信息、权重等信息。还可以修改服务提供者,消息者的属性来达到服务治理的目的。下面我们就来看一下有哪一些应用:

4.1 服务降级

可以通过dubbo admin 来实现服务降级功能,服务降级其实是临时屏蔽某个出错的非关键服务,并定义降级后的返回策略。有两种方式:
 

mock=force:return+null 表示消费方对该服务的方法调用都直接返回 null 值,
不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。

还可以改为 mock=fail:return+null 表示消费方对该服务的方法调用在失败后,再返回 null 值,
不抛异常。用来容忍不重要服务不稳定时对调用方的影响。

 它的实现其实就是在集群调用的入口: MockClusterInvoker#invoke:

public Result invoke(Invocation invocation) throws RpcException {
        Result result = null;

        String value = directory.getUrl().getMethodParameter(invocation.getMethodName(), Constants.MOCK_KEY, Boolean.FALSE.toString()).trim();
        if (value.length() == 0 || value.equalsIgnoreCase("false")) {
            //no mock
            result = this.invoker.invoke(invocation);
        } else if (value.startsWith("force")) {
            if (logger.isWarnEnabled()) {
                logger.info("force-mock: " + invocation.getMethodName() + " force-mock enabled , url : " + directory.getUrl());
            }
            //force:direct mock
            result = doMockInvoke(invocation, null);
        } else {
            //fail-mock
            try {
                result = this.invoker.invoke(invocation);
            } catch (RpcException e) {
                if (e.isBiz()) {
                    throw e;
                } else {
                    if (logger.isWarnEnabled()) {
                        logger.info("fail-mock: " + invocation.getMethodName() + " fail-mock enabled , url : " + directory.getUrl(), e);
                    }
                    result = doMockInvoke(invocation, e);
                }
            }
        }
        return result;
    }

这段代码的逻辑分为 3 种情况:

no mock:正常情况,从注册中心经过集群、目录服务、路由服务、负载均衡选择一个合适的 Invoke 来进行调用。
force:direct mock:屏蔽,它不进行远程调用,直接返回一个之前设置的值.
fail-mock:容错,容错的其实就是调用失败后,返回一个设置的值

4.2 灰度发布


灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

比如我们需要在两台机器(192.168.100.38、192.168.48.32)上暴露服务,可以通过以下方式来进行灰度发布:

发布192.168.48.32,切断192.168.48.32访问流量,然后进行服务的发布。
192.168.48.32发布成功后,恢复 192.168.48.32的流量,
切断192.168.100.38,继续发布 192.168.100.38
 

 

从CPU视角看PCIe:深入理解x86/ARM平台上BAR、MMIO和PIO的地址翻译与访问机制 本文深入探讨了CPU如何通过BAR、MMIO和PIO机制访问PCIe设备的配置空间,详细解析了x86和ARM平台在地址翻译与访问路径上的差异。重点分析了PCIe配置空间中BAR寄存器的作用与探测机制,以及操作系统如何管理PCIe资源,为开发者提供了性能优化与调试的实用技巧。 阅读详情

相关推荐

VMD-CNN-BiLSTM-Attention预测模型 —— 数学模型介绍&完整实例代码

想解决电力负荷预测中的非线性、非平稳难题?这篇博客介绍了一种创新混合模型,结合变分模态分解(VMD)和CNN-BiLSTM-Attention深度学习架构,实现超高精度预测! ✨ 核心亮点: ✅ VMD分解:有效分离复杂负荷信号,提取关键频率特征 ✅ 混合深度学习:CNN捕捉局部模式 + BiLSTM学习长时序依赖 + 注意力机制聚焦关键时段 ✅ 端到端优化:从数据预处理(滑动窗口、归一化)到模型训练(MSE损失+Adam优化),完整流程公开! ✅ 工业级评估:提供MSE、MAE、MAPE、R²多指标验证

qq_42924330的博客 1652

dubbo源码分析19 -- 服务治理

在之前的 dubbo 源码分析中我们分析了 dubbo 的服务暴露。provider 把需要暴露的服务地址信息注册到注册中心(比如:zookeeper),然后把通过 java nio 框架 netty 以 socket 的方式把远程服务暴露给 consumer 调用,并且订阅注解中心,当注册中心发生变化的时候 Inovke 调用就会改变。当 consumer 需要引用服务的时候通过 javassi...

carl.zhao的专栏 1361

UR机械臂正逆运动学解析:从DH参数到8组解的完整求解策略

本文深入解析UR机械臂的正逆运动学求解策略,从DH参数原理到完整的8组解求解方法。详细介绍了正运动学的坐标变换过程,以及逆运动学中Atan2函数和三角恒等变换的应用,并揭示了8组解的产生机制。通过实际案例和调试技巧,帮助工程师掌握UR机械臂运动学求解的核心技术。

weixin_29094775的博客 413

Dubbo(十五)源码解析 之 服务路由

服务路由源码解析 1. 什么是服务路由 服务路由包含一条(或若干条)路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者。Dubbo 目前提供了三种服务路由实现,分别为条件路由ConditionRouter、脚本路由 ScriptRouter 和标签路由 TagRouter。其中条件路由是我们最常使用的。 下面将以条件路由为例来讲解服务路由的用法。 2. 路由规则的设置 路由规则是在 Dubbo 管控平台 Dubbo-Admin 中的。 (1) 启动管控平台 A、启动管控台

语雀同名:犬豪 yuque.com/qhao 1253

Bartender 2021破解版安装教程:手把手教你从下载到激活(附详细步骤图)

本文详细介绍了BarTender 2021专业版的安装与高效应用指南,从基础配置到高级条码设计,帮助用户快速掌握标签设计与打印技术。内容涵盖安装步骤、标签模板创建、数据连接与批量打印技巧,以及高级功能如安全策略与自动化集成,适合零售、物流、制造等行业用户提升工作效率。

p4q5r6s7t的博客 2634

侧杆试验 - 高速撞击 - 显式动力学 - ANSYS Workbench

显式动力学是一种时间积分方法,用于在速度很重要时执行动态模拟。显式动力学考虑快速变化的条件或不连续事件,例如自由落体、高速撞击和施加的负载。由于这些“非线性动力学”已集成到模拟中,因此显式动力学是模拟高度瞬态物理现象的首选。有些侧面碰撞是指车辆侧向撞上路边的坚硬物体,如树木或电线杆。这通常是由于驾驶员失去控制、超速、误判拐角或在湿滑路面上打滑造成的。

jianqimingtian的博客 1289

下载Dubbo源码包打包安装Dubbo-admin

1. 下载源码包 dubbo-2.6.1以后的版本不再有dubbo-admin,所以进入这个网站下载Dubbo admin 新地址:GitHub - apache/dubbo-admin: The ops and reference implementation for Apache Dubbo 下载。 2. 下载压缩包 获取dubbo-admin.war方法 访问链接:https://github.com/apache/dubbo/releases 找到2.5.9的版本,下载Source c..

安余生的博客 1898

OpenClaw一人公司落地案例:本地商家营销智能体月赚3万的秘密

角色:本地商家营销专家## 核心目标为商家生成高转化率的抖音营销策略,最大化 ROI。## 输入数据- 商家名称: "XX奶茶店"- 过去 30 天视频播放量: 12,000- 客单价: 28 元- 竞品平均播放量: 15,000- 市场趋势: rising## 策略生成规则1. **内容类型**:根据客单价推荐- < 30 元:美食探店 + 优惠券- > 30 元:场景化故事 + 会员权益2. **发布时间**:根据历史数据- 18:00-20:00 高峰期。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 542

Dubbo——服务治理(dubbo-Admin)平台

摘要 本章将详细探讨Dubbo配置的设计模型、服务暴露的原理、服务消费的原理和优雅停机的原理。首先,学习优雅的分层配置设计,能够帮助我们更好地理解框架的启动配置逻辑,不管是注解还是XML 配置都需要配置对象来承载。然后探讨服务暴露和服务消费的细节。最后研究优雅停机特性,能够保证线上服务和消费方平滑地退出。 Dubbo配置解析; 基于schema设计解析 Spring框架对Java产生了深远的影响,Dubbo 框架也直接集成了Spring 的能力,利用Spring配置文件扩展出自定义的解析方式。Dub

庄小焱 1191

069、自动曝光(AE)测光策略:全局/中心/点测光与曝光时间增益分配

本文深入探讨了自动曝光(AE)测光策略的技术细节与实际应用。作者通过多个真实案例(手机前置摄像头、车载ADAS、安防监控等)分析了全局测光、中心测光和点测光的优缺点,指出不同场景应采用不同策略。重点剖析了曝光时间与增益分配的"跷跷板效应",提出要根据传感器特性选择最优分配方案。文章强调测光策略应动态调整,并给出5条实用建议:结合场景切换测光模式、关注传感器增益拐点、点测光需防抖处理、全局测光不宜迷信、调试要观察亮度直方图。最后指出AE调试需要结合具体硬件特性进行实测优化,没有通用解决方案。

zzfmlxs的博客 101

财务数智化——解读224页 2025年数智技术业财融合应用蓝皮书【附全文阅读】

《数智技术赋能业财融合蓝皮书》面向企业管理者及数字化转型从业者,系统阐述数智技术在业财融合中的应用。全书围绕技术基础(定义、分类、发展趋势)、融合框架(三阶段路径与三层价值)、七大行业应用场景(涵盖核算自动化、智能收款、项目管控等)、关键技术(AI、大数据等)及实施要点(组织协同、数据治理等),通过典型案例为企业提供从技术到实践的全面指导,助力实现数据贯通与价值创造。

cdfunlove的博客 1747

dubbo源码解析

dubbo源码解析-网络通信 在之前的内容中,我们讲解了消费者端服务发现与提供者端服务暴露的相关内容,同时也知道消费者端通过内置的负载均衡算法获取合适的调用invoker进行远程调用。那么,本章节重点关注的就是远程调用过程即网络通信。 网络通信位于Remoting模块: Remoting 实现是 Dubbo 协议的实现,如果你选择 RMI 协议,整个 Remoting 都不会用上; Remoting 内部再划为 Transport 传输层 和 Exchange 信息交换层; Transport 层

分享Java技术知识,共同成长进步! 3310

华为OD面试八股文嵌入式C语言基础问题及答案(一)

本文总结了C语言编程中的10个关键知识点:1.宏定义MIN的实现方法;2.嵌入式无限循环的两种写法;3.变量a的8种不同定义方式;4.static关键字的三种作用;5.const关键字的含义和使用场景;6.volatile关键字的含义及三个应用实例;7.变量存储位置(栈区、静态区、堆区);8.32位系统指针位数;9.局部与全局变量重名规则;10.引用与指针的三点区别。这些内容涵盖了宏定义、变量声明、存储类别、指针等C语言核心概念,对嵌入式开发和系统编程具有重要参考价值。

m0_50382756的博客 160

谈谈为什么需要服务治理(Dubbo)

服务治理主要针对于当前分布式架构下多服务、微服务等。服务是分布式系统下的一个不大不小的部分,有了服务的组成,整个系统才能活起来。随着业务的增长,服务不能一味地随之增长,需要管理、治理。没有服务治理的分布式系统不一定会失败,但是随着业务的增长,这个系统一定会很痛苦。服务治理的目标服务治理严格意义上应该划分为三个阶段,包含了服务的整个生命周期。其中服务设计期主要针对于服务的设计期、开发期,而服务运行期...

Java烂猪皮 1753

使用ros控制双机械臂系统(实现了双机械臂的Gazebo仿真,以及连接并控制两台真实的UR10机器人)+源代码+文档说明

<项目介绍>-双ur机械臂控制本系统使用ros控制双机械臂系统,实现了双机械臂的Gazebo仿真,以及连接并控制两台真实的UR10机器人。Languages:C++-不懂运行,下载完可以私聊问,可远程教学该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用!1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。--------

mono-6.12.0.107-x64-0.msi

mono-6.12.0.107-x64-0.msi

微服务架构下的服务治理-Dubbo(源码分析)

主要是针对Dubbo SPI机制和IoC机制来分析

qq_35669498的博客 588

魔百盒(机顶盒/刷机)(CM/M)固件合集

CM101S,CM101S-2,CM102、CM201-1,CM201-2,CM201Z,CM211-1,CM211-2,CM301,E820,HM201,M101,M201-D,M201-S,M301A,M301H,M302A,M302H,M304A,M401A,M401H,M411A,Z82,Z84,Z86,Z90,CM311,易视腾iS-E5-NGH/IS-E6-NGM1

微服务治理框架-Dubbo

众所周知,服务与服务之间的远程通信是分布式架构最基本的组成部分,传统意义上的远程通信,更多的时候是解决信息孤岛及数据互联与通问题的,它主要关注的是数据的共享。随着SOA生态的不断完善以及微服务架构思想的落地,服务与服务之间的远程通信需求更多来自服务的解耦。为了解决这些问题,就需,而Dubbo就是一个这样的框架。

tian830937的专栏 1548

IFR工业机器人数据(1993-2023年)

IFR各国分行业的机器人数据更新至2023年!IFR工业机器人数据系统性记录了自20世纪90年代以来全球主要国家和地区在工业机器人领域的年度新增安装量、在役库存、行业分布及应用场景等信息,涵盖汽车、电子、电气、金属加工等多个制造业部门常用该数据衡量各国或行业的自动化水平、技术进步与产业结构升级,并结合企业或区域层面数据分析机器人普及对生产率、就业、绿色转型与资本结构等经济变量的影响,广泛应用于国际比较、政策评估和数字经济实证研究中一、数据介绍数据名称:IFR工业机器人数据数据范围:各国各行业时间范围:1993-2023年样本数量:139500条数据来源:IFR国际机器人联合会数据用途:衡量地区智能制造水平,可计算中国各地区工业机器人渗透度(安装密度)二、数据指标年份行业代码行业国家ISO代码国家新增机器人安装量机器人使用存量

Dubbo源码分析

一,为什么要用Dubbo 1.为什么要用现成的框架呢? 如果我们自己去开发一个网络通信,需要考虑到 底层网络通信协议的处理 序列化和反序列化的处理工作 这些工作本身应该是通用的,应该是一个中间件服务。为整个公司提供远程通信的服务。而不应该由业务开发人员来自己去实现,所以才有了这样的 rpc 框架,使得我们调用远程方法时就像调用本地方法那么简单,不需要关心底层的通信逻辑。 2.大规模服务化对于服务治理的要求 当企业开始大规模的服务化以后,远程通信带来的弊端就越来越明显了。 服务链路变长了,如何实现对服务

weixin_45596022的博客 1739

apache dubbo 源码分析系列汇总

Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。后面捐献给了知名的开源社区 apache。 Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 1、dubbo 架构 以下是 du...

carl.zhao的专栏 2446

新范式源码分析source-code-hunter:Dubbo服务治理实践

在当今分布式系统架构中,服务治理已成为确保系统稳定性、可扩展性和高性能的关键因素。随着微服务数量的快速增长,传统的单体应用监控和管理方式已无法满足需求。服务发现、负载均衡、容错处理、动态路由等治理需求变得日益复杂。 Dubbo作为阿里巴巴开源的分布式服务框架,提供了一套完整的服务治理解决方案。通过深入分析Dubbo源码,我们可以发现其在服务注册发现、负载均衡、集群容错等方面的精妙设计。本文将基于...

gitblog_00475的博客 304

dubbo服务端启动源码分析(基于Dubbo 3)

本文基于Dubbo 3.0.2来进行源码研究。 在基于springboot的开发中,dubbot的spring-boot-starter中,DubboAutoConfiguration自动配置是一个关键类,这个类向spring容器注入了如下关键类: ServiceAnnotationPostProcessor DubboBootstrapApplicationListener 其中ServiceAnnotationPostProcessor主要是用来加载被DubbotService注解修饰的类,而Dub

LeoHan 1254

Dubbo 技术学习指南:深度探索分布式服务框架的精髓

Dubbo技术栈深度广博,学习过程中应理论与实践相结合,通过动手搭建示例项目、参与真实项目开发,逐步将所学知识转化为实际生产力。随着对Dubbo理解的加深,您将能更好地驾驭这一强大的分布式服务框架,为构建高效、稳定、易维护的微服务体系打下坚实基础。

聚焦于深度解析最新的编程语言特性、框架升级、架构设计、开发工具和最佳实践,涵盖Web前端(如Vue3, React, Angular等)、后端开发(如Node.js, Java, Python等)、移动端开发(iOS, Android原生及跨平台开发) 4万+

dubbo 服务跟踪

本文的目标是改进dubbo,在各个dubbo服务之间透传traceId,实现服务跟踪。

Mingzhi的专栏 1万+

源码分析Dubbo系列文章

本系列文章主要针对Dubbo2.6.2(dubbox2.8.4)版本,从源码的角度分析Dubbo内部的实现细节,加深对Dubbo的各配置参数底层实现原理的理解,更好的指导Dubbo实践,其目录如下: 1、源码分析Dubbo前置篇-寻找注册中心、服务提供者、服务消费者功能入口 2、源码分析Dubbo服务提供者启动流程-上篇 3、源码分析Dubbo服务提供者启动流程-下篇 4、源码分析Dubb...

中间件兴趣圈 2万+

Dubbo的简单使用

一、架构演进 单体架构 垂直应用架构:根据业务边界拆分,每个功能称为一个服务 公共的业务service,导致很多部分的冗余 分布式应用架构:把公共服务器的service提取成一个服务 网络通讯的问题,使用RPC框架 服务集群的负载均衡处理 服务如何被发现 服务如何被治理 服务之间如何高效的通信 微服务架构,主要解决以下几个问题 服务的注册和发现 服务的搞笑通信 服务的治理:服务权重、负载均衡、服务熔断、限流等等 二、注册中心 1、概述 主流的注册中心:

liming0025的专栏 7374

Dubbo服务暴露流程

1. 前言 DubboBootstrap启动时,首先会通过initialize()方法完成初始化,装配各种Config对象,为后续的服务暴露和引用准备好环境。 ​ ServiceConfig对象就是Dubbo对服务的描述对象,服务暴露的逻辑都在ServiceConfig#export()里面,Dubbo暴露服务也就是遍历所有的ServiceConfig,挨个进行暴露。 上图是官方文档给的图,在Dubbo的架构体系中,像集群容错、负载均衡等逻辑都是客户端实现的,所以服务暴露的过程相对会简单很多。Servic

程序员小潘 3260
上一篇: dubbo源码分析之服务监控monitor-18
下一篇: dubbo源码分析之invoke概述-20
Jack爱258
博客等级 码龄10年 1288粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值