欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > Dubbo框架

Dubbo框架

2025/11/12 19:35:02 来源:https://blog.csdn.net/jingzhi111/article/details/136910029  浏览:    关键词:Dubbo框架

基于Java的高性能RPC框架,定义 服务接口及出入参类型 供远程调用。客户端需拥有与服务端相同的接口。

三大特点:

  • 高效的接口远程调用
  • 容错 与 负载均衡
  • 服务的自动注册和发现

为什么用Dubbo?

调用远程服务方便, 支持服务自动注册与发现、服务治理方便、有助于分布式系统服务的管理。 支持多种负载均衡和容错, Netty 长连接和异步线程高效,高并发下性能好。

  • 优点:高并发下性能好、通信效率高性能好(单一长连接和NIO异步通讯,高效的序列化协议和通信框架)、支持负载均衡、服务调用、服务发现、服务治理
  • 缺点:复杂的配置和部署流程,定制性较高、难度和成本高。

  • Dubbo:更适合于需要高性能、大规模集群以及多语言支持的场景。
  • Spring Cloud:适合于需要快速开发、一站式解决方案以及跨平台能力的场景。更适用于小规模微服务集群。

  • RPC:二进制、TCP/HTTP、性能高、耦合度高、适用内部服务。RPC核心:通讯,序列化
  • REST:JSON、HTTP、 性能一般、低耦合、外部服务


一、调用流程

  1. 启动:启动服务提供方应用,将提供的服务初始化到 容器
  2. 注册:提供方在应用启动后将服务注册到 注册中心,采用Zookeeper或Nacos作为注册中心
  3. 订阅:消费方在应用启动后 会向注册中心订阅服务,同时获取注册中心已存在的服务列表并缓存到本地
  4. 通知:注册中心会通过异步通知的方式,实时将提供方的最新状态推送至消费方
  5. 调用:消费方可以根据本地服务列表 直接进行服务调用
  6. 监控统计:消费方和服务方会将服务调用状态、次数等内容推送至监控端

二、使用

1、api模块:接口定义,定义服务接口及出入参类型,需打包发布到远程仓库,给服务端和消费端 共同依赖。

(定义接口、xxRequest、xxResponse)

2、服务端:服务提供方,实现接口具体业务

服务配置:appCtx-dubbo.xml

<dubbo:registry address="zookeeper://127.0.0.1:2191" />
<dubbo:service interface="com.google.demo.api.DemoQueryService" ref="demoQueryService" />

配置注册中心地址 和 暴露服务

服务内容分别是:api模块接口的全类名,服务端实现类的服务名

3、消费端:服务调用方,根据需要 远程调用服务接口

调用配置:appCtx-dubbo.xml

<dubbo:reference id="demoQueryService" interface="com.google.demo.api.DemoQueryService" />

两个内容分别是:服务端实现类的服务名,api模块接口的全类名

配置内容 正好和服务端是反的,

还可以配置 连接参数、超时时间、重试次数

也可以通过注解方式配置:

(1)配置类加@EnableDubbo注解(指定包扫描路径)

(2)消费者加@DubboReference注解引用服务(指定超时时间)

三、注册中心

支持多种注册中心,默认Zookeeper,还支持Redis、Nacos

提供者 的注册与发现,消费者 动态的发现和访问提供者;

提供者 注册服务;消费者 订阅服务;返回服务列表给消费者

四、负载均衡

如何从 多个服务提供者中选择一个进行调用,分摊负载

Dubbo内置的多种负载均衡策略(轮询、随机、最少活跃调用数、一致性哈希)

五、集群容错

当提供者发生故障时,从备选节点 选一个可以的节点 让消费者访问;

提供了多种容错策略:快速失败、失败切换、失败重试等。

  • Failover:调用失败,自动切换下一个 直到成功
  • Failfast:快速失败,立即抛出异常
  • Failsafe:记录异常但不抛出
  • Failback:后台异步重试
  • Forking:并发调用多个,有一个成功就返回

六、熔断、降级

        在服务调用失败率达到一定阈值时,自动触发熔断机制,阻止后续的请求继续访问该服务,从而避免雪崩效应的发生。当熔断器打开后,服务调用会被快速失败,不再尝试访问远程服务器。经过一段时间后,熔断器会进入半开状态,允许部分请求尝试调用服务。如果调用成功,熔断器会关闭,恢复到正常状态;如果调用失败,熔断器会继续保持打开状态。

