dubbo的基础知识

发布时间:2024年01月06日

dubbo是什么

? ? ? Dubbo是一个分布式服务框架,是一种高性能的远程通讯框架。它提供了基于Java的RPC(远程过程调用)通信机制,使得应用之间可以方便地进行远程调用,实现分布式服务的调用和管理。Dubbo提供了服务注册、发现、负载均衡、路由、容错等常用的分布式系统开发功能,可以帮助开发者快速构建可靠性、可扩展性和高性能的分布式应用。Dubbo主要由三个部分组成:Provider(服务提供者)、Consumer(服务消费者)和Registry(服务注册中心)

Dubbo 支持哪些协议,每种协议的应用场景,优缺点

? ? ? Dubbo是一种开源的分布式服务框架,它支持多种协议以满足不同场景下的需求。下面是目前Dubbo支持的主要协议以及它们的应用场景和优缺点:

  1. Dubbo协议:

    • 应用场景:适用于高性能的服务调用场景,通常用于内部服务之间的通信。
    • 优点:高性能、低延迟、高并发。
    • 缺点:仅适用于Java开发的服务。
  2. HTTP协议:

    • 应用场景:适用于与不同语言和平台集成,特别是对于Web应用和移动应用来说是最常见的协议。
    • 优点:跨语言、跨平台、易于集成。
    • 缺点:相对于Dubbo协议,性能较低。
  3. Hessian协议:

    • 应用场景:适用于Java开发的服务,尤其是基于Spring的应用。
    • 优点:性能较好、易于使用和集成。
    • 缺点:仅支持Java语言。
  4. RMI协议:

    • 应用场景:适用于Java开发的服务,尤其是基于Java RMI(远程方法调用)的应用。
    • 优点:性能较好、支持Java RMI。
    • 缺点:仅支持Java语言。
  5. Thrift协议:

    • 应用场景:适用于多语言的服务调用,尤其是基于Apache Thrift的应用。
    • 优点:跨语言、高性能、易于使用和集成。
    • 缺点:相对于Dubbo协议,稍微复杂一些。

Dubbo 超时时间? ? ??

? ? ? ?可以通过配置文件或者编程方式来设置超时时间。以下是两种方式的详细解释:

  1. 配置文件方式: 在Dubbo的配置文件(通常是dubbo.properties或者dubbo.xml)中,可以设置全局的超时时间。具体的配置属性是timeout,单位是毫秒。示例配置如下:
# dubbo.properties
# 全局超时时间为10秒
dubbo.consumer.timeout=10000
  1. 编程方式: 在代码中,可以使用Dubbo提供的API来设置超时时间。具体步骤如下:

2.1 创建服务引用对象:

ReferenceConfig<XXXService> reference = new ReferenceConfig<>();
reference.setInterface(XXXService.class);

2.2 设置超时时间:

// 超时时间为10秒
reference.setTimeout(10000);

2.3 获取服务对象:

XXXService service = reference.get();

上述代码中,XXXService是需要调用的服务接口类

Dubbo 注册中心??

? ? ?以下是 Dubbo 支持的一些常见的注册中心:

  • ZooKeeper:ZooKeeper 是 Apache 基金会下的一个开源分布式协调服务。Dubbo 使用 ZooKeeper 作为默认的注册中心,通过 ZooKeeper 来管理服务的注册、发现与订阅。

  • Redis:Redis 是一个高性能的 key-value 存储系统,Dubbo 通过 Redis 实现了一种简单的注册中心。使用 Redis 注册中心需要在服务提供者和消费者配置文件中分别指定 Redis 的地址和端口。

  • Multicast:Multicast 是一种基于组播(Multicast)协议的注册中心,Dubbo 使用 Multicast 注册中心来实现组播的服务注册与发现。使用该注册中心需要配置组播的地址和端口。

  • Simple:Simple 是 Dubbo 默认的简单注册中心,它主要用于开发和测试环境。Simple 注册中心不需要额外的依赖,但它的功能有限,不适合在生产环境中使用。

Dubbo 集群的负载均衡

? ? ? 在Dubbo集群中,负载均衡是一种重要的策略,用于在多个服务提供者之间分配请求负载,以达到提高系统性能和稳定性的目的。

