Dubbo通信机制及原理

1. 远程通信框架

Netty 作为基础通信层

Dubbo 默认采用 Netty 框架作为其远程通信的基础。Netty 是一个高效的异步事件驱动的网络应用框架,基于 NIO(Non-blocking I/O)实现,提供了一种全双工、低延迟、高吞吐量的通信方式。Netty 通过 Socket(TCP)进行通信,确保数据传输的可靠性。

多协议支持

Dubbo 支持多种通信协议,如 Dubbo、RMI、Hessian、HTTP 等。用户可以根据实际需求选择合适的协议。其中,Dubbo 协议是专门为 Dubbo 设计的高性能 RPC 协议,具有以下特点:

  • 高性能:基于 TCP 长连接,减少握手开销;采用基于消息头的变长编码,节省带宽。
  • 可扩展性:协议头部预留了扩展字段,易于扩展新特性。
  • 可靠性:支持心跳检测、超时重试、失败快速失败等机制保证服务调用的稳定性。
  • 监控与管理:内置了一些用于服务治理和监控的元数据,便于对服务调用进行统计、监控和故障排查。

Dubbo核心部分包括:

  • 远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型序列化,以及“请求-响应”模式的信息交换方式。

  • 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡、失败容错、地址路由、动态配置等集群支持。

  • 自动发现:基于注册中心目录服务,使服务消费方能动态地查找服务器提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

2. 请求调用流程

客户端发起调用

  • 生成唯一ID:当客户端一个线程调用远程接口时,Dubbo 会生成一个唯一的 ID,通常使用 AtomicLong 从 0 开始递增计数。
  • 打包调用信息:将调用接口的接口名称、方法名称、参数值列表等方法调用相关信息,以及用于处理响应结果的回调对象(如果有异步调用需求),封装成一个对象。
  • 缓存调用上下文:将上述 ID 和封装后的调用信息放入全局的 ConcurrentHashMap 中,以便后续根据 ID 查找和处理响应。
  • 发送请求:将 ID 和打包后的调用信息封装成一个请求对象(如 InvocationRpcInvocation),通过已建立的长连接异步发送给服务端。

服务端接收并处理请求

  • 解析请求:服务端接收到请求后,解析出请求的 ID、接口名、方法名和参数等信息。
  • 执行服务方法:根据解析出的信息,找到对应的服务实例并调用其方法,执行业务逻辑。
  • 构建响应:将服务方法的执行结果包装成响应对象,包含状态码、结果数据等信息。

返回响应

  • 服务端发送响应:将响应对象通过长连接异步发送回客户端。
  • 客户端接收响应:客户端接收到响应后,根据响应中的 ID 在缓存的 ConcurrentHashMap 中查找对应的回调对象,并通过回调对象处理响应结果(如更新 Future 对象、触发事件等)。

Dubbo里面有哪几种节点角色

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

3ed73d5a8a905fac323bed021107082e_29d4d429b67852f87632a21af9fff354.png

Dubbo的核心配置有哪些

配置配置说明
dubbo:service服务配置
dubbo:reference引用配置
dubbo:protocol协议配置
dubbo:application应用配置
dubbo:module模块配置
dubbo:registry注册中心配置
dubbo:monitor监控中心配置
dubbo:provider提供方配置
dubbo:consumer消费方配置
dubbo:method方法配置
dubbo:argument参数配置

image.png

Dubbo与Spring Cloud详细对比

