Java开发Dubbo分布式框架使用及原理浅析

Dubbo原理和机制详解(非常全面) 最全图文详解Dubbo的原理机制,彻底搞懂吃透Dubbo核心功能、Dubbo核心组件、Dubbo的架构设计、Dubbo调用流程等重要核心知识点,可以让我们更好地掌握和使用 Dubbo。。 阅读详情

引言
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)

Dubbo是什么?

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。

Dubbo能做什么?

透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

Dubbo架构

节点角色说明:
· Provider: 暴露服务的服务提供方。
· Consumer: 调用远程服务的服务消费方。
· Registry: 服务注册与发现的注册中心。
· Monitor: 统计服务的调用次调和调用时间的监控中心。
· Container: 服务运行容器。
调用关系说明:
服务容器负责启动,加载,运行服务提供者。
服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者在启动时,向注册中心订阅自己所需的服务。
注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
Dubbo提供了很多协议,Dubbo协议、RMI协议、Hessian协议,Dubbo源代码有各种协议的实现,我们之前没用Dubbo之前时,大部分都用Hessian来使用我们服务的暴露和调用,利用HessianProxyFactory调用远程接口。
Dubbo原理
初始化过程细节: 第一步,就是将服务装载容器中,然后准备注册服务。和spring中启动过程类似,spring启动时,将bean装载进容器中的时候,首先要解析bean。所以dubbo也是先读配置文件解析服务。
解析服务:
1)、基于dubbo.jar内的Meta-inf/spring.handlers配置,spring在遇到dubbo名称空间时,会回调DubboNamespaceHandler类。
2)、所有的dubbo标签,都统一用DubboBeanDefinitionParser进行解析,基于一对一属性映射,将XML标签解析为Bean对象。生产者或者消费者初始化的时候,会将Bean对象转会为url格式,将所有Bean属性转成url的参数。 然后将URL传给Protocol扩展点,基于扩展点的Adaptive机制,根据URL的协议头,进行不同协议的服务暴露和引用。
暴露服务:
a、 直接暴露服务端口
在没有使用注册中心的情况,这种情况一般适用在开发环境下,服务的调用这和提供在同一个IP上,只需要打开服务的端口即可。 即,当配置 or ServiceConfig解析出的URL的格式为: Dubbo://service-host/com.xxx.TxxService?version=1.0.0 基于扩展点的Adaptiver机制,通过URL的“dubbo://”协议头识别,直接调用DubboProtocol的export()方法,打开服务端口。
b、向注册中心暴露服务:
和上一种的区别:需要将服务的IP和端口一同暴露给注册中心。 ServiceConfig解析出的url格式为: registry://registry-host/com.alibaba.dubbo.registry.RegistryService?export=URL.encode(“dubbo://service-host/com.xxx.TxxService?version=1.0.0”)
基于扩展点的Adaptive机制,通过URL的“registry://”协议头识别,调用RegistryProtocol的export方法,将export参数中的提供者URL先注册到注册中心,再重新传给Protocol扩展点进行暴露: Dubbo://service-host/com.xxx.TxxService?version=1.0.0
引用服务:
a、直接引用服务:
在没有注册中心的,直连提供者情况下, ReferenceConfig解析出的URL格式为: Dubbo://service-host/com.xxx.TxxService?version=1.0.0
基于扩展点的Adaptive机制,通过url的“dubbo://”协议头识别,直接调用DubboProtocol的refer方法,返回提供者引用。
b、从注册中心发现引用服务:
此时,ReferenceConfig解析出的URL的格式为: registry://registry-host/com.alibaba.dubbo.registry.RegistryService?refer=URL.encode(“consumer://consumer-host/com.foo.FooService?version=1.0.0”)
基于扩展点的Apaptive机制,通过URL的“registry://”协议头识别,就会调用RegistryProtocol的refer方法,基于refer参数总的条件,查询提供者URL,如: Dubbo://service-host/com.xxx.TxxService?version=1.0.0
基于扩展点的Adaptive机制,通过提供者URL的“dubbo://”协议头识别,就会调用DubboProtocol的refer()方法,得到提供者引用。 然后RegistryProtocol将多个提供者引用,通过Cluster扩展点,伪装成单个提供这引用返回。
四、服务提供与消费详细过程

