Dubbo架构介绍

本文介绍了Dubbo,一个由阿里巴巴开源的分布式服务框架,它提供了远程接口调用、负载均衡和容错功能。文章详细阐述了Dubbo的节点角色,如Provider、Consumer、Registry和Monitor,并解释了它们之间的调用关系。此外,还讨论了Dubbo架构的连通性、健壮性和伸缩性特点,包括注册中心与服务提供者、消费者之间的交互方式以及在各种故障情况下的应对策略。

Dubbo架构介绍

一.什么是Dubbo

Dubbo是阿里巴巴在2011年开源的分布式服务框架,是服务化治理的核心框架。 Dubbo主要提供3个功能,远程接口调用,负载均衡和容错,服务注册和服务发现
目前,已经是Apache的开源项目
官网:http://dubbo.apache.org​

二.Dubbo的架构

在这里插入图片描述

三.工作细节说明(来自dubbo官网)

节点角色说明(掌握)
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器
调用关系说明

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
    Dubbo 架构具有以下几个特点

连通性
· 注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小
· 监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示
· 服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销
· 服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销
· 注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外
· 注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
· 注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
· 注册中心和监控中心都是可选的,服务消费者可以直连服务提供者

健状性
· 监控中心宕掉不影响使用,只是丢失部分采样数据
· 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
· 注册中心对等集群,任意一台宕掉后,将自动切换到另一台
· 注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
· 服务提供者无状态,任意一台宕掉后,不影响使用
· 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

伸缩性
注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心
服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者

### Dubbo简介 Dubbo 是一款由阿里巴巴开源的高性能 Java RPC 框架,主要用于构建分布式服务架构。它能够帮助开发者实现高效率的服务治理、负载均衡以及远程过程调用等功能[^1]。 RPC(Remote Procedure Call)即远程过程调用,允许程序像本地方法一样调用其他机器上的资源和服务。通过 Dubbo,可以轻松地将应用程序拆分为多个微服务模块,并使这些模块之间高效通信[^2]。 --- ### Dubbo的核心功能 Dubbo 提供了一系列强大的核心功能,主要包括以下几个方面: - **透明化的远程方法调用**:无需修改业务逻辑代码即可完成跨网络的服务调用。 - **智能负载均衡**:支持多种负载均衡策略,如随机算法、轮询算法等,从而提高系统的可用性和性能。 - **自动服务注册与发现**:利用 Zookeeper 或 Consul 等注册中心动态管理服务实例的状态变化。 - **可扩展性强**:提供了丰富的插件机制和自定义能力,比如过滤器链的设计使得用户可以根据需求灵活定制行为[^3]。 --- ### Dubbo的基本原理 #### 架构设计 Dubbo 的整体架构遵循分层设计理念,主要包含以下几部分: 1. **Provider (服务提供方)**:负责暴露接口并处理客户端请求; 2. **Consumer (服务消费方)**:发起对 Provider 的调用来获取所需数据或执行某些操作; 3. **Registry (注册中心)**:作为中介存储所有在线节点的信息以便于双方查找对方地址; 4. **Monitor (监控中心, 可选)**:收集统计指标用于分析系统运行状况。 整个交互流程大致如下图所示: ``` +-------------------+ | Consumer | +---------+--------+ | Request +---------v--------+ | Registry Center | +---------+--------+ | Response/Notification +---------v--------+ | Provider | +-------------------+ ``` 当 Consumer 需要访问某个特定的功能时,它先向 Registry 查询目标 Service 所对应的 Endpoint 列表;之后依据选定的 LoadBalance Policy 来决定最终连接哪个实际 Instance 进行下一步动作。 #### 调用流程 具体来说,在一次完整的 Dubbo 请求过程中会发生下面几个阶段的动作序列: 1. 初始化阶段 —— 加载必要的配置项并通过 SPI 创建相应的 Component 实例; 2. 发起调用前准备 —— 序列化参数并将它们打包成适合传输的形式发送出去; 3. 响应接收解析 —— 对返回的数据包解码还原为原始对象形式交给上层应用继续后续工作流[^5]。 --- ### 使用场景及优势 由于其卓越的表现力和稳定性表现,Dubbo 广泛适用于大规模互联网企业内部复杂的 SOA 场景当中。相比于传统的单体式开发模式而言,采用 Dubbo 后带来的好处显而易见——不仅简化了跨团队协作难度还增强了灵活性适应未来可能存在的变更挑战。 此外值得一提的是,尽管目前市场上也存在许多类似的解决方案例如 gRPC/SpringCloud 等可供选择,但是考虑到国内技术生态体系兼容性等因素影响下,Dubbo 依旧占据着不可替代的重要地位[^4]。 ```java // 示例代码展示如何简单集成 Dubbo项目中 <dubbo:application name="demo-provider"/> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <dubbo:protocol name="dubbo" port="20880"/> <!-- 定义一个普通的Java接口 --> public interface DemoService { String sayHello(String name); } @Service(version = "1.0.0") public class DemoServiceImpl implements DemoService { public String sayHello(String name) { return "Hello, " + name; } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值