Dubbo配置上的一些概念

对于dubbo在spring中我们可能看到有如下配置(可参考Schema 配置参考手册 | Apache Dubbo):

dubbo:
  application:
    id: dubbo-account-example
    name: dubbo-account-example
    # 是否启用 Dubbo 的 QoS(Quality of Service)服务,用于提供服务的监控和管理功能。这里设置为 false 表示不启用。
    qosEnable: false
    #元数据的存储类型,remote 表示元数据存储在远程服务器上,如 Nacos。
    metadata-type: remote
  protocol:
    id: dubbo
    name: dubbo
    #服务提供者暴露的端口号
    port: 20883
  registry:
    #注册中心的唯一标识符。
    id: dubbo-account-example-registry
    address: nacos://124.223.***.***:8848?namespace=99f6a081-baa8-4b94-a2f1-4c7a2ab2902b
    #注册中心的版本信息。
    version: 1.0.0
  config-center:
    #配置中心的地址,同样使用了 Nacos,并与注册中心共享了相同的地址和命名空间。
    address: nacos://124.223.***.***:8848?namespace=99f6a081-baa8-4b94-a2f1-4c7a2ab2902b
  metadata-report:
    #元数据报告的地址,也使用了 Nacos,并与注册中心和配置中心共享了相同的地址和命名空间。
    address: nacos://124.223.***.***:8848?namespace=99f6a081-baa8-4b94-a2f1-4c7a2ab2902b

        首先application的id(服务的唯一标识符,用于注册和发现服务)和name (与 id 类似,但通常更直观)。        

qosEnable: 是否启用 Dubbo 的 QoS(Quality of Service)服务,用于提供服务的监控和管理功能。

Dubbo的QoS(Quality of Service)服务是Dubbo框架中用于提供服务的监控和管理功能的一个机制。QoS全称为Quality of Service,即服务质量,是网络设备中常见的一个术语。在Dubbo中,QoS服务可以通过动态的方式对服务进行查询和控制,比如获取当前提供和消费的所有服务,以及动态地将服务进行上下线操作,即从注册中心上进行注册和反注册。

Dubbo的QoS机制主要用于限制系统的负载和保证服务的可用性和性能。通过设置合适的QoS参数,可以实现限流、降级和优先级调度等功能。具体来说,当服务提供者的请求量过大时,可以通过限制每秒处理的请求数量来避免服务过载而出现性能问题;当服务出现故障或异常时,可以通过设置降级策略来保证系统的可用性,比如将请求转向备用的服务或者返回默认值;对于不同的服务,可以设置不同的优先级,以保证重要服务的响应时间和可用性。

        metadata-type: 元数据的存储类型,remote 表示元数据存储在远程服务器上。

Dubbo的元数据(Metadata)可以理解为描述服务的数据的数据。在Dubbo的服务治理中,元数据主要包括服务的一些基本信息和特性,比如服务分组、服务版本、服务名、方法列表、方法参数列表、超时时间等。这些信息被存储在Dubbo的元数据中心中,用于帮助服务提供者和消费者更好地理解和使用服务。

举个例子,假设你有一个名为“UserService”的服务,它提供了“getUserById”和“addUser”两个方法。在Dubbo中,这个服务的元数据可能包括:

  • 服务名:UserService
  • 方法列表:getUserById, addUser
  • 方法参数列表:getUserById可能有一个参数(如用户ID),addUser可能有多个参数(如用户名、密码等)
  • 超时时间:比如设置为3秒,表示如果某个请求在3秒内没有响应,则会被认为是超时