服务提供者暴露一个服务的详细过程
暴露服务的主过程:
首先ServiceConfig类拿到对外提供服务的实际类ref,然后将ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,到这一步就完成具体服务到invoker的转化。接下来就是Invoker转换到Exporter的过程。 Dubbo处理服务暴露的关键就在Invoker转换到Exporter的过程,下面我们以Dubbo和rmi这两种典型协议的实现来进行说明: Dubbo的实现: Dubbo协议的Invoker转为Exporter发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,通讯细节由dubbo自己实现。 Rmi的实现: RMI协议的Invoker转为Exporter发生在RmiProtocol类的export方法,他通过Spring或Dubbo或JDK来实现服务,通讯细节由JDK底层来实现。

服务消费的主过程
服务消费的主过程:
首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例。接下来把Invoker转为客户端需要的接口

Dubbo工作原理与源码 Dubbo 是一个高效、灵活的 RPC 框架,它通过服务注册与发现、负载均衡、容错、动态代理等机制,提供了一个高性能的分布式服务框架。Dubbo 的工作原理注重服务治理和高可用性,能够在大规模分布式系统中处理大量的请求。以上源码分析深入探讨了 Dubbo 在服务暴露、服务消费、负载均衡、容错机制、服务注册与发现等方面的实现。通过这些核心源码,我们可以更清楚地理解 Dubbo 的工作原理,尤其是如何通过Invoker进行远程调用,如何使用Protocol和Registry进行服务暴露与注册,如何利用和。 阅读详情

相关推荐

Java中的分布式框架详解与实践

本文详细介绍了Java中主流分布式框架Dubbo和Spring Cloud的架构设计与开发实践。首先讲解了分布式系统的基础概念和核心挑战,包括CAP理论、服务发现等。然后重点剖析了Dubbo框架,展示了服务定义、提供者实现、消费者调用全流程,并详解了负载均衡和容错机制配置。对于Spring Cloud,文章概述了其生态组件,并以Nacos为例演示了服务注册与发现的实现。全文通过代码示例帮助开发者掌握分布式系统的开发要点,适合需要构建高可用、高性能分布式应用的Java工程师参考。

ly1379223878的博客 1417

一文搞懂Dubbo(VIP典藏版)

RPC(Remote Procedure Call):远程过程调用。目标是为了实现多台计算机/服务器,互相调用方法的解决方案。补充:他只是一个思想,并不是一个实现。通信协议序列化协议。

慕白Lee的博客 1082

利用 Dubbo 构建 Java 分布式缓存系统

在当今互联网应用中,缓存系统是提升性能、降低数据库负载的关键组件。随着业务规模扩大,单机缓存已无法满足需求,分布式缓存成为必然选择。本文旨在展示如何利用 Dubbo 这一成熟的 RPC 框架,构建一个高性能、高可用的 Java 分布式缓存系统。介绍分布式缓存和 Dubbo 的基本概念分析核心架构和设计原理实现关键算法和功能展示完整项目案例探讨性能优化和实际应用总结未来发展趋势Dubbo:阿里巴巴开源的高性能 Java RPC 框架分布式缓存:将缓存数据分布在多台服务器上的系统。

AI开发架构师 865

Dubbo高手之路1,Dubbo原理和机制,Dubbo的核心组件

Dubbo是一种高性能、轻量级的分布式服务框架,它的设计目标是为大规模分布式应用提供支持。

学Java,找哪吒 4445

Dynatrace分布式跟踪之Alibaba Dubbo

本文介绍如何用Dynatrace AppMon的PurePath技术来监控Dubbo应用。Dubbo应用是指基于阿里巴巴dubbo分布式远程调用框架的应用程序,用PurePath技术监控dubbo应用是把在dubbo应用上处理请求的代码按照执行顺序和调用关系串联起来,实现分布式执行链路的跟踪(distributed tracing),从而帮忙开发业务人员快速诊断dubbo应用的性能问题。通过查阅网...

丁威@Dynatraceの博客 5702

保姆级教程:用MATLAB搞定运动模糊图片修复(附完整代码与避坑指南)

