收藏 分销(赏)

Apache Dubbo 微服务开发从入门到精通.pdf

上传人:Stan****Shan 文档编号:1239991 上传时间:2024-04-19 格式:PDF 页数:509 大小:80.77MB
下载 相关 举报
Apache Dubbo 微服务开发从入门到精通.pdf_第1页
第1页 / 共509页
Apache Dubbo 微服务开发从入门到精通.pdf_第2页
第2页 / 共509页
Apache Dubbo 微服务开发从入门到精通.pdf_第3页
第3页 / 共509页
Apache Dubbo 微服务开发从入门到精通.pdf_第4页
第4页 / 共509页
Apache Dubbo 微服务开发从入门到精通.pdf_第5页
第5页 / 共509页
点击查看更多>>
资源描述

1、封面页(此页面将由下图全覆盖,此为编辑稿中的示意,将在终稿 PDF 版中做更新)(待分享)目录 Apache Dubbo 微服务框架简介.6 一、Dubbo 简介.6 二、核心架构.9 三、Dubbo 核心特点.16 四、与 gRPC、Spring Cloud、Istio 的关系.28 快速开始,一个 Dubbo Spring Boot 示例.35 .35 一、快速运行示例.35 二、深入示例源码.45 配置手册.67 .67 一、配置概述.67 二、API 配置.73 三、Annotation 配置.81 四、XML 配置.86 五、配置工作原理.89 六、配置项手册.102 高级功能.12

2、9 .129 一、服务版本.129 二、服务分组.130 三、异步调用.136 四、服务端异步执行.141 五、上下文隐式传参.143 六、负载均衡.147 七、访问日志.150 八、泛化调用.151 九、调用上下文.160 十、服务延迟发布.161 通信协议.165 .165 一、Dubbo 通信协议设计概述.165 二、HTTP/2(Triple)协议.169 三、Dubbo2 协议.195 四、Rest 协议.202 五、gRPC 协议.224 服务发现与负载均衡.226 .226 一、Dubbo 服务发现设计.226 二、应用级服务发现机制详解.230 三、负载均衡机制.237 基于规

3、则的流量治理.253 .253 一、Dubbo 流量治理体系概览.253 二、条件路由规则.264 三、标签路由规则.266 四、脚本路由规则.269 五、动态配置规则.270 六、业务场景示例.274 可视化监测服务状态.278 .278 一、Admin 可视化控制台.278 二、微服务集群监控.283 三、全链路追踪.305 四、Qos 单机运维.314 部署 Dubbo 服务.333 .333 一、部署到传统虚拟机.333 二、部署到 Docker.339 三、部署到 Kubernetes.346 服务治理与生态.354 .354 一、限流降级.354 二、分布式事务.362 三、网关.

4、367 四、服务网格.393 五、注册中心.414 六、配置中心.434 七、元数据中心.447 迁移到 Dubbo3.465 .465 一、平滑升级到 Dubbo3 版本.465 二、迁移到应用级服务发现.469 三、迁移到 HTTP/2 协议.489 Apache Dubbo 微服务框架简介 6 Apache Dubbo 微服务框架简介 一、Dubbo 简介 Apache Dubbo 是一款易用、高性能的 WEB 和 RPC 框架,同时为构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具与最佳实践。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力,利

5、用Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。在云原生时代,Dubbo相继衍生出了Dubbo3、Proxyless Mesh等架构与解决方案,在易用性、超大规模微服务实践、云原生基础设施适配、安全性等几大方向上进行了全面升级。1.Dubbo 的开源故事 Apache Dubbo 最初是为了解决阿里巴巴内部的微服务架构问题而设计并开发的,在十多年的时间里,它在阿里巴巴公司内部的很多业务系统的到了非常广泛的应用。最早在 2008 年,阿里巴巴就将 Dubbo 捐献到开源社

6、区,它很快成为了国内开源服务框架选型的事实标准框架,得到了业界更广泛的应用。在 2017 年,Dubbo 被正式捐献 Apache 软件基金会并成为 Apache 顶级项目,开始了一段新的征程。Dubbo 被证实能很好的满足企业的大规模微服务实践,并且能有效降低微服务建设的开发与管理成本,不论是阿里巴巴还是工商银行、中国平安、携程、海尔等社区用户,它们都通过多年的大规模生产环境流量对 Dubbo 的稳定性与性能进行了充分验证。后来 Dubbo 在很多大企业内部衍生出了独立版本,比如在阿里巴巴内部就基于Dubbo3 衍生出了 HSF3,HSF 见证了阿里巴巴以电商业务为守的微服务系统的快速发展。