元数据对于服务治理非常重要,因为它提供了关于服务的详细信息,使得服务提供者和消费者能够更好地协作。在服务注册与发现的过程中,注册中心会存储服务的注册信息(如服务名、地址列表等),而元数据中心则存储了服务的元数据。通过元数据中心,服务消费者可以获取到服务提供者的详细信息,从而进行远程调用等操作。

     元数据可以存在哪些地方呢?

  1. 本地文件系统:Dubbo 早期版本可能将元数据存储在本地文件系统中,但这通常不是用于生产环境的推荐做法,因为它限制了服务的可伸缩性和可维护性。

  2. 注册中心:Dubbo 支持多种注册中心,如 ZooKeeper、Nacos、Etcd 等。在 Dubbo 2.7.x 及之后的版本中,你可以将元数据存储在注册中心。这样,服务提供者和消费者都可以从注册中心获取到服务的元数据,从而进行服务注册和发现。

    • 注册中心与配置中心分离:Dubbo 允许将注册中心(用于服务注册和发现)和配置中心(用于存储配置和元数据)分离。在这种模式下,你可以使用不同的系统来分别管理它们。
  3. 数据库:虽然 Dubbo 并没有直接支持将元数据存储在数据库中,但你可以通过编写自定义的元数据存储策略来实现这一功能。例如,你可以在服务启动时将元数据写入数据库,并在服务消费者需要时从数据库中读取元数据。

  4. Nacos 作为配置中心:当使用 Nacos 作为 Dubbo 的注册中心和配置中心时,Nacos 提供了存储和查询元数据的功能。你可以将 Dubbo 服务的配置和元数据存储在 Nacos 中,并通过 Nacos 的 API 进行查询和管理。

  5. Redis:虽然 Dubbo 没有直接支持 Redis 作为元数据存储的官方实现,但你可以通过编写自定义的元数据存储策略来将元数据存储在 Redis 中。Redis 的高性能和分布式特性使得它成为一个潜在的元数据存储解决方案。

  6. 外部系统:除了上述方式外,你还可以将 Dubbo 的元数据存储在外部系统中,如 Consul、Eureka、Apollo 等。这通常需要编写一些自定义的代码来与这些系统集成。

我们再来看一下dubbo的protocol。

Dubbo的Protocol是Dubbo框架中协议的抽象,它主要负责服务的暴露和引用。在Dubbo的整个框架设计中,Protocol位于Protocol层(远程调用层),位于Exchange层(信息交换层)之上。Protocol接口支持SPI(Service Provider Interface)扩展,其默认SPI实现是DubboProtocol,并且还支持方法级SPI。

Dubbo支持多种协议,包括但不限于dubbo、rmi、hessian、http、webservice、thrift、memcached等。其中,dubbo协议是Dubbo的默认协议,它使用基于mina1.1.7+hessian3.2.1的tbremoting交互。这些协议在服务提供者和消费者之间起到了桥梁的作用,它们定义了数据传输的格式、方式以及服务调用的规范。

在Dubbo的架构设计中,Protocol负责提供者和消费者之间的协议交互数据。当服务提供者启动时,它会暴露自己的服务到注册中心,并通过Protocol层与消费者进行通信。消费者在调用服务时,也会通过Protocol层与提供者进行通信。Protocol层的作用就是确保双方能够按照约定的协议进行通信,从而实现远程服务调用的功能。

此外,Dubbo的Protocol还支持多种派发策略和线程池配置,以适应不同的应用场景。例如,你可以通过配置<dubbo:protocol>元素来指定使用哪种协议、派发策略以及线程池配置等。这些配置可以根据具体的应用场景进行调整,以达到最优的性能和稳定性。

在Dubbo的Protocol配置中,port通常指的是服务端的端口,也就是服务提供者用于暴露服务的端口。Dubbo的服务提供者在启动时,会绑定到指定的port上,并等待服务消费者的连接。服务消费者会连接到这个端口,并发送请求来调用服务提供者的服务。因此,这个port是服务端用于监听客户端连接和请求的端口。

dubbo中的registry的id指的是什么?

在Dubbo中,Registry的id属性通常用于唯一标识一个注册中心的引用Bean。这个id可以在<dubbo:service registry=""><dubbo:reference registry="">中引用,以指定服务提供者或消费者应该使用哪个注册中心。

