前言
在云原生时代,使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力,利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等 服务治理诉求。这让Dubbo成为了构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具的最佳实践。
Dubbo的作用
为什么需要Dubbo,它能做什么?Dubbo 可以帮助解决如下微服务实践问题:
- 微服务编程范式和工具
Dubbo 支持基于 IDL 或语言特定方式的服务定义,提供多种形式的服务调用形式 (如同步、异步、流式等)。
- 高性能的 RPC 通信
Dubbo 帮助解决微服务组件之间的通信问题,提供了基于 HTTP、HTTP/2、TCP 等 的多种高性能通信协议实现,并支持序列化协议扩展,在实现上解决网络连接管理、 数据传输等基础问题。
- 微服务监控与治理
Dubbo 官方提供的服务发现、动态配置、负载均衡、流量路由等基础组件可以很好 的帮助解决微服务基础实践的问题。除此之外,您还可以用 Admin 控制台监控微服 务状态,通过周边生态完成限流降级、数据一致性、链路追踪等能力。
- 部署在多种环境
Dubbo 服务可以直接部署在容器、Kubernetes、Service Mesh 等多种架构下。
核心架构
以上是 Dubbo 的工作原理图,从抽象架构上分为两层:服务治理抽象控制面和 Dubbo 数据面。
服务治理控制面
服务治理控制面不是特指如注册中心类的单个具体组件,而是对 Dubbo 治理体系 的抽象表达。控制面包含协调服务发现的注册中心、流量管控策略、Dubbo Admin 控制台等,如果采用了 Service Mesh 架构则还包含 Istio 等服务网格控制面。
Dubbo 数据面
数据面代表集群部署的所有 Dubbo 进程,进程之间通过 RPC 协议实现数据交换, Dubbo 定义了微服务应用开发与调用规范并负责完成数据传输的编解码工作。
- 服务消费者(Dubbo Consumer),发起业务调用或 RPC 通信的 Dubbo 进 程。
- 服务提供者(Dubbo Provider),接收业务调用或 RPC 通信的 Dubbo 进 程。
通信协议
Dubbo 从设计上不绑定任何一款特定通信协议,HTTP/2、REST、gRPC、JsonRPC、 Thrift、Hessian2 等几乎所有主流的通信协议,Dubbo 框架都可以提供支持。
总的来说,Dubbo 对通信协议的支持具有以下特点:
- 不绑定通信协议
- 提供高性能通信协议实现
- 支持流式通信模型
- 不绑定序列化协议
- 支持单个服务的多协议暴露
- 支持单端口多协议发布
- 支持一个应用内多个服务使用不同通信协议
Dubbo服务治理
服务开发框架解决了开发与通信的问题,但在微服务集群环境下,我们仍需要解决 无状态服务节点动态变化、外部化配置、日志跟踪、可观测性、流量管理、高可用 性、数据一致性等一系列问题,我们将这些问题统称为服务治理。
服务治理抽象
以下展示了 Dubbo 核心的服务治理功能定义。
地址发现
Dubbo 服务发现具备高性能、支持大规模集群、服务级元数据配置等优势,默认提 供 Nacos、Zookeeper、Consul 等多种注册中心适配,与 Spring Cloud、Kubernetes Service 模型打通,支持自定义扩展。
负载均衡
Dubbo 默认提供加权随机、加权轮询、最少活跃请求数优先、最短响应时间优先、 一致性哈希和自适应负载等策略
流量路由
Dubbo 支持通过一系列流量规则控制服务调用的流量分布与行为,基于这些规则可 以实现基于权重的比例流量分发、灰度验证、金丝雀发布、按请求参数的路由、同 区域优先、超时配置、重试、限流降级等能力。
链路追踪
Dubbo 官方通过适配 OpenTelemetry 提供了对 Tracing 全链路追踪支持,用户可 以接入支持 OpenTelemetry 标准的产品如 Skywalking、Zipkin 等。另外,很多社 区如 Skywalking、Zipkin 等在官方也提供了对 Dubbo 的适配。
可观测性
Dubbo 实例通过 Prometheus 等上报 QPS、RT、请求次数、成功率、异常次数等多 维度的可观测指标帮助了解服务运行状态,通过接入 Grafana、Admin 控制台帮助 实现数据指标可视化展示。
Dubbo 服务治理生态还提供了对 API 网关、限流降级、数据一致性、认证鉴权等场 景的适配支持。
Dubbo Admin
Admin 控制台提供了 Dubbo 集群的可视化视图,通过 Admin 你可以完成集群的几 乎所有管控工作。
- 查询服务、应用或机器状态
- 创建项目、服务测试、文档管理等
- 查看集群实时流量、定位异常问题等
- 流量比例分发、参数路由等流量管控规则下发