7、自云原生概念推广以来,各大厂商都开始拥抱开源标准实现,阿里巴巴将其 Apache Dubbo 微服务框架简介 7 内部 HSF系统与开源社区 Dubbo相融合,与社区一同推出了云原生时代的Dubbo3架构,截止 2022 年双十一结束,Dubbo3 已经在阿里巴巴内部全面取代 HSF 系统,包括电商核心、阿里云等一些核心系统已经全面运行在 Dubbo3 之上。2.为什么需要 Dubbo,它能做什么?按照微服务架构的定义,采用它的组织能够很好的提高业务迭代效率与系统稳定性,但前提是要先能保证微服务按照期望的方式运行,要做到这一点需要解决服务拆分与定义、数据通信、地址发现、流量管理、数据一致性、系

8、统容错能力等一系列问题。Dubbo 可以帮助解决如下微服务实践问题:微服务编程范式和工具 Dubbo 支持基于 IDL 或语言特定方式的服务定义,提供多种形式的服务调用形式(如同步、异步、流式等)高性能的 RPC 通信 Dubbo 帮助解决微服务组件之间的通信问题,提供了基于 HTTP、HTTP/2、TCP 等的多种高性能通信协议实现,并支持序列化协议扩展,在实现上解决网络连接管理、数据传输等基础问题。微服务监控与治理 Dubbo 官方提供的服务发现、动态配置、负载均衡、流量路由等基础组件可以很好的帮助解决微服务基础实践的问题。除此之外,您还可以用 Admin 控制台监控微服务状态,通过周边生

9、态完成限流降级、数据一致性、链路追踪等能力。Apache Dubbo 微服务框架简介 8 部署在多种环境 Dubbo 服务可以直接部署在容器、Kubernetes、Service Mesh 等多种架构下。活跃的社区 Dubbo 项目托管在 Apache 社区,有来自国际、国内的活跃贡献者维护着超 10 个生态项目,贡献者包括来自海外、阿里巴巴、工商银行、携程、蚂蚁、腾讯等知名企业技术专家,确保 Dubbo 及时解决项目缺陷、需求及安全漏洞,跟进业界最新技术发展趋势。庞大的用户群体 Dubbo3 已在阿里巴巴成功取代 HSF 框架实现全面落地,成为阿里集团面向云原生时代的统一服务框架,庞大的用户

10、群体是 Dubbo 保持稳定性、需求来源、先进性的基础。3.Dubbo 不是什么?不是应用开发框架的替代者 Dubbo 设计为让开发者以主流的应用开发框架的开发模式工作,它不是各个语言应用开发框架的替代者,如它不是 Spring/Spring Boot 的竞争者,当你使用 Spring时,Dubbo 可以无缝的与 Spring&Spring Boot 集成在一起。不仅仅只是一款 RPC 框架 Dubbo 提供了内置 RPC 通信协议实现,但它不仅仅是一款 RPC 框架。首先,它不绑定某一个具体的 RPC 协议,开发者可以在基于 Dubbo 开发的微服务体系中使用多种通信协议;其次,出了 RPC

11、 通信之外,Dubbo 提供了丰富的服务治理能力与生态。Apache Dubbo 微服务框架简介 9 不是 gRPC 协议的替代品 Dubbo 支持基于 gRPC 作为底层通信协议,在 Dubbo 模式下使用 gRPC 可以带来更好的开发体验,享有统一的编程模型和更低的服务治理接入成本 不只有 Java 语言实现 自 Dubbo3 开始,Dubbo 提供了 Dubbo、Golang、Rust、Node.js 等多语言实现,未来会有更多的语言实现。二、核心架构 以上是 Dubbo 的工作原理图,从抽象架构上分为两层:服务治理抽象控制面和Dubbo 数据面。Apache Dubbo 微服务框架简介

12、 10 服务治理控制面 服务治理控制面不是特指如注册中心类的单个具体组件,而是对 Dubbo 治理体系的抽象表达。控制面包含协调服务发现的注册中心、流量管控策略、Dubbo Admin控制台等,如果采用了 Service Mesh 架构则还包含 Istio 等服务网格控制面。Dubbo 数据面 数据面代表集群部署的所有 Dubbo 进程,进程之间通过 RPC 协议实现数据交换,Dubbo 定义了微服务应用开发与调用规范并负责完成数据传输的编解码工作。?服务消费者(Dubbo Consumer),发起业务调用或 RPC 通信的 Dubbo 进程。?服务提供者(Dubbo Provider),接收

