Dubbo—核心优势

一、快速易用

无论你是计划采用微服务架构开发一套全新的业务系统,还是准备将已有业务从单体架构迁移到微服务架构,Dubbo 框架都可以帮助到你。Dubbo 让微服务开发变得非常容易,它允许你选择多种编程语言、使用任意通信协议,并且它还提供了一系列针对微服务场景的开发、测试工具帮助提升研发效率。

1、多语言 SDK

Dubbo 提供几乎所有主流语言的 SDK 实现,定义了一套统一的微服务开发范式。Dubbo 与每种语言体系的主流应用开发框架做了适配,总体编程方式、配置符合大多数开发者已有编程习惯。

比如在 Java 语言体系下,你可以使用 dubbo-spring-boot-starter 来开发符合 Spring、Spring Boot 模式的微服务应用,开发 Dubbo 应用只是为 Spring Bean 添加几个注解、完善 application.properties 配置文件。

sdk

2、任意通信协议

Dubbo 微服务间远程通信实现细节,支持 HTTP、HTTP/2、gRPC、TCP 等所有主流通信协议。与普通 RPC 框架不同,Dubbo 不是某个单一 RPC 协议的实现,它通过上层的 RPC 抽象可以将任意 RPC 协议接入 Dubbo 的开发、治理体系。

多协议支持让用户选型,多协议迁移、互通等变得更灵活。

protocols

3、加速微服务开发

3.1 项目脚手架

项目脚手架 项目脚手架让 Dubbo 项目创建、依赖管理更容易。 

比如通过如下可视化界面,勾选 Dubbo 版本、Zookeeper 注册中心以及必要的微服务生态选项后,一个完整的 Dubbo 项目模板就可以自动生成,接下来基于脚手架项目添加业务逻辑就可以了。

脚手架示例图

脚手架示例图

3.2 开发测试

相比于单体应用,微服务分布式的特性会让不同组织之间的研发协同变得困难,这时我们需要有效的配套工具,用来提升整体的微服务研发效率。

Dubbo 从内核设计和实现阶段就考虑了如何解决开发、测试与运维问题,比如 Dubbo RPC 协议均支持 curl 访问,让开发协作更简单;配合官方提供的生态工具,可以实现服务测试、服务 Mock、文档管理、单机运维等能力,并通过 Dubbo Admin 控制台将所有操作都可视化的展现出来。

二、超高性能

Dubbo 被设计用于解决阿里巴巴超大规模的电商微服务集群实践,并在各个行业头部企业经过多年的十万、百万规模的微服务实践检验,因此,Dubbo 在通信性能、稳定性方面具有无可比拟的优势,非常适合构建近乎无限水平伸缩的微服务集群,这也是 Dubbo 从实践层面优于业界很多同类的产品的巨大优势。

高性能数据传输

Dubbo 内置支持 Dubbo2、Triple 两款高性能通信协议。其中

  • Dubbo2 是基于 TCP 传输协议之上构建的二进制私有 RPC 通信协议,是一款非常简单、紧凑、高效的通信协议。
  • Triple 是基于 HTTP/2 的新一代 RPC 通信协议,在网关穿透性、通用性以及 Streaming 通信上具备优势,Triple 完全兼容 gRPC 协议。

以下是基于 Dubbo 3.2 版本得出的压测指标数据,您也可以通过 dubbo-benchmark 项目自行压测。

TCP protocol benchmark

对比 Dubbo 2.x 及早期 3.x 版本

  • 较小报文场景 createUser、getUser 下,提升率约 180%。
  • 极小报文 existUser(仅一个boolean值)下提升率约 24%
  • 较大报文 listUser 提升率最高,达到了 1000%!

Triple protocol benchmark

  • 较小报文场景 createUser、existUser、getUser 下,较 3.1 版本性能提升约 40-45%,提升后的性能与 gRPC 同场景的性能基本持平。
  • 较大报文场景 listUser 下较 3.1 版本提升了约 17%,相较于同场景下的 gRPC 低 11%。

了解更多

  • 通信协议
  • Benchmark 指标 (不定期更新)

构建可伸缩的微服务集群