特性/维度DubboSpring Cloud
定位高性能RPC框架微服务框架
功能范围专注于远程过程调用 (RPC),提供服务治理、调度、发现、监控等功能提供微服务架构所需的全套解决方案,包括服务发现、配置管理、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话、集群状态等
生态体系生态相对较小,但国内有大量成熟用户作为Spring家族的一员,与Spring Boot、Spring Data、Spring Batch等深度集成,生态丰富
服务调用方式基于RPC基于RESTful API
配置方式部分服务配置可能需要自行查找资源,易发生jar包冲突,配置时依赖虚拟机约定优于配置(Convention over Configuration),提供jar包统一管理,避免冲突,对初学者友好
通信协议多协议支持(默认Dubbo协议,还有RMI、Hessian、HTTP等)主要基于HTTP/HTTPS,支持RESTful API
服务注册与发现依赖第三方注册中心(如Zookeeper、Nacos、Etcd等)内置服务发现组件(如Eureka、Consul、Nacos等)或通过插件支持其他注册中心
序列化方式支持多种序列化方式(如Hessian2、JSON、Fastjson、Kryo、FST等)通常使用HTTP协议默认的JSON序列化,也可通过插件支持其他序列化方式
负载均衡内置多种负载均衡策略(如随机、轮询、权重等)通过 Ribbon 或 Spring Cloud LoadBalancer 提供负载均衡支持
容错机制支持多种容错策略(如Failover、Failfast、Failsafe、Fallback等)通过 Hystrix(已停更,推荐使用Resilience4j等替代品)或Spring Cloud Circuit Breaker实现断路器、降级、熔断等功能
服务治理提供丰富的服务治理能力,如服务降级、动态配置、服务路由等提供全面的服务治理功能,如服务熔断、路由规则、服务降级、配置动态刷新等
开发与运维友好性需要较多手动配置和集成工作,学习曲线相对较陡峭借助Spring Boot的便利性,简化开发与运维,提供一键部署和启动,学习曲线较平缓
跨语言支持依赖特定的Java客户端和服务器端实现,跨语言支持有限由于基于HTTP/REST,天然具有较好的跨语言互操作性

Dubbo有哪几种负载均衡策略

负载均衡策略说明
Random LoadBalance随机,按权重设置随机概率(默认)
RoundRobin LoadBalance轮询,按公约后的权重设置轮询比率
LeastActive LoadBalance最少活跃调用数,相同活跃数的随机
ConsistentHash LoadBalaclava一致性Hash,相同参数的请求总是发到同一提供者

Dubbo有哪几种集群容错方案,默认是哪种?

集群容错方案说明
Failover Cluster失败自动切换,自动重试其他服务器(默认)
Failfast Cluster快速失败,立即报错,只发起一次调用
Failsafe Cluster失败安全,出现异常时,直接忽略
Failback Cluster失败自动恢复,记录失败请求,定时重发
Forking Cluster并行调用多个服务器,只要一个成功即返回
Broadcast Cluster广播逐个调用所有提供者,任意一个报错则报错
Mock Cluster响应失败时返回伪造的响应结果
Available Cluster遍历查找所有服务列表,找到第一个可以返回结果的节点,并且返回结果
Mergable Cluster将多个节点请求合并进行返回

3. 序列化与反序列化

为了在网络上传输复杂的数据结构,Dubbo 使用序列化技术将对象转换成字节流,再在网络另一端通过反序列化还原为对象。Dubbo 支持多种序列化方式,如 Hessian2、JSON、Fastjson、Kryo、FST 等,用户可以根据性能、跨语言需求等因素选择合适的序列化方案。

4. 注册中心与服务发现

Dubbo 通常依赖 ZooKeeper、Nacos、Etcd 等注册中心实现服务注册与发现。服务提供者启动时将自己的服务信息(如接口、版本、IP 地址、端口等)注册到注册中心,服务消费者订阅所需服务,获取提供者的列表。这样,即使服务提供者的网络地址发生变化,消费者也可以通过注册中心动态感知并调整连接。

5. 负载均衡与容错策略

在实际调用过程中,Dubbo 提供了一系列负载均衡算法(如随机、轮询、权重等)来决定从多个可用服务提供者中选择哪一个进行调用。同时,它还支持多种容错策略(如 Failover、Failfast、Failsafe、Fallback 等),以应对服务调用失败的情况,提高系统的稳定性和可用性。

Dubbo 的通信机制包括基于 Netty 的高效网络通信、多协议支持、请求调用的完整生命周期管理、序列化与反序列化、注册中心驱动的服务发现,以及负载均衡与容错策略等关键组件,共同构成了其强大且灵活的远程服务调用体系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值