13、业务调用或 RPC 通信的 Dubbo 进程。1.Dubbo 数据面 从数据面视角,Dubbo 帮助解决了微服务实践中的以下问题:Dubbo 作为服务开发框架约束了微服务定义、开发与调用的规范,定义了服务治理流程及适配模式。Dubbo 作为 RPC 通信协议实现解决服务间数据传输的编解码问题。Apache Dubbo 微服务框架简介 11 2.服务开发框架 微服务的目标是构建足够小的、自包含的、独立演进的、可以随时部署运行的分布式应用程序,几乎每个语言都有类似的应用开发框架来帮助开发者快速构建此类微服务应用,比如 Java 微服务体系的 Spring Boot,它帮 Java 微服务开发者以最

14、少的配置、最轻量的方式快速开发、打包、部署与运行应用。微服务的分布式特性,使得应用间的依赖、网络交互、数据传输变得更频繁,因此不同的应用需要定义、暴露或调用 RPC 服务,那么这些 RPC 服务如何定义、如何与应用开发框架结合、服务调用行为如何控制?这就是 Dubbo 服务开发框架的含义,Dubbo 在微服务应用开发框架之上抽象了一套 RPC 服务定义、暴露、调用与治理的编程范式,比如 Dubbo Java 作为服务开发框架,当运行在 Spring 体系时就是构建在 Spring Boot 应用开发框架之上的微服务开发框架,并在此之上抽象了一套 RPC 服务定义、暴露、调用与治理的编程范式。D

15、ubbo 作为服务开发框架包含的具体内容如下:Apache Dubbo 微服务框架简介 12 RPC 服务定义、开发范式 比如 Dubbo 支持通过 IDL 定义服务,也支持编程语言特有的服务开发定义方式,如通过 Java Interface 定义服务。RPC 服务发布与调用 API Dubbo 支持同步、异步、Reactive Streaming 等服务调用编程模式,还支持请求上下文 API、设置超时时间等。服务治理策略、流程与适配方式等 作为服务框架数据面,Dubbo 定义了服务地址发现、负载均衡策略、基于规则的流量路由、Metrics 指标采集等服务治理抽象,并适配到特定的产品实现。想了

16、解如何使用Dubbo微服务框架进行业务编码?可以参考Dubbo官网关于多语言 SDK 的详细介绍。3.通信协议 Dubbo 从设计上不绑定任何一款特定通信协议,HTTP/2、REST、gRPC、JsonRPC、Thrift、Hessian2 等几乎所有主流的通信协议,Dubbo 框架都可以提供支持。这样的 Protocol 设计模式给构建微服务带来了最大的灵活性,开发者可以根据需要如性能、通用型等选择不同的通信协议,不再需要任何的代理来实现协议转换,甚至你还可以通过 Dubbo 实现不同协议间的迁移。Apache Dubbo 微服务框架简介 13 Dubbo Protocol 被设计支持扩展,

17、您可以将内部私有协议适配到 Dubbo 框架上,进而将私有协议接入 Dubbo 体系,以享用 Dubbo 的开发体验与服务治理能力。比如 Dubbo3 的典型用户阿里巴巴,就是通过扩展支持 HSF 协议实现了内部 HSF 框架到 Dubbo3 框架的整体迁移。Dubbo 还支持多协议暴露,您可以在单个端口上暴露多个协议,Dubbo Server 能够自动识别并确保请求被正确处理,也可以将同一个 RPC 服务发布在不同的端口(协议),为不同技术栈的调用方服务。Dubbo 提供了两款内置高性能 Dubbo2、Triple(兼容 gRPC)协议实现,以满足部分微服务用户对高性能通信的诉求,两者最开始

18、都设计和诞生于阿里巴巴内部的高性能通信业务场景。Dubbo2 协议是在 TCP 传输层协议之上设计的二进制通信协议。Triple 则是基于 HTTP/2 之上构建的支持流式模式的通信协议,并且 Triple 完全兼容 gRPC 但实现上做了更多的符合 Dubbo 框架特点的优化。总的来说,Dubbo 对通信协议的支持具有以下特点:不绑定通信协议 提供高性能通信协议实现 支持流式通信模型 不绑定序列化协议 支持单个服务的多协议暴露 支持单端口多协议发布 支持一个应用内多个服务使用不同通信协议 4.Dubbo 服务治理 服务开发框架解决了开发与通信的问题,但在微服务集群环境下,我们仍需要解决无状态