? ? ?Dubbo提供了多种负载均衡策略,以下是其中几种常见的策略:

  1. Random负载均衡:随机选择一个可用的服务提供者来处理请求,没有特定的规则,适用于对服务提供者没有特殊要求的场景。

  2. Round Robin负载均衡:按照轮询的方式依次选择一个可用的服务提供者来处理请求,每个服务提供者处理的请求数量相同,适用于对服务提供者要求均衡的场景。

  3. Least Active负载均衡:选择当前处理活跃请求数最少的服务提供者来处理请求,即选择负载最轻的服务提供者来处理请求,适用于处理时间较短但需要较高并发能力的场景。

  4. Consistent Hash负载均衡:根据请求的某个属性值进行哈希计算,将相同哈希值的请求发送到同一个服务提供者,可以保持某些请求的顺序和稳定性。

  5. Weighted Random负载均衡:根据服务提供者的权重值来选择,权重值越高的服务提供者被选中的概率越大,适用于对服务提供者有差异化要求的场景。

  6. Weighted Round Robin负载均衡:按照权重值将请求分配给服务提供者,权重值越高的服务提供者处理的请求数量越多,适用于对服务提供者有差异化要求的场景

Dubbo 的核心功能

? ? ?Dubbo提供了以下核心功能:

  • 远程通信:Dubbo支持多种通信协议,包括基于TCP的Dubbo协议、基于HTTP的RESTful协议和基于消息队列的消息协议等。它可以帮助应用将分布在不同节点上的服务进行远程调用,实现服务之间的快速通信。

  • 负载均衡:Dubbo提供了多种负载均衡算法,如随机算法、轮询算法和一致性哈希算法等。通过合理的负载均衡策略,Dubbo可以根据服务提供者的负载情况将请求分发到合适的节点,从而提高整个系统的吞吐量和性能。

  • 服务注册与发现:Dubbo提供了灵活的服务注册与发现机制,支持多种注册中心,如ZooKeeper、Redis和Nacos等。通过将服务提供者注册到注册中心,服务消费者可以方便地发现和调用这些服务,实现服务之间的解耦和动态扩展。

  • 服务治理:Dubbo提供了丰富的服务治理能力,包括服务路由、降级、容错和熔断等。通过配置不同的策略,Dubbo可以自动处理服务调用时的故障和异常情况,提高系统的可用性和稳定性。

  • 监控和管理:Dubbo提供了全面的监控和管理功能,包括服务调用次数、响应时间、服务提供者和消费者的运行状态等。通过可视化的监控界面,用户可以实时监控和管理整个系统,及时发现和解决问题。

Dubbo 服务注册与发现的流程

? ??

? ?流程说明:

? ? ?? Provider(提供者)绑定指定端口并启动服务

? ? ?? 指供者连接注册中心,并发本机 IP、端口、应用信息和提供服务信息 发送至注册中心存储

? ? ?? Consumer(消费者),连接注册中心 ,并发送应用信息、所求服务信 息至注册中心

? ? ?? 注册中心根据 消费 者所求服务信息匹配对应的提供者列表发送至 Consumer 应用缓存。

? ? ?? Consumer 在发起远程调用时基于缓存的消费者列表择其一发起调 用。

? ? ?? Provider 状态变更会实时通知注册中心、在由注册中心实时推送至 Consumer

Dubbo 的架构设计?

? ?

? 架构设计如下:

  1. 服务提供者(Provider):负责暴露服务接口并将其注册到注册中心,接收来自消费者的请求并返回响应。

  2. 服务消费者(Consumer):负责从注册中心获取服务提供者的地址列表,并通过负载均衡算法选择其中一台提供者进行调用。

  3. 注册中心(Registry):用于注册和发现服务提供者的地址列表,Dubbo 支持多种注册中心,如 ZooKeeper、Redis 等。

  4. 远程通信层(Remoting):负责消费者和提供者之间的远程通信,Dubbo 默认使用 Netty 实现。

  5. 服务治理层(Cluster):负责将多个提供者组合成一个虚拟的提供者,对消费者屏蔽服务提供者的具体细节,以实现负载均衡、容错等功能。

  6. 代理层(Proxy):负责将远程服务接口转换为本地代理对象,隐藏远程调用的细节,使消费者可以像调用本地方法一样调用远程服务。

  7. 监控层(Monitor):负责统计服务的调用次数、响应时间等指标,并提供可视化的监控报表。

  8. 配置层(Config):负责对 Dubbo 的各个配置进行管理,包括服务提供者和消费者的配置,注册中心的配置等。

文章来源:https://blog.csdn.net/Flying_Fish_roe/article/details/135432122
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。