Dubbo 概念及架构

6f65190170ec7b41eff666be71677219.png

相信开发人员对 Dubbo 都不会陌生,工作中对服务间的调用也常常使用 Dubbo 进行 RPC 调用。在开发中一般都是对方提供一个 API 接口,我方引入依赖,加上注解,然后就可以进行通信了。

本着知其所以然的目的,翻查资料,阅读源码,一起深入了解一下 Dubbo 的原理。

1什么是 Dubbo ?

bae2d6d8e03f227e0f23eaa8d7d9c57c.png

Apache Dubbo 是一款高性能、轻量级的开源服务框架。Apache Dubbo |ˈdʌbəʊ| 提供了六大核心能力:面向接口代理的高性能 RPC 调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。

这六大核心能力分别是:

  1. 面向接口代理的高性能 RPC 调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。

  2. 智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。

  3. 服务自动注册与发现:支持多种注册中心服务,服务实例上下线实时感知。

  4. 高度可扩展能力:遵循微内核+插件的设计原则,所有核心能力如 Protocol、Transport、Serialization 被设计为扩展点,平等对待内置实现和第三方实现。

  5. 运行期流量调度:内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。

  6. 可视化的服务治理与运维:提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数。

通过官方回答可以提炼出以下要点:代理负载均衡注册发现扩展流量调度等等。

这些也是后面需要深入了解的方向,比如:

  • Dubbo 是如何通过代理实现接口调用的?

  • Dubbo 是如何实现负载均衡的?

  • Dubbo 的服务注册与发现是如何实现的?

  • ……

下面通过官网资料,进一步了解 Dubbo 的架构设计。

2框架设计

部署架构

c52236078ef7b0c9a0710831c1f9546f.png
  • Registry 注册中心:协调 Consumer 与 Provider 之间的地址注册与发现

  • Provider 提供者:暴露服务的服务提供方

  • Consumer 消费者:通过 RPC 调用服务的消费方

  • Monitor 监控中心:监控服务调用次数和时间等数据

  • Container 容器:服务运行容器

这是一个通用部署架构,在 Dubbo 3.0[1] 中对架构进行了调整优化。除了注册中心,还有配置中心元数据中心,具体内容可以参考官方说明。

整体设计

在 Dubbo 2.7[2] 中,提供了一份框架设计图:

57abc68d5c65856a8fe683bcce941f29.png
Dubbo 2.7 整体设计

对 Dubbo 3.0 而言,这块变动应该不大。

各层说明

  • config 配置层:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类

  • proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心,扩展接口为 ProxyFactory

  • registry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 RegistryFactory, Registry, RegistryService

  • cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 Cluster, Directory, Router, LoadBalance

  • monitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory, Monitor, MonitorService

  • protocol 远程调用层:封装 RPC 调用,以 Invocation, Result 为中心,扩展接口为 Protocol, Invoker, Exporter

  • exchange 信息交换层:封装请求响应模式,同步转异步,以 Request, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer

  • transport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codec

  • serialize 数据序列化层:可复用的一些工具,扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool

调用链

995ad056f024e11f7f50d022fd486aa4.png

3总结

本文主要通过官方资料,了解到 Dubbo 的概念、部署架构、整体设计以及调用链。了解这些基本概念后,可以进一步结合工作、源码做更深入的研究。

引用链接:

[1]

Dubbo 3.0 部署架构: https://dubbo.apache.org/zh/docs/concepts/registry-configcenter-metadata/

[2]

Dubbo 2.7 官方文档: https://dubbo.apache.org/zh/docsv2.7/dev/design/

- <End /> -

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值