19、服务节点动态变化、外部化配置、日志跟踪、可观测性、流量管理、高可用性、数据一致性等一系列问题,我们将这些问题统称为服务治理。Apache Dubbo 微服务框架简介 14 Dubbo 抽象了一套微服务治理模式并发布了对应的官方实现,服务治理可帮助简化微服务开发与运维,让开发者更专注在微服务业务本身。1)服务治理抽象 以下展示了 Dubbo 核心的服务治理功能定义。地址发现 Dubbo 服务发现具备高性能、支持大规模集群、服务级元数据配置等优势,默认提供 Nacos、Zookeeper、Consul 等多种注册中心适配,与 Spring Cloud、Kubernetes Service 模型打通

20、,支持自定义扩展。负载均衡 Dubbo 默认提供加权随机、加权轮询、最少活跃请求数优先、最短响应时间优先、一致性哈希和自适应负载等策略 Apache Dubbo 微服务框架简介 15 流量路由 Dubbo 支持通过一系列流量规则控制服务调用的流量分布与行为,基于这些规则可以实现基于权重的比例流量分发、灰度验证、金丝雀发布、按请求参数的路由、同区域优先、超时配置、重试、限流降级等能力。链路追踪 Dubbo 官方通过适配 OpenTelemetry 提供了对 Tracing 全链路追踪支持,用户可以接入支持 OpenTelemetry 标准的产品如 Skywalking、Zipkin 等。另外,很

21、多社区如 Skywalking、Zipkin 等在官方也提供了对 Dubbo 的适配。可观测性 Dubbo 实例通过 Prometheus 等上报 QPS、RT、请求次数、成功率、异常次数等多维度的可观测指标帮助了解服务运行状态,通过接入 Grafana、Admin 控制台帮助实现数据指标可视化展示。Dubbo 服务治理生态还提供了对 API 网关、限流降级、数据一致性、认证鉴权等场景的适配支持。2)Dubbo Admin Admin 控制台提供了 Dubbo 集群的可视化视图,通过 Admin 你可以完成集群的几乎所有管控工作。查询服务、应用或机器状态 创建项目、服务测试、文档管理等 查看集

22、群实时流量、定位异常问题等 流量比例分发、参数路由等流量管控规则下发 Apache Dubbo 微服务框架简介 16 3)服务网格 将 Dubbo 接入 Istio 等服务网格治理体系。三、Dubbo 核心特点 1.快速易用 无论你是计划采用微服务架构开发一套全新的业务系统,还是准备将已有业务从单体架构迁移到微服务架构,Dubbo 框架都可以帮助到你。Dubbo 让微服务开发变 Apache Dubbo 微服务框架简介 17 得非常容易,它允许你选择多种编程语言、使用任意通信协议,并且它还提供了一系列针对微服务场景的开发、测试工具帮助提升研发效率。1)多语言 SDK Dubbo 提供几乎所有主

23、流语言的 SDK 实现,定义了一套统一的微服务开发范式。Dubbo 与每种语言体系的主流应用开发框架做了适配,总体编程方式、配置符合大多数开发者已有编程习惯。比如在 Java 语言体系下,你可以使用 dubbo-spring-boot-starter 来开发符合 Spring、Spring Boot 模式的微服务应用,开发 Dubbo 应用只是为 Spring Bean添加几个注解、完善 application.properties 配置文件。2)任意通信协议 Dubbo 微服务间远程通信实现细节,支持 HTTP、HTTP/2、gRPC、TCP 等所有主流通信协议。与普通 RPC 框架不同,D

24、ubbo 不是某个单一 RPC 协议的实现,它通过上层的 RPC 抽象可以将任意 RPC 协议接入 Dubbo 的开发、治理体系。多协议支持让用户选型,多协议迁移、互通等变得更灵活。Apache Dubbo 微服务框架简介 18 3)加速微服务开发 项目脚手架 项目脚手架 Dubbo 项目创建、依赖管理更容易。比如通过如下可视化界面,勾选 Dubbo 版本、Zookeeper 注册中心以及必要的微服务生态选项后,一个完整的 Dubbo 项目模板就可以自动生成,接下来基于脚手架项目添加业务逻辑就可以了。Apache Dubbo 微服务框架简介 19 开发测试 相比于单体应用,微服务分布式的特性会

25、让不同组织之间的研发协同变得困难,这时我们需要有效的配套工具,用来提升整体的微服务研发效率。Dubbo 从内核设计和实现阶段就考虑了如何解决开发、测试与运维问题,配合官方提供的生态工具,可以实现服务测试、服务 Mock、文档管理、单机运维等能力,并通过 Dubbo Admin 控制台将所有操作都可视化的展现出来。2.超高性能 Dubbo 被设计用于解决阿里巴巴超大规模的电商微服务集群实践,并在各个行业头部企业经过多年的十万、百万规模的微服务实践检验,因此,Dubbo 在通信性能、稳定性方面具有无可比拟的优势,非常适合构建近乎无限水平伸缩的微服务集群,这也是 Dubbo 从实践层面优于业界很多同