例如,在XML配置中,你可能会看到这样的配置:

<dubbo:registry id="registry-zk" address="zookeeper://127.0.0.1:2181" />

在这个例子中,id="registry-zk"就是Registry的引用BeanId,而address属性则指定了注册中心的访问地址,这里是使用ZooKeeper作为注册中心,并指定了其地址和端口。

然后,在服务提供者或消费者的配置中,你可以通过registry属性引用这个ID,以指定它们应该使用哪个注册中心。例如:

<dubbo:service interface="com.example.YourService" ref="yourServiceImpl" registry="registry-zk" />

在这个例子中,<dubbo:service>元素通过registry属性引用了ID为registry-zk的注册中心Bean。这意味着该服务提供者将会使用ZooKeeper作为注册中心,并将自己的服务信息注册到该注册中心上。id属性并不是Dubbo中Registry的唯一标识方式。在某些情况下,你还可以通过其他方式(如URL、接口等)来引用注册中心。但是,使用id属性进行引用是一种常见且推荐的做法,因为它可以提高配置的可读性和可维护性。

 dubbo中的registry的version指的是什么?

在Dubbo中,registry 的 version 属性通常不直接作为 RegistryConfig(即registry的配置)的一部分。然而,当你提到 version,它可能在Dubbo的某些上下文中与服务版本控制相关。

在Dubbo中,服务提供者和服务消费者都可以指定服务的版本。这允许你在升级服务时保持向后兼容性,因为不同版本的服务消费者可以继续与旧版本的服务提供者交互,而新的服务消费者可以开始使用新版本的服务提供者。

但是,version 属性通常与 <dubbo:service> 或 <dubbo:reference> 标签一起使用,而不是与 <dubbo:registry> 标签一起使用。例如:

<dubbo:service interface="com.example.YourService" ref="yourServiceImpl" version="1.0.0" />

在这个例子中,version="1.0.0" 指定了服务提供者的版本为 "1.0.0"。

对于 <dubbo:registry> 标签,它主要用于配置注册中心的地址、协议、参数等。常见的属性包括 idaddressprotocolclienttimeout 等,但通常不包括 version

如果你在某个Dubbo的配置中看到了与 <dubbo:registry> 相关的 version 属性,那么它可能是特定于你的应用或框架的扩展属性,或者可能是某个误解或误用。在这种情况下,最好查阅相关的文档或源代码以获取更准确的信息。

dubbo 的config-center是什么?

Dubbo的Config Center是Dubbo三大中心之一(另外两大中心是注册中心和元数据中心),它在Dubbo的实例级服务注册发现中承担着配置管理的主要角色。

Config Center的主要作用包括:

  1. 外部化配置:类似于dubbo.properties文件,作为启动时配置参数的加载源。它允许将dubbo的配置信息(如地址、端口号、连接超时时间等)从本地配置文件或JVM参数中移出,统一存储在一个外部的配置中心中。这样,当需要修改配置时,只需修改配置中心的配置,无需修改和重启各个服务实例。
  2. 服务治理:存储和通知服务治理规则。通过监听机制,Config Center可以实现一些策略规则的动态变更。例如,可以动态地修改负载均衡策略、路由规则等。

在Dubbo中,可以使用ConfigCenterBean对象来设置Config Center的相关配置,如配置中心地址、连接超时时间等。这些配置可以在Spring配置文件中以dubbo.config-centers或dubbo.config-center为前缀进行设置。

另外,Dubbo还提供了DynamicConfiguration这个类型,它是一个配置中心的包装对象,抽象了配置中心的所有数据获取和动态变更监听功能。在Dubbo启动时,它会通过DynamicConfiguration的getProperties方法从Config Center获取配置文件的内容。

如果配置了metadata-type: remote,我们就需要配置config-center来指定元数据的存储位置了。

 dubbo的metadata-report是什么?

