前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dubbo 概念及架构

Dubbo 概念及架构

作者头像
程序员小航
发布2022-03-14 19:21:07
1850
发布2022-03-14 19:21:07
举报
文章被收录于专栏:程序员小航

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

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

1什么是 Dubbo ?

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

这六大核心能力分别是:

  1. 面向接口代理的高性能 RPC 调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。
  2. 智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。
  3. 服务自动注册与发现:支持多种注册中心服务,服务实例上下线实时感知。
  4. 高度可扩展能力:遵循微内核+插件的设计原则,所有核心能力如 Protocol、Transport、Serialization 被设计为扩展点,平等对待内置实现和第三方实现。
  5. 运行期流量调度:内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。
  6. 可视化的服务治理与运维:提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数。

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

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

  • Dubbo 是如何通过代理实现接口调用的?
  • Dubbo 是如何实现负载均衡的?
  • Dubbo 的服务注册与发现是如何实现的?
  • ……

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

2框架设计

部署架构

  • Registry 注册中心:协调 Consumer 与 Provider 之间的地址注册与发现
  • Provider 提供者:暴露服务的服务提供方
  • Consumer 消费者:通过 RPC 调用服务的消费方
  • Monitor 监控中心:监控服务调用次数和时间等数据
  • Container 容器:服务运行容器

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

整体设计

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

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

调用链

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 /> -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小航 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1什么是 Dubbo ?
  • 2框架设计
    • 部署架构
      • 整体设计
        • 各层说明
          • 调用链
          • 3总结
            • 引用链接:
            相关产品与服务
            负载均衡
            负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档