26、类的产品的巨大优势。1)高性能数据传输 Dubbo 内置支持 Dubbo2、Triple 两款高性能通信协议。其中 Apache Dubbo 微服务框架简介 20 Dubbo2 是基于 TCP 传输协议之上构建的二进制私有 RPC 通信协议,是一款非常简单、紧凑、高效的通信协议。Triple 是基于 HTTP/2 的新一代 RPC 通信协议,在网关穿透性、通用性以及Streaming 通信上具备优势,Triple 完全兼容 gRPC 协议。Dubbo2&Triple benchmark 性能指标:Dubbo 协议在不同版本的实现对比 020004000600080001000012000140

27、0016000180002000022000240002600028000300003200034000QPSvoidpojopojo listMethod Types Dubbo3Dubbo2Dubbo Protocol Apache Dubbo 微服务框架简介 21 Triple vs Dubbo 2)构建可伸缩的微服务集群 业务增长带来了集群规模的快速增长,而集群规模的增长会对服务治理架构带来挑战:注册中心的存储容量瓶颈 节点动态变化带来的地址推送与解析效率下降 消费端存储大量网络地址的资源开销 复杂的网络链接管理 高峰期的流量无损上下线 异常节点的自动节点管理 以上内容直接关系到微服务

28、集群的稳定性,因此很容易成为影响集群和业务增长的瓶颈,集群规模越大,问题带来的影响面也就被进一步放大。很多开发者可能会想只有几个应用而已,当前不需要并不关心集群规模,但作为技术架构选型的关键因素之一,我们还是要充分考虑微服务集群未来的可伸缩性。并且基于对业界大量微服务架构和框架实现的调研,一些产品的性能瓶颈点可能很快就会到来(部分产品所能高效支持的瓶颈节点规模阈值都是比较低的,比如几十个应用、数百个节点)。0200040006000800010000120001400016000180002000022000240002600028000QPSvoidpojopojo listMethod T

29、ypes Dubbo3+ProtobufTriple+ProtobufTriple+Hessian+ProtobufDubbo Protocol Apache Dubbo 微服务框架简介 22 服务发现模型内存占用变化 Dubbo3 接口级服务发现模型,常驻内存较 2.x 版本下降约 50%Dubbo3 应用级服务发现模型,常驻内存较 2.x 版本下降约 75%服务发现模型 GC 变化 5625533131517406063341600200400600800Memory Consumption2.62.73.0 Interface3.0 AppDubbo Version Tested Use

30、d Memory After FGC(MB)Used Tenured After FGC(MB)Service Discovery 050100150200250300350400450500550600650700750800850900GC Times2.62.73.0 Interface3.0 AppDubbo Version Tested YGC FGCService Discovery Apache Dubbo 微服务框架简介 23 Dubbo3 接口级服务发现模型,YGC 次数 2.x 版本大幅下降,从数百次下降到十几次。Dubbo3 应用级服务发现模型,FGC 次数 2.x 版本

31、大幅下降,从数百次下降到零次。Dubbo 的优势在于近乎无限水平扩容的集群规模,在阿里巴巴双十一场景万亿次调用的实践检验,通过本书后续内容了解 Dubbo 构建生产可用的、可伸缩的大规模微服务集群背后的原理。3.服务治理 1)流量管控 在地址发现和负载均衡机制之外,Dubbo 丰富的流量管控规则可以控制服务间的流量走向和 API 调用,基于这些规则可以实现在运行期动态的调整服务行为如超时时间、重试次数、限流参数等,通过控制流量分布可以实现 A/B 测试、金丝雀发布、多版本按比例流量分配、条件匹配路由、黑白名单等,提高系统稳定性。Dubbo 流量管控能解决哪些问题?场景一:搭建多套独立的逻辑测试

32、环境。场景二:搭建一套完全隔离的线上灰度环境用来部署新版本服务。Apache Dubbo 微服务框架简介 24 场景三:金丝雀发布 场景四:同区域优先。当应用部署在多个不同机房/区域的时候,优先调用同机房/区域的服务提供者,避免了跨区域带来的网络延时,从而减少了调用的响应时间。Apache Dubbo 微服务框架简介 25 除了以上几个典型场景,我们还可以基于 Dubbo 支持的流量管控规则实现微服务场景中更丰富的流量管控,如:动态调整超时时间 服务重试 访问日志 同区域优先 灰度环境隔离 参数路由 按权重比例分流 金丝雀发布 服务降级 实例临时拉黑 指定机器导流 可以在 Dubbo 官网【流