业务增长带来了集群规模的快速增长,而集群规模的增长会对服务治理架构带来挑战:

  • 注册中心的存储容量瓶颈
  • 节点动态变化带来的地址推送与解析效率下降
  • 消费端存储大量网络地址的资源开销
  • 复杂的网络链接管理
  • 高峰期的流量无损上下线
  • 异常节点的自动节点管理

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

Dubbo 的优势在于近乎无限水平扩容的集群规模,在阿里巴巴双十一场景万亿次调用的实践检验,通过以下内容了解 Dubbo 构建生产可用的、可伸缩的大规模微服务集群背后的原理:

  • Dubbo3 服务发现
  • 流量管控

智能化流量调度

Dubbo3 内置了具备自适应感知集群负载状态、智能调节流量分布的限流与调度算法实现,从消费者、提供者两个不同视角智能调整流量分布,最大限度确保将流量调度到具有最佳处理能力的实例上,从而提升整个集群的吞吐量与稳定性。

自适应负载均衡

自适应负载均衡是从消费者视角考虑如何将请求分配到当前具有最优处理能力的机器实例。Dubbo3 新引入了两种负载均衡算法

  • 一种是基于公平性考虑的单纯 P2C 算法
  • 另一种是基于自适应的方法 adaptive,其试图自适应的衡量 provider 端机器的吞吐能力,然后将流量尽可能分配到吞吐能力高的机器上,以提高系统整体的性能。

自适应限流

与负载均衡运行在消费者端不同的是,限流功能运行在提供者端。其作用是限制提供端实例处理并发任务时的最大数量。从理论上讲,服务端机器的处理能力是存在上限的,因此当并发请求量达到或接近上限时,拒绝掉一部分请求反而是更好的选择。相比于人为提前设置静态最大并发值,自适应限流算法可以动态调整服务端机器的最大并发值,使其可以在保证机器不过载的前提下,尽可能多的处理接收到的请求。

三、服务治理

流量管控

在地址发现和负载均衡机制之外,Dubbo 丰富的流量管控规则可以控制服务间的流量走向和 API 调用,基于这些规则可以实现在运行期动态的调整服务行为如超时时间、重试次数、限流参数等,通过控制流量分布可以实现 A/B 测试、金丝雀发布、多版本按比例流量分配、条件匹配路由、黑白名单等,提高系统稳定性。

Dubbo 流量管控能解决哪些问题

场景一:搭建多套独立的逻辑测试环境。

场景二:搭建一套完全隔离的线上灰度环境用来部署新版本服务。

场景三:金丝雀发布

场景四:同区域优先。当应用部署在多个不同机房/区域的时候,优先调用同机房/区域的服务提供者,避免了跨区域带来的网络延时,从而减少了调用的响应时间。

除了以上几个典型场景,我们还可以基于 Dubbo 支持的流量管控规则实现微服务场景中更丰富的流量管控,如:

  • 动态调整超时时间
  • 服务重试
  • 访问日志
  • 同区域优先
  • 灰度环境隔离
  • 参数路由
  • 按权重比例分流
  • 金丝雀发布
  • 服务降级
  • 实例临时拉黑
  • 指定机器导流

可以在 流量管理任务 中了解以上实践场景细节。背后的规则定义与工作原理请参见 Dubbo 流量管控规则设计与定义。。

微服务生态

围绕 Dubbo 我们构建了完善的微服务治理生态,对于绝大多数服务治理需求,通过简单几行配置即可开启。对于官方尚未适配的组件或者用户内部系统,也可以通过 Dubbo 扩展机制轻松适配。

可视化控制台

Dubbo Admin 是 Dubbo 官方提供的可视化 Web 交互控制台,基于 Admin 你可以实时监测集群流量、服务部署状态、排查诊断问题。

安全体系

Dubbo 支持基于 TLS 的 HTTP、HTTP/2、TCP 数据传输通道,并且提供认证、鉴权策略,让开发者实现更细粒度的资源访问控制。

服务网格

基于 Dubbo 开发的服务可以透明的接入 Istio 等服务网格体系,Dubbo 支持基于 Envoy 的流量拦截方式,也支持更加轻量的 Proxyless Mesh 部署模式。

admin

猜你喜欢

转载自blog.csdn.net/leesinbad/article/details/132356438