本文提供了一份详细的MATLAB运动模糊图片修复教程,涵盖盲复原、图像复原等核心技术。通过傅里叶变换和Radon变换分析模糊参数,对比逆滤波、维纳滤波和Lucy-Richardson算法效果,并附完整代码与避坑指南,帮助用户实现专业级图像处理。

weixin_26765363的博客 228

分布式架构——Gossip 协议详解,腾讯面试需要java转go

切莫死记硬背,小心面试官直接让你出门右拐1000道互联网Java面试题:Java高级架构面试知识整理:1000道互联网Java面试题:[外链图片转存中…(img-54L89gKD-1711822838213)]Java高级架构面试知识整理:[外链图片转存中…(img-DbcgcGq8-1711822838213)]

qq_58071132的博客 1229

爬取百度图片

最开始,我们想要爬取图片,首先需要打开百度图库,然后在搜索栏中输入自己想要的图片(比如说壁纸)。接着右键检查,点击网络:起初可能没有名称信息,刷新界面就可以了。打开信息,查看标头内容可以看到请求URL为:复制这串URL,然后在浏览器中打开这个就是我们搜索的壁纸图片的网页内容。怎么找到图片的URL呢?在上述内容中,找到data,可以发现里面每隔一个aiEditData,下面代码的形式是一样的,就相当于一张图片。

weixin_54143563的博客 1939

服务框架Dubbo和ZooKeeper

本篇为动物园之旅~ dubbo看作动物园的动物,那么zookeeper就是动物园 如果有人想去动物园看小老虎,那么动物园中有小老虎才能看到,否则看不到~

m0_66689823的博客 7186

Obsidian + AI 自动知识管理:手把手教程

装完后,在命令面板(Ctrl+P)搜 "Generate Summary",AI 会在当前笔记末尾追加一段摘要。你一个月前写的、现在想快速回顾的笔记长篇笔记(三千字以上)开会记录这类信息密集的内容过度自动化。有人装上插件后,所有笔记都让 AI 打标签、写摘要、找关联。最后笔记库看起来整整齐齐,但全都是 AI 的链接,你自己完全没参与。这样做的后果是什么?你写过的笔记跟你没有"真实连接"。你还是记不住。你还是不知道自己的知识库里有什么。AI 推荐,你决策。

weixin_43571227的博客 747

解放双手,摆脱自建库的繁琐,立创EDA元件库转cadence原理图封装库实战技巧

解放双手,摆脱自建库的繁琐,立创EDA元件库转cadence原理图封装库实战技巧

u012790770的博客 3613

分布式框架Dubbo详细介绍和使用

摘要:Apache Dubbo是一款高性能Java RPC框架,提供分布式服务治理能力。其核心架构包含服务提供者(Provider)、消费者(Consumer)、注册中心(Registry)和监控中心(Monitor)四大组件,支持多种协议和序列化方式。通过XML配置可快速实现服务注册与发现,示例展示了定义HelloService接口、实现类及Dubbo的XML配置过程,包括服务暴露和引用。Dubbo简化了分布式系统开发,具有负载均衡、容错等特性,适合构建企业级微服务架构。

小楼一夜听春雨,深巷明朝卖杏花 3763

达梦--利用存储过程与定时任务实现数据自动迁移

本文详细介绍了在达梦数据库中如何结合存储过程与定时任务实现数据自动迁移。通过一个电商订单归档的实战案例,阐述了从设计表结构、编写具备异常处理和幂等性的存储过程,到配置DBMS_SCHEDULER定时任务的全流程。该方法能有效替代手动脚本,确保数据同步任务的稳定、准确与自动化执行,适用于报表准备、数据备份等多种场景。

weixin_29261711的博客 430

Java开发主流框架是什么?

一、如果看传统企业开发 Struts、Spring和Hibernate ,简称SSH。 在10多年前,SSH绝对是业内最流行的企业级开发框架。 SSH框架是以Struts框架进行MVC分离、控制业务跳转,同时使用Hibernate进行持久化,最后配合Spring的统一管理进行实现的开发框架。相对于传统的J2EE开发框架来讲性能相对较高、资源消耗相对较少。具体优势如下: 框架进行了代码分层,将Java代码和HTML代码进行分层,大大降低了开发人员的技术难度,不需要同时精通Java后端知识和Web前端知