33、量管理任务】中了解以上实践场景细节。背后的规则定义与工作原理在文档中也有相应解释。2)微服务生态 围绕 Dubbo 我们构建了完善的微服务治理生态,对于绝大多数服务治理需求,通过简单几行配置即可开启。对于官方尚未适配的组件或者用户内部系统,也可以通过 Dubbo 扩展机制轻松适配。Apache Dubbo 微服务框架简介 26 3)可视化控制台 Dubbo Admin 是 Dubbo 官方提供的可视化 Web 交互控制台,基于 Admin 你可以实时监测集群流量、服务部署状态、排查诊断问题。4)安全体系 Dubbo 支持基于 TLS 的 HTTP、HTTP/2、TCP 数据传输通道,并且提供认

34、证、鉴权策略,让开发者实现更细粒度的资源访问控制。5)服务网格 基于 Dubbo 开发的服务可以透明的接入 Istio 等服务网格体系,Dubbo 支持基于Envoy 的流量拦截方式,也支持更加轻量的 Proxyless Mesh 部署模式。4.生产环境检验 Apache Dubbo 是一款有着数以万计企业用户的国际化开源项目,经过了多年大规模集群生产环境的检验,影响了数百万开发者,带动了大量微服务开源生态发展。Dubbo 从企业实践中孵化并走向开源,又迅速在开源社区获得了成功,大量的生产实践用户是 Dubbo 长期保持先进性、稳定性和活跃度的核心驱动力。Apache Dubbo 微服务框架简

35、介 27 1)Dubbo 在阿里巴巴的应用 Dubbo 设计用于解决阿里巴巴内部复杂的电商微服务集群的开发和治理问题,在2020 年,阿里巴巴与 Apache Dubbo 社区共同合作,基于 Dubbo2&HSF2 发布了面向云原生架构的下一代服务框架Dubbo3,目前,Dubbo3 已经完全取代 HSF、Dubbo2 成为阿里巴巴内部统一的服务框架,成功的跑在了数十万应用、数百万节点的双十一集群之上。Dubbo3 吸取了 HSF2 框架所有大规模微服务集群的治理经验,解决了 Dubbo2 架构设计上长期积累的一些缺陷,同时增加了一系列面向云原生架构的新特性。阿里巴巴结合 HSF 框架的大规模

36、集群实践经验,基于 Apache Dubbo、开源社区需求等推出了面向云原生架构的全新服务框架Dubbo3,Dubbo3 在完全兼容之前 API 模式的情况下,完成了彻底的云原生架构升级。Dubbo 的高度可扩展能力是其广泛适用的重要前提,阿里巴巴基于 Dubbo3 内核维护了一套内部特有的适配插件体系以实现平滑升级,这包括注册中心扩展、路由组件扩展、监控组件扩展等。Apache Dubbo 微服务框架简介 28 几乎所有主流云厂商、主流微服务开源社区都提供了 Dubbo 适配或托管服务。2)更多案例 据 Wanted、Whos、Using Dubbo 统计,Dubbo 已知部分典型用户包括:

37、网联清算、银联商务、中国人寿、中国平安、中国银行、人民银行、工商银行、招商证券、平安保险、中国人寿、阿里巴巴、滴滴出行、携程网、小米、斗鱼直播、瓜子二手车、金蝶、亚信科技、中国电信、文思海辉、中科软、科大讯飞、恒生电子、红星凯美龙、海尔、新东方、软通动力、中远海运、昆明航空、中通快递、顺丰科技、普华永道等。四、与 gRPC、Spring Cloud、Istio 的关系 很多开发者经常会问到 Apache Dubbo 与 Spring Cloud、gRPC 以及一些 Service Mesh 项目如 Istio 的关系,要解释清楚它们的关系并不困难,你只需要跟随这篇文章和 Dubbo 文档做一些

38、更深入的了解,但总的来说,它们之间有些能力是重合的,但在一些场景你可以把它们放在一起使用。虽然这是一篇 Dubbo 维护者写的文档,我们仍会尽力将 Dubbo 与其他组件之间的联系与差异客观、透明的展现出来,但考虑到每个人对不同产品的熟悉程度不一,这里的个别表述可能并不完全准确,希望能给开发者带来帮助。1.Dubbo 与 Spring Cloud 从下图我们可以看出,Dubbo 和 Spring Cloud 有很多相似之处,它们都在整个架构图的相同位置并提供一些相似的功能。Apache Dubbo 微服务框架简介 29 Dubbo 和 Spring Cloud 都侧重在对分布式系统中常见问题模

