一、介绍
Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务框架下的服务治理和通信问题。官方提供了多种 SDK 语言实现。使用 Dubbo 开发的微服务具备相互之间的远程地址发现和通信能力。利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务智力诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。
二、Dubbo 能做什么?
1、微服务编程范式和工具
Dubbo 支持基于 IDL 或者语言特定方式的服务定义,提供多种形式的服务调用形式(同步、异步、流式等)。
2、高性能 RPC 通信
Dubbo 帮助解决微服务组件之间的通信问题,提供了基于 HTTP、HTTP/2、TCP 等多种高性能通信协议实现,并支持序列化协议扩展,在实现上解决了网络连接管理、数据传输等基础问题。
3、微服务监控和治理
Dubbo 官方提供的服务发现、动态配置、负载均衡、流量路由等基础组件可以很好的帮助解决微服务基础实践的问题。除此之外,还可以用 Admin 控制台监控微服务状态,通过周边生态完成限流降级、数据一致性、链路追踪。
三、Dubbo 架构
上面的图是 Dubbo 的工作原理图,从抽象架构上分为两层:服务治理抽象控制面 和 Dubbo数据面。
- 服务治理控制面:服务治理控制面不是特指注册中心类的单个具体组件,而是对 Dubbo 治理体系的抽象表达。控制面包含协调服务发现的注册中心、流量管控策略、Dubbo Admin 控制台等。
- Dubbo 数据面:数据面代表集群部署的所有的 Dubbo 进程,进程之间通过 RPC 协议实现数据交换,Dubbo 定义了微服务应用开发和调用规范以及实现数据传输编码工作。
- 服务消费者:发起业务调用的进程。
- 服务提供者:接收业务调用的进程。
四、Dubbo 数据面
从数据层面看,Dubbo 解决了微服务实践中的以下问题:
- 作为 服务开发框架 约束了微服务定义、开发和调用的规范,定义了服务治理流程及适配模式。
- 作为 RPC通信协议实现 解决服务间数据传输的编解码问题。
五、服务开发框架
Dubbo 在微服务应用开发框架之上抽象了一套 RPC 服务定义、暴露、调用和治理的编程范式。
Dubbo 作为服务开发框架包含的具体内容如下:
- RPC 服务定义、开发范式:支持 IDL 定义服务。比如 Java Interface 定义服务。
- RPC 服务发布和调用API: 支持同步、异步、流式调用服务调用编程模式,还支持请求上线文 API、设置超时时间等。
- 服务治理策略、流程和适配方式:作为服务框架数据面,Dubbo 定义了服务地址发现、负载均衡策略、基于规则的流量路由、监控指标采集等服务治理抽象,并适配到特定的产品实现。
六、通信协议
Dubbo 从设计上不限于任何一款特定的通信协议,HTTP/2、REST、GRPC、Hessian2 等几乎所有的主流通信协议。
七、服务治理抽象
Dubbo 核心的功能有以下几点:
- 地址发现:具备高性能、支持大规模集群、服务级元数据配置等优势。
- 负载均衡:默认提供加权随机、加权轮询、最少活跃请求数优先、最短响应时间优先、一致哈希和自适应负载策略等。
- 流量路由:支持流量控制服务调用的流量分布和行为,基于这些规则可以实现基于权重的比例流量分发、灰度验证、金丝雀发布、按请求参数的路由、同区域优先、超时配置、重试、限流降级等能力。
- 链路追踪:支持请求的链路追踪。
- 可观测性:实现所有请求的状态。