Apache Dubbo3源码深入解读.pdf
《Apache Dubbo3源码深入解读.pdf》由会员分享,可在线阅读,更多相关《Apache Dubbo3源码深入解读.pdf(436页珍藏版)》请在咨信网上搜索。
1、封面页 目录 关于本书.5 Apache Dubbo 概念与架构.6 .6 一、Dubbo 简介.6 二、核心架构.9 三、Dubbo 核心特点.16 四、与 gRPC、Spring Cloud、Istio 的关系.28 提供者服务发布过程.35 .35 一、从一个服务提供者的 Demo 说起.35 二、ServiceConfig 与服务发布过程.38 模块化与多实例.50 .50 一、框架、应用、模块领域模型及 Model 对象的初始化.50 SPI 扩展机制.76 .76 一、Dubbo 的扩展机制概述.76 二、自适应扩展对象的创建及 getAdaptiveExtension 方法.91
2、 三、普通扩展对象的创建与 Wrapper 机制.112 四、自动激活扩展 Activate 注解.121 Bootstrap 启动过程.128 .128 一、Dubbo 配置体系及工作原理.128 二、DubboBootstrap 之借助双重校验锁的单例模式进行对象的初始化.142 三、DubboBootstrap 之添加应用程序的配置信息 ApplicationConfig.145 四、DubboBootstrap 之添加注册中心配置信息 RegistryConfig.151 五、DubboBootstrap 之添加协议配置信息 ProtocolConfig.157 六、全局视野再看服务端
3、整体启动过程.160 核心服务治理组件解析.170 .170 一、服务治理之注册、配置和元数据中心.170 二、配置加载全解析.185 三、元数据中心源码解析.200 四、模块发布器发布服务解析.225 五、注册中心双注册原理.255 六、服务发现 MetadataService 导出过程.290 服务引用启动过程.308 .308 一、从一个服务消费者的 Demo 说起.308 二、ReferenceConfig 设计.312 三、消费者服务引用流程.315 应用级服务发现源码解析.331 .331 一、应用级服务发现原理简介.331 二、Dubbo3 消费者自动感应决策应用级服务发现原理.
4、338 三、接口级地址订阅逻辑.347 四、应用级服务发现源码解析.381 RPC 调用过程解析.407 .407 一、集群容错与过滤器.407 二、RPC 调用过程解析.412 关于本书 5 关于本书 本书是由 Apache Dubbo Committer 宋小生所著,作者对于 Apache Dubbo3 源码的探究,一开始是为了将公司内 Dubbo2 顺利升级至 Dubbo3 版本,在源码探究的过程中发现 Apache Dubbo3 有许多优秀的设计思想值得学习,于是就打算通过Debug 源码的方式将整个过程编写成博客的形式分享给其他对 Dubbo3 感兴趣的用户又或者是升级 Dubbo3
5、 的用户,在整个过程中发现 Apache Dubbo3 在快速的成长,还有许多要完善的地方,于是就积极的参与了 Dubbo3 的一些建设,现将Dubbo3 源码系列整理成一个电子书的形式让更多对源码感兴趣的小伙伴深入了解底层源码知识,由于一开始没想到能著作成书,因此个别章节之间会显得缺乏连贯性,尽管我们在编写成书的过程中做了一些增补,仍不可避免的会有类似的一些问题,希望得到大家的谅解和指正,相信阅读这本电子书的同学也是可以自己动手Debug 找到自己需要的源码知识的。本书源码主要基于 Dubbo3 v3.0.8 版本,自写作期间 Dubbo3 一直处于快速演进中,目前已经演进到了 3.2.x
6、版本,书中个别内容可能与最新代码实现有一定差异。如果您对本书中的内容有建议或者意见、欢迎提出专业方面的修改建议。您可以直接在 GitHub 上以 issue 或者 PR 的形式提出。https:/ 联系作者 宋小生,Apache Dubbo Committer,负责中间件相关研发工作,热衷于开源软件源码解析。欢迎关注作者的公众号中间件源码,如果您有任何意见、建议,或者想与作者交流,都可以直接后台留言。当然升级 Dubbo3 过程中遇到的一些困难也可以一起交流。Apache Dubbo 概念与架构 6 Apache Dubbo 概念与架构 一、Dubbo 简介 Apache Dubbo 是一款易
7、用、高性能的 WEB 和 RPC 框架,同时为构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具与最佳实践。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力,利用Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。在云原生时代,Dubbo相继衍生出了Dubbo3、Proxyless Mesh等架构与解决方案,在易用性、超大规模微服务实践、云原生基础设施适配、安全性等几大方向上进行了全面升级。1.Dubbo 的开源故事 Apache Du
8、bbo 最初是为了解决阿里巴巴内部的微服务架构问题而设计并开发的,在十多年的时间里,它在阿里巴巴公司内部的很多业务系统的到了非常广泛的应用。最早在 2008 年,阿里巴巴就将 Dubbo 捐献到开源社区,它很快成为了国内开源服务框架选型的事实标准框架,得到了业界更广泛的应用。在 2017 年,Dubbo 被正式捐献 Apache 软件基金会并成为 Apache 顶级项目,开始了一段新的征程。Dubbo 被证实能很好的满足企业的大规模微服务实践,并且能有效降低微服务建设的开发与管理成本,不论是阿里巴巴还是工商银行、中国平安、携程、海尔等社区用户,它们都通过多年的大规模生产环境流量对 Dubbo
9、的稳定性与性能进行了充分验证。后来 Dubbo 在很多大企业内部衍生出了独立版本,比如在阿里巴巴内部就基于Dubbo3 衍生出了 HSF3,HSF 见证了阿里巴巴以电商业务为守的微服务系统的快速发展。自云原生概念推广以来,各大厂商都开始拥抱开源标准实现,阿里巴巴将其 Apache Dubbo 概念与架构 7 内部 HSF系统与开源社区 Dubbo相融合,与社区一同推出了云原生时代的Dubbo3架构,截止 2022 年双十一结束,Dubbo3 已经在阿里巴巴内部全面取代 HSF 系统,包括电商核心、阿里云等一些核心系统已经全面运行在 Dubbo3 之上。2.为什么需要 Dubbo,它能做什么?按
10、照微服务架构的定义,采用它的组织能够很好的提高业务迭代效率与系统稳定性,但前提是要先能保证微服务按照期望的方式运行,要做到这一点需要解决服务拆分与定义、数据通信、地址发现、流量管理、数据一致性、系统容错能力等一系列问题。Dubbo 可以帮助解决如下微服务实践问题:微服务编程范式和工具 Dubbo 支持基于 IDL 或语言特定方式的服务定义,提供多种形式的服务调用形式(如同步、异步、流式等)高性能的 RPC 通信 Dubbo 帮助解决微服务组件之间的通信问题,提供了基于 HTTP、HTTP/2、TCP 等的多种高性能通信协议实现,并支持序列化协议扩展,在实现上解决网络连接管理、数据传输等基础问题
11、。微服务监控与治理 Dubbo 官方提供的服务发现、动态配置、负载均衡、流量路由等基础组件可以很好的帮助解决微服务基础实践的问题。除此之外,您还可以用 Admin 控制台监控微服务状态,通过周边生态完成限流降级、数据一致性、链路追踪等能力。Apache Dubbo 概念与架构 8 部署在多种环境 Dubbo 服务可以直接部署在容器、Kubernetes、Service Mesh 等多种架构下。活跃的社区 Dubbo 项目托管在 Apache 社区,有来自国际、国内的活跃贡献者维护着超 10 个生态项目,贡献者包括来自海外、阿里巴巴、工商银行、携程、蚂蚁、腾讯等知名企业技术专家,确保 Dubbo
12、 及时解决项目缺陷、需求及安全漏洞,跟进业界最新技术发展趋势。庞大的用户群体 Dubbo3 已在阿里巴巴成功取代 HSF 框架实现全面落地,成为阿里集团面向云原生时代的统一服务框架,庞大的用户群体是 Dubbo 保持稳定性、需求来源、先进性的基础。3.Dubbo 不是什么?不是应用开发框架的替代者 Dubbo 设计为让开发者以主流的应用开发框架的开发模式工作,它不是各个语言应用开发框架的替代者,如它不是 Spring/Spring Boot 的竞争者,当你使用 Spring时,Dubbo 可以无缝的与 Spring&Spring Boot 集成在一起。不仅仅只是一款 RPC 框架 Dubbo
13、提供了内置 RPC 通信协议实现,但它不仅仅是一款 RPC 框架。首先,它不绑定某一个具体的 RPC 协议,开发者可以在基于 Dubbo 开发的微服务体系中使用多种通信协议;其次,出了 RPC 通信之外,Dubbo 提供了丰富的服务治理能力与生态。Apache Dubbo 概念与架构 9 不是 gRPC 协议的替代品 Dubbo 支持基于 gRPC 作为底层通信协议,在 Dubbo 模式下使用 gRPC 可以带来更好的开发体验,享有统一的编程模型和更低的服务治理接入成本 不只有 Java 语言实现 自 Dubbo3 开始,Dubbo 提供了 Dubbo、Golang、Rust、Node.js
14、等多语言实现,未来会有更多的语言实现。二、核心架构 以上是 Dubbo 的工作原理图,从抽象架构上分为两层:服务治理抽象控制面和Dubbo 数据面。Apache Dubbo 概念与架构 10 服务治理控制面 服务治理控制面不是特指如注册中心类的单个具体组件,而是对 Dubbo 治理体系的抽象表达。控制面包含协调服务发现的注册中心、流量管控策略、Dubbo Admin控制台等,如果采用了 Service Mesh 架构则还包含 Istio 等服务网格控制面。Dubbo 数据面 数据面代表集群部署的所有 Dubbo 进程,进程之间通过 RPC 协议实现数据交换,Dubbo 定义了微服务应用开发与调
15、用规范并负责完成数据传输的编解码工作。?服务消费者(Dubbo Consumer),发起业务调用或 RPC 通信的 Dubbo 进程。?服务提供者(Dubbo Provider),接收业务调用或 RPC 通信的 Dubbo 进程。1.Dubbo 数据面 从数据面视角,Dubbo 帮助解决了微服务实践中的以下问题:Dubbo 作为服务开发框架约束了微服务定义、开发与调用的规范,定义了服务治理流程及适配模式。Dubbo 作为 RPC 通信协议实现解决服务间数据传输的编解码问题。Apache Dubbo 概念与架构 11 2.服务开发框架 微服务的目标是构建足够小的、自包含的、独立演进的、可以随时部
16、署运行的分布式应用程序,几乎每个语言都有类似的应用开发框架来帮助开发者快速构建此类微服务应用,比如 Java 微服务体系的 Spring Boot,它帮 Java 微服务开发者以最少的配置、最轻量的方式快速开发、打包、部署与运行应用。微服务的分布式特性,使得应用间的依赖、网络交互、数据传输变得更频繁,因此不同的应用需要定义、暴露或调用 RPC 服务,那么这些 RPC 服务如何定义、如何与应用开发框架结合、服务调用行为如何控制?这就是 Dubbo 服务开发框架的含义,Dubbo 在微服务应用开发框架之上抽象了一套 RPC 服务定义、暴露、调用与治理的编程范式,比如 Dubbo Java 作为服务
17、开发框架,当运行在 Spring 体系时就是构建在 Spring Boot 应用开发框架之上的微服务开发框架,并在此之上抽象了一套 RPC 服务定义、暴露、调用与治理的编程范式。Dubbo 作为服务开发框架包含的具体内容如下:Apache Dubbo 概念与架构 12 RPC 服务定义、开发范式 比如 Dubbo 支持通过 IDL 定义服务,也支持编程语言特有的服务开发定义方式,如通过 Java Interface 定义服务。RPC 服务发布与调用 API Dubbo 支持同步、异步、Reactive Streaming 等服务调用编程模式,还支持请求上下文 API、设置超时时间等。服务治理策
18、略、流程与适配方式等 作为服务框架数据面,Dubbo 定义了服务地址发现、负载均衡策略、基于规则的流量路由、Metrics 指标采集等服务治理抽象,并适配到特定的产品实现。想了解如何使用Dubbo微服务框架进行业务编码?可以参考Dubbo官网关于多语言 SDK 的详细介绍。3.通信协议 Dubbo 从设计上不绑定任何一款特定通信协议,HTTP/2、REST、gRPC、JsonRPC、Thrift、Hessian2 等几乎所有主流的通信协议,Dubbo 框架都可以提供支持。这样的 Protocol 设计模式给构建微服务带来了最大的灵活性,开发者可以根据需要如性能、通用型等选择不同的通信协议,不再
19、需要任何的代理来实现协议转换,甚至你还可以通过 Dubbo 实现不同协议间的迁移。Apache Dubbo 概念与架构 13 Dubbo Protocol 被设计支持扩展,您可以将内部私有协议适配到 Dubbo 框架上,进而将私有协议接入 Dubbo 体系,以享用 Dubbo 的开发体验与服务治理能力。比如 Dubbo3 的典型用户阿里巴巴,就是通过扩展支持 HSF 协议实现了内部 HSF 框架到 Dubbo3 框架的整体迁移。Dubbo 还支持多协议暴露,您可以在单个端口上暴露多个协议,Dubbo Server 能够自动识别并确保请求被正确处理,也可以将同一个 RPC 服务发布在不同的端口(
20、协议),为不同技术栈的调用方服务。Dubbo 提供了两款内置高性能 Dubbo2、Triple(兼容 gRPC)协议实现,以满足部分微服务用户对高性能通信的诉求,两者最开始都设计和诞生于阿里巴巴内部的高性能通信业务场景。Dubbo2 协议是在 TCP 传输层协议之上设计的二进制通信协议。Triple 则是基于 HTTP/2 之上构建的支持流式模式的通信协议,并且 Triple 完全兼容 gRPC 但实现上做了更多的符合 Dubbo 框架特点的优化。总的来说,Dubbo 对通信协议的支持具有以下特点:不绑定通信协议 提供高性能通信协议实现 支持流式通信模型 不绑定序列化协议 支持单个服务的多协议
21、暴露 支持单端口多协议发布 支持一个应用内多个服务使用不同通信协议 4.Dubbo 服务治理 服务开发框架解决了开发与通信的问题,但在微服务集群环境下,我们仍需要解决无状态服务节点动态变化、外部化配置、日志跟踪、可观测性、流量管理、高可用性、数据一致性等一系列问题,我们将这些问题统称为服务治理。Apache Dubbo 概念与架构 14 Dubbo 抽象了一套微服务治理模式并发布了对应的官方实现,服务治理可帮助简化微服务开发与运维,让开发者更专注在微服务业务本身。1)服务治理抽象 以下展示了 Dubbo 核心的服务治理功能定义。地址发现 Dubbo 服务发现具备高性能、支持大规模集群、服务级元
22、数据配置等优势,默认提供 Nacos、Zookeeper、Consul 等多种注册中心适配,与 Spring Cloud、Kubernetes Service 模型打通,支持自定义扩展。负载均衡 Dubbo 默认提供加权随机、加权轮询、最少活跃请求数优先、最短响应时间优先、一致性哈希和自适应负载等策略 Apache Dubbo 概念与架构 15 流量路由 Dubbo 支持通过一系列流量规则控制服务调用的流量分布与行为,基于这些规则可以实现基于权重的比例流量分发、灰度验证、金丝雀发布、按请求参数的路由、同区域优先、超时配置、重试、限流降级等能力。链路追踪 Dubbo 官方通过适配 OpenTel
23、emetry 提供了对 Tracing 全链路追踪支持,用户可以接入支持 OpenTelemetry 标准的产品如 Skywalking、Zipkin 等。另外,很多社区如 Skywalking、Zipkin 等在官方也提供了对 Dubbo 的适配。可观测性 Dubbo 实例通过 Prometheus 等上报 QPS、RT、请求次数、成功率、异常次数等多维度的可观测指标帮助了解服务运行状态,通过接入 Grafana、Admin 控制台帮助实现数据指标可视化展示。Dubbo 服务治理生态还提供了对 API 网关、限流降级、数据一致性、认证鉴权等场景的适配支持。2)Dubbo Admin Admi
24、n 控制台提供了 Dubbo 集群的可视化视图,通过 Admin 你可以完成集群的几乎所有管控工作。查询服务、应用或机器状态 创建项目、服务测试、文档管理等 查看集群实时流量、定位异常问题等 流量比例分发、参数路由等流量管控规则下发 Apache Dubbo 概念与架构 16 3)服务网格 将 Dubbo 接入 Istio 等服务网格治理体系。三、Dubbo 核心特点 1.快速易用 无论你是计划采用微服务架构开发一套全新的业务系统,还是准备将已有业务从单体架构迁移到微服务架构,Dubbo 框架都可以帮助到你。Dubbo 让微服务开发变 Apache Dubbo 概念与架构 17 得非常容易,它
25、允许你选择多种编程语言、使用任意通信协议,并且它还提供了一系列针对微服务场景的开发、测试工具帮助提升研发效率。1)多语言 SDK Dubbo 提供几乎所有主流语言的 SDK 实现,定义了一套统一的微服务开发范式。Dubbo 与每种语言体系的主流应用开发框架做了适配,总体编程方式、配置符合大多数开发者已有编程习惯。比如在 Java 语言体系下,你可以使用 dubbo-spring-boot-starter 来开发符合 Spring、Spring Boot 模式的微服务应用,开发 Dubbo 应用只是为 Spring Bean添加几个注解、完善 application.properties 配置文
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Apache Dubbo3源码深入解读 Dubbo3 源码 深入 解读
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【Stan****Shan】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【Stan****Shan】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。