39、式的抽象(如服务发现、负载均衡、动态配置等),同时对每一个问题都提供了配套组件实现,形成了一套微服务整体解决方案,让使用 Dubbo 及 Spring Cloud 的用户在开发微服务应用时可以专注在业务逻辑开发上。Dubbo 和 Spring Cloud 都完全兼容 Spring 体系的应用开发模式,Dubbo 对Spring 应用开发框架、Spring Boot 微服务框架都做了很好的适配,由于 Spring Cloud 出自 Spring 体系,在这一点上自然更不必多说。虽然两者有很多相似之处,但由于它们在诞生背景与架构设计上的巨大差异,两者在性能、适用的微服务集群规模、生产稳定性保障、服

40、务治理等方面都有很大差异。Spring Cloud 的优势在于:同样都支持 Sprig 开发体系的情况下,Spring Cloud 得到更多的原生支持。对一些常用的微服务模式做了抽象如服务发现、动态配置、异步消息等,同时包括一些批处理任务、定时任务、持久化数据访问等领域也有涉猎。基于HTTP的通信模式,加上相对比较完善的入门文档和演示demo和starters,让开发者在第一感觉上更易于上手。Apache Dubbo 微服务框架简介 30 Spring Cloud 的问题有:只提供抽象模式的定义不提供官方稳定实现,开发者只能寻求类似 Netflix、Alibaba、Azure 等不同厂商的实现

41、套件,而每个厂商支持的完善度、稳定性、活跃度各异。有微服务全家桶却不是能拿来就用的全家桶,demo 上手容易,但落地推广与长期使用的成本非常高。欠缺服务治理能力,尤其是流量管控方面如负载均衡、流量路由方便能力都比较弱。编程模型与通信协议绑定 HTTP,在性能、与其他 RPC 体系互通上存在障碍。总体架构与实现只适用于小规模微服务集群实践,当集群规模增长后就会遇到地址推送效率、内存占用等各种瓶颈的问题,但此时迁移到其他体系却很难实现。很多微服务实践场景的问题需要用户独自解决,比如优雅停机、启动预热、服务测试,再比如双注册、双订阅、延迟注册、服务按分组隔离、集群容错等。而以上这些点,都是 Dubb

42、o 的优势所在:完全支持 Spring&Spring Boot 开发模式,同时在服务发现、动态配置等基础模式上提供与 Spring Cloud 对等的能力。是企业级微服务实践方案的整体输出,Dubbo 考虑到了企业微服务实践中会遇到的各种问题如优雅上下线、多注册中心、流量管理等,因此其在生产环境的长期维护成本更低。Apache Dubbo 微服务框架简介 31 在通信协议和编码上选择更灵活,包括 rpc 通信层协议如 HTTP、HTTP/2(Triple、gRPC)、TCP 二进制协议、rest 等,序列化编码协议 Protobuf、JSON、Hessian2等,支持单端口多协议。Dubbo

43、从设计上突出服务服务治理能力,如权重动态调整、标签路由、条件路由等,支持 Proxyless 等多种模式接入 Service Mesh 体系。高性能的 RPC 协议编码与实现。Dubbo 是在超大规模微服务集群实践场景下开发的框架,可以做到百万实例规模的集群水平扩容,应对集群增长带来的各种问题。Dubbo 提供 Java 外的多语言实现,使得构建多语言异构的微服务体系成为可能。如果您的目标是构建企业级应用,并期待在未来的持久维护中能够更省心、更稳定,我们建议你能更深入的了解 Dubbo 的使用和其提供的能力。备注:Dubbo 在入门资料上的欠缺是对比 Spring Cloud 的一个劣势,这体

44、现在依赖配置管理、文档、demo 示例完善度上,当前整个社区在重点投入这一部分的建设,期望能降低用户在第一天体验和学习 Dubbo 时的门槛,不让开发者因为缺乏文档而错失 Dubbo 这样一款优秀的产品。2.Dubbo 与 gRPC Dubbo 与 gRPC 最大的差异在于两者的定位上:gRPC 定位为一款 RPC 框架,Google 推出它的核心目标是定义云原生时代的rpc 通信规范与标准实现。Apache Dubbo 微服务框架简介 32 Dubbo定位是一款微服务开发框架,它侧重解决微服务实践从服务定义、开发、通信到治理的问题,因此 Dubbo 同时提供了 RPC 通信、与应用开发框架的