dubbo provider中的服务配置项有接近30个配置项。 排除注册中心服务治理需要之外,很大一部分配置项是provider自己使用,不需要透传给消费者。这部分数据不需要进入注册中心,而只需要以key-value形式持久化存储。 dubbo consumer中的配置项也有20+个配置项。在注册中心之中,服务消费者列表中只需要关注application,version,group,ip,dubbo版本等少量配置,其他配置也可以以key-value形式持久化存储。 这些数据是以服务为维度注册进入注册中心,导致了数据量的膨胀,进而引发注册中心(如zookeeper)的网络开销增大,性能降低。

Dubbo的Metadata Report(元数据报告)是Dubbo 2.7版本之后新增的一个功能,主要用于减轻注册中心的压力。在Dubbo中,服务提供者和消费者都需要向注册中心注册或订阅服务,而注册中心需要存储这些服务的元数据(如接口信息、方法列表等)。然而,随着服务数量的增加,注册中心存储的元数据也会不断增加,导致注册中心的压力逐渐增大。

为了解决这个问题,Dubbo引入了Metadata Report的概念。Metadata Report是一个独立的服务,用于存储和管理服务的元数据。当服务提供者启动时,它会将自己的元数据发布到Metadata Report中,而不是直接存储到注册中心。同样地,服务消费者也会从Metadata Report中获取所需服务的元数据,而不是从注册中心获取。

通过引入Metadata Report,Dubbo实现了元数据的集中管理和存储,从而减轻了注册中心的压力。此外,由于Metadata Report中的数据只是给自己使用的,因此当元数据发生变化时,不需要通知对端(如服务消费者),从而进一步降低了注册中心的负载。

在实际应用中,Metadata Report可以通过Dubbo提供的扩展点进行实现,如使用ZooKeeper、Nacos等作为Metadata Report的存储后端。这样,Dubbo就可以根据具体的业务场景和需求,选择适合的存储后端来存储和管理服务的元数据。

那么dubbo的config-center和metadata-report有啥区别呢?

 Dubbo的Config Center和Metadata Report在Dubbo的架构中各自扮演了不同的角色,虽然它们都涉及到配置和服务元数据的管理,但具体功能和用途有所不同。

  1. Config Center(配置中心):
    • Config Center是Dubbo中用于外部化配置和服务治理规则管理的组件。
    • 它支持多种形式的配置中心,如ZooKeeper、Consul、Apollo等,允许将Dubbo的配置参数(如地址、端口、超时时间等)从本地配置文件或JVM参数中移出,统一存储在一个外部的配置中心中。
    • Dubbo提供了访问各种配置中心的实现类,这些实现类都实现了DynamicConfiguration接口,可以监听配置中心的数据变化,并修改本地配置。
    • 在Dubbo启动时,会读取配置文件并将与配置中心相关的配置设置到ConfigCenterBean对象中,包括配置中心地址、连接超时时间、用户名、密码等。
    • Config Center在Dubbo的实例级服务注册发现中承担着配置管理的主要角色,可以类似于dubbo.properties文件一样作为启动时配置参数加载,也可以通过监听机制实现策略规则的动态变更。
  2. Metadata Report(元数据报告):
    • Metadata Report是Dubbo 2.7版本之后新增的一个功能,主要用于减轻注册中心的压力。
    • 它将部分原本存储在注册中心的内容(如服务元数据)转移到元数据报告中心进行存储和管理。
    • 元数据中心的数据只是给自己使用的,当元数据发生变化时,不需要通知对端(如服务消费者),从而降低了注册中心的负载。
    • Dubbo的MetadataReportService是负责元数据报告服务的接口,它定义了如何发布、获取、移除服务的元数据等操作。

总结来说,Config Center主要用于外部化配置和服务治理规则的管理,而Metadata Report则专注于服务元数据的存储和管理,以减轻注册中心的压力。它们在Dubbo的架构中各自承担不同的职责,共同支持Dubbo的服务注册、发现和治理功能。

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值