m0_57290404的博客 5190

【数据集6】全球人工不透水面积GAIA(清华数据)

全球人工不透水面GAIA简介及其应用

WW、forever的博客 3800

ITKMontage---ITK自动拼接模块

本文分享ITK中Remote中的ITKMontage拼接模块,希望对各位小伙伴有所帮助!1. ITKMontage介绍在医疗图像处理过程中,图像拼接有很多用处,比如DR图像的拼接。ITKMontage可以快速稳定的处理数据量较大的拼接图像。强度不均匀性校正配准全局优化融合2. ITKMontage安装ITKMontageITKMontage可脱离ITK进行单独安装,也可在ITK安装时作为模块进行安装。单独安装ITK模块安装在ITK编译时,选择ITKMontage模块。

qq_40041064的博客 449

Dubbo 使用教程和原理分析

Dubbo 使用教程和原理分析代码演示

小凯的博客 1918

使用 MATLAB/Simulink 构建一个基于FOC控制的PMSM矢量控制仿真模型

本教程详细介绍了基于Simulink的永磁同步电机(PMSM)磁场定向控制(FOC)仿真建模过程。主要内容包括:PMSM电机参数设置、Clarke/Park变换模块设计、电流环PID控制器构建、SVPWM调制实现等关键步骤。教程提供了完整的建模流程、参数配置建议和仿真调试方法,并给出了PID整定技巧和进阶优化方向。通过该模型,可深入理解PMSM矢量控制原理,掌握高性能电机控制系统的建模技术,为伺服系统、电动汽车驱动等应用领域提供仿真基础。教程还推荐了使用PIDTuner工具进行参数优化,并提出了加入负载扰动

amy_mhd的博客 643

Java经典框架之Dubbo

系统正常运行了一段时间后,虽然加的有缓存,使绝大多数的数据库操作可以不通过数据库就能完成,但是任然有一部分的操作(缓存访问不命中,缓存过期)和全部的写操作需要访问数据库,当用户达到一定规模后,数据库因为负载压力过大还是会成为系统的瓶颈,应用和数据分离后,不同特性的服务器承担着不同的服务角色,网站的并发处理能力和数据存储空间都得到了很大的改善,支持网站业务进一步发展,但是随着用户逐渐增多,数据库压力越来越大,访问延迟,进而影响整个网站的性能,此时需要进一步优化。Dubbo 框架,是基于容器运行的.。

m0_52514893的博客 1698

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

RPC框架与Dubbo完整使用

这并不是原理性的解释文章。只是快速入门,还有一个完整的Java例子。 一篇我觉得不错的文章推荐:深入浅出 RPC - 浅出篇 一、RPC 什么是RPC?RPC(Remote Procedure Call)远程过程调用。见名知意 - 从远程主机调用一个过程/函数。RPC的目标是:使得程序调用其它远程主机上的函数,好像调用本程序内的函数一样简单。并且屏蔽编程语言的差异性。要实现上述目标,首先的是设计一

「有且仅有」 5万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Dubbo底层原理分析和分布式实际应用

1、抓包分析dubbo的协议和调用过程 1.1、支持的协议 1.1.1dubbo协议 Dubbo缺省协议采用单一长连接和NIO异步通讯,使用基于于netty+hessian(序列化方式)交互。适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。Dubbo缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。 1.1.2 rmi协议 走j...

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

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Dubbo的使用及原理浅析

1. Dubbo是什么? Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用,以及SOA服务治理方案。说白了就是个远程服务调用的分布式框架 2. Dubbo能做什么? 透明化的远程方法调用 就像调用本地方法一样调用远程方法,只需简单配置,没有...

chuangyingzhai4074的博客 180

视频教程-分布式RPC服务框架Dubbo从入门到手写Dubbo框架教程-Java

分布式RPC服务框架Dubbo从入门到手写Dubbo框架教程 张长志技术全才...

weixin_34759981的博客 368
上一篇: Spring 表达式语言
下一篇: Java学习必备书籍推荐终极版
HelloWorld_AA
博客等级 码龄9年 18粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值