45、适配、服务治理等能力。Dubbo 不绑定特定的通信协议,即 Dubbo 服务间可通过多种 RPC 协议通信并支持灵活切换。因此,你可以在 Dubbo 开发的微服务中选用 gRPC 通信,Dubbo 完全兼容 gRPC,并将 gRPC 设计为内置原生支持的协议之一。如果您看中基于 HTTP/2 的通信协议、基于 Protobuf 的服务定义,并基于此决定选型 gRPC 作为微服务开发框架,那很有可能您会在未来的微服务业务开发中遇到障碍,这主要源于 gRPC 没有为开发者提供以下能力:缺乏与业务应用框架集成的开发模式,用户需要基于 gRPC 底层的 RPC API 定义、发布或调用微服务,中间可能

46、还有与业务应用开发框架整合的问题。缺乏微服务周边生态扩展与适配,如服务发现、限流降级、链路追踪等没有多少可供选择的官方实现,且扩展起来非常困难。缺乏服务治理能力,作为一款 rpc 框架,缺乏对服务治理能力的抽象。因此,gRPC 更适合作为底层的通信协议规范或编解码包,而 Dubbo 则可用作微服务整体解决方案。对于 gRPC 协议,我们推荐的使用模式 Dubbo+gRPC 的组合,这个时候,gRPC 只是隐藏在底层的一个通信协议,不被微服务开发者感知,开发者基于 Dubbo 提供的 API 和配置开发服务,并基于 dubbo 的服务治理能力治理服务,在未来,开发者还能使用 Dubbo 生态还开

47、源的 IDL 配套工具管理服务定义与发布。Apache Dubbo 微服务框架简介 33 如果我们忽略 gRPC 在应用开发框架侧的空白,只考虑如何给 gRPC 带来服务治理能力,则另一种可以采用的模式就是在 Service Mesh 架构下使用 gRPC,这就引出了我们下一小节要讨论的内容:Dubbo 与 Service Mesh 架构的关系。3.Dubbo 与 Istio Service Mesh 是近年来在云原生背景下诞生的一种微服务架构,在 Kubernetes 体系下,让微服务开发中的更多能力如流量拦截、服务治理等下沉并成为基础设施,让微服务开发、升级更轻量。Istio 是 Serv

48、ice Mesh 的开源代表实现,它从部署架构上分为数据面与控制面,从这一点上与 Dubbo 总体架构是基本一致的,Istio 带来的主要变化在于:数据面,Istio 通过引入 Sidecar 实现了对服务流量的透明拦截,Sidecar 通常是与 Dubbo 等开发的传统微服务组件部署在一起。控制面,将之前抽象的服务治理中心聚合为一个具有统一实现的具体组件,并实现了与底层基础设施如 Kubernetes 无缝适配。Dubbo 已经实现了对 Istio 体系的全面接入,可以用 Istio 控制面治理 Dubbo 服务,而在数据面部署架构上,针对 Sidecar 引入的复杂性与性能问题,Dubbo

49、 还支持无代理的 Proxyless 模式。除此之外,Dubbo Mesh 体系还解决了 Istio 架构落地过程中的很多问题,包括提供更灵活的数据面部署架构、更低的迁移成本等。Apache Dubbo 微服务框架简介 34 从数据面的视角,Dubbo 支持如下两种开发和部署模式,可以通过 Istio、Consul、Linkerd 等控制面组件实现对数据面服务的治理。Proxy 模式,Dubbo 与 Envoy 一起部署,Dubbo 作为编程框架&协议通信组件存在,流量管控由 Envoy 与 Istio 控制面交互实现。Proxyless 模式,Dubbo 进程保持独立部署,Dubbo 通过标

50、准 xDS 协议直接接入 Istio 等控制面组件。从控制面视角,Dubbo 可接入原生 Istio 标准控制面和规则体系,而对于一些 Dubbo老版本用户,Dubbo Mesh 提供了平滑迁移方案,具体请查看 Dubbo Mesh 服务网格。快速开始,一个 Dubbo Spring Boot 示例 35 快速开始,一个 Dubbo Spring Boot 示例 一、快速运行示例 1.背景 Dubbo 作为一款微服务框架,最重要的是向用户提供跨进程的 RPC 远程调用能力。如上图所示,Dubbo 的服务消费者(Consumer)通过一系列的工作将请求发送给服务提供者(Provider)。为了实

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 研究报告 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服