熔断是降级的一种触发条件,而降级是熔断后的一种应对策略。

  • 熔断:是通过circuit breaker模式来实现的,(达到最大失败次数,暂停对该服务的调用,防止服务雪崩)。
  • 降级:是通过Mock来实现,(关闭非核心功能让核心功能正常、返回空结果或默认返回)。

七、Netty通信框架

Dubbo的底层通信是建立在Netty通信框架下,实现了从网络层到协议层的完整封装,通过高效的

I/O操作(NIO)提升通信效率。

使用 心跳机制、序列化和反序列化、长连接池 等机制来提高网络通信的效率和安全性。

心跳机制

  • 相互”定时发送心跳包 来检测 客户端与服务端 之间长连接的存活状态。
  • 如果心跳包多次未得到响应,连接不可用,进而触发重连逻辑或断开连接
  • 客户端 连不到服务端 会重连;服务端 连不上客户端 会断开连接。(超时时间:默认 3*心跳间隔)

Netty中的IdleStateHandler用于检测连接的空闲状态(读空闲、写空闲、读写空闲); 当连接的空闲时间超过设定的阈值时,IdleStateHandler会触发一个超时事件。

  • heartbeat:心跳间隔,默认为60秒。
  • heartbeatTimeout:心跳超时时间,默认为heartbeat*3。

Dubbo支持哪些通信协议?

Dubbo协议(默认,基于TCP的二进制协议)、RMI协议、Hessian协议、HTTP协议和 WebService协议等


八、其他RPC框架

  1. gRPC

    • 开发背景:由Google开发,是一个高性能、开源的RPC框架。
    • 技术特点:基于HTTP/2协议,并使用Protocol Buffers(ProtoBuf)作为序列化协议。支持多种编程语言,如C++、Java、Python、Go、Ruby、C#、Node.js等。提供强大的IDL(接口定义语言)和自动代码生成工具。
    • 应用场景:适用于大规模分布式系统,要求高性能和跨语言支持的场景。
  2. Apache Thrift

    • 开发背景:由Apache开发,是一个跨语言的RPC框架。
    • 技术特点:支持多种传输协议和序列化协议,如TBinaryProtocol、TCompactProtocol等。支持多语言,包括C++、Java、Python、Go、Ruby、C#、Node.js等。使用IDL进行接口定义,提供代码生成工具,支持异步和同步的通信方式。
    • 应用场景:适用于异构系统中不同语言之间的远程调用。
  3. Spring Cloud

    • 开发背景:Spring Cloud是一套构建分布式系统的开源框架,它整合了多种RPC框架。
    • 技术特点:提供了多个模块,包括服务发现与注册、负载均衡、断路器、智能路由等功能。基于HTTP或RPC实现了服务间的通信和调用。
    • 应用场景:Spring Cloud整合的RPC框架如RestTemplate、Feign、Ribbon等,使得开发者可以方便地构建分布式系统。
  4. gRPC-Web

    • 开发背景:gRPC的Web版本,使得gRPC服务可以通过浏览器进行访问。
    • 技术特点:基于HTTP/1.1,使用ProtoBuf作为序列化协议,并支持多种编程语言的客户端。
    • 应用场景:适用于需要通过浏览器访问RPC服务的场景。
  5. Apache Axis2

    • 开发背景:Apache Axis2是一款基于Web服务标准的RPC框架。
    • 技术特点:支持SOAP协议,通过WSDL描述服务接口,支持多种编程语言,如Java、C++、Python等。提供了高度可扩展的架构、安全性和可靠性,并支持发布和发现服务。
    • 应用场景:适用于需要基于SOAP协议进行通信的分布式系统。
  6. RMI(Java远程方法调用)

    • 开发背景:Java自带的远程方法调用工具。
    • 技术特点:使用Java的序列化机制进行对象的序列化和反序列化,传输协议是Java自定义的协议。
    • 应用场景:适用于Java语言环境下的远程方法调用。


九、与Spring Cloud区别对比:

SpringCloudDubbo
注册中心Eureka、Nacos、ZookeeperZookeeper、Nacos
服务调用RESTFul API基于http协议RPC基于Dubbo自定义协议
熔断器Hystrix不完善
配置中心Config
网关Zuul
优势整合了众多组件、集成方便、开发成本低大并发、通信性能好(单一长连接和NIO异步通讯,高效的序列化协议和通信框架)、负载均衡、服务调用、服务发现、服务治理
劣势高并发场景下,通信效率可能较低配置复杂、定制性较高、难度和成本高

Dubbo:更适合于需要高性能、大规模集群以及多语言支持的场景。

Spring Cloud:适合于需要快速开发、一站式解决方案以及跨平台能力的场景。更适用于小规模微服务集群。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词