首页 > 其他分享 >Apache Dubbo 3.0之服务发现

Apache Dubbo 3.0之服务发现

时间:2023-10-29 22:05:29浏览次数:30  
标签:Dubbo 服务 注册 发现 地址 3.0 Apache Dubbo3 100

服务发现,即消费端自动发现服务地址列表的能力,是微服务框架需要具备的关键能力,借助于自动化的服务发现,微服务之间可以在无需感知对端部署位置与 IP 地址的情况下实现通信。

实现服务发现的方式有很多种,Dubbo 提供的是一种 Client-Based 的服务发现机制,通常还需要部署额外的第三方注册中心组件来协调服务发现过程,如常用的 Nacos、Consul、Zookeeper 等,Dubbo 自身也提供了对多种注册中心组件的对接,用户可以灵活选择。

Dubbo 基于消费端的自动服务发现能力,其基本工作原理如下图:

Apache Dubbo 3.0之服务发现_服务发现

服务发现的一个核心组件是注册中心,Provider 注册地址到注册中心,Consumer 从注册中心读取和订阅 Provider 地址列表。 因此,要启用服务发现,需要为 Dubbo 增加注册中心配置:

以 dubbo-spring-boot-starter 使用方式为例,增加 registry 配置

# application.properties
dubbo
 registry
  address: zookeeper://127.0.0.1:2181

What’s New in Dubbo3

就使用方式上而言,Dubbo3 与 Dubbo2 的服务发现配置是完全一致的,不需要改动什么内容。但就实现原理上而言,Dubbo3 引入了全新的服务发现模型 - 应用级服务发现, 在工作原理、数据格式上已完全不能兼容老版本服务发现。

  • Dubbo3 应用级服务发现,以应用粒度组织地址数据
  • Dubbo2 接口级服务发现,以接口粒度组织地址数据

Dubbo3 格式的 Provider 地址不能被 Dubbo2 的 Consumer 识别到,反之 Dubbo2 的消费者也不能订阅到 Dubbo3 Provider。

  • 对于新用户,我们提倡直接启用 Dubbo3 的默认行为,即启用应用级服务发现,参见《samples/应用级服务发现》;
  • 对于老用户,要面临如何平滑迁移到应用级服务发现的问题,考虑到老用户的规模如此之大,Dubbo3 默认保持了接口级地址发现的行为,这保证了老用户可以直接无感升级到 Dubbo3。 而如果要开启应用级服务发现,则需要通过配置显示开启(双注册、双订阅),具体开启与平滑迁移过程,可参见《migration/地址发现迁移指南》。

应用级服务发现简介

概括来说,Dubbo3 引入的应用级服务发现主要有以下优势

  • 适配云原生微服务变革。云原生时代的基础设施能力不断向上释放,像 Kubernetes 等平台都集成了微服务概念抽象,Dubbo3 的应用级服务发现是适配各种微服务体系的通用模型。
  • 提升性能与可伸缩性。支持超大规模集群的服务治理一直以来都是 Dubbo 的优势,通过引入应用级服务发现模型,从本质上解决了注册中心地址数据的存储与推送压力,相应的 Consumer 侧的地址计算压力也成数量级下降;集群规模也开始变得可预测、可评估(与 RPC 接口数量无关,只与实例部署规模相关)。

下图是 Dubbo2 的服务发现模型:Provider 注册服务地址,Consumer 经过注册中心协调并发现服务地址,进而对地址发起通信,这是被绝大多数微服务框架的经典服务发现流程。而 Dubbo2 的特殊之处在于,它把 “RPC 接口”的信息也融合在了地址发现过程中,而这部分信息往往是和具体的业务定义密切相关的。

Apache Dubbo 3.0之服务发现_微服务_02

而在接入云原生基础设施后,基础设施融入了微服务概念的抽象,容器化微服务被编排、调度的过程即 完成了在基础设施层面的注册。如下图所示,基础设施即承担了注册中心的职责,又完成了服务注册的动作,而 “RPC 接口”这部分信息,由于与具体的业务相关,不可能也不适合被基础设施托管。

Apache Dubbo 3.0之服务发现_服务发现_03

在这样的场景下,对 Dubbo3 的服务注册发现机制提出了两个要求: Dubbo3 需要在原有服务发现流程中抽象出通用的、与业务逻辑无关的地址映射模型,并确保这部分模型足够合理,以支持将地址的注册行为和存储委托给下层基础设施 Dubbo3 特有的业务接口同步机制,是 Dubbo3 需要保留的优势,需要在 1 中定义的新地址模型之上,通过框架内的自有机制予以解决。

这样设计的全新的服务发现模型,在架构兼容性、可伸缩性上都给 Dubbo3 带来了更大的优势。

Apache Dubbo 3.0之服务发现_服务发现_04

在架构兼容性上,如上文所述,Dubbo3 复用下层基础设施的服务抽象能力成为了可能;另一方面,如 Spring Cloud 等业界其它微服务解决方案也沿用这种模型, 在打通了地址发现之后,使得用户探索用 Dubbo 连接异构的微服务体系成为了一种可能。

Dubbo3 服务发现模型更适合构建可伸缩的服务体系,这点要如何理解? 这里先举个简单的例子,来直观的对比 Dubbo2 与 Dubbo3 在地址发现流程上的数据流量变化:假设一个微服务应用定义了 100 个接口(Dubbo 中的服务), 则需要往注册中心中注册 100 个服务,如果这个应用被部署在了 100 台机器上,那这 100 个服务总共会产生 100 * 100 = 10000 个虚拟节点;而同样的应用, 对于 Dubbo3 来说,新的注册发现模型只需要 1 个服务(只和应用有关和接口无关), 只注册和机器实例数相等的 1 * 100 = 100 个虚拟节点到注册中心。 在这个简单的示例中,Dubbo 所注册的地址数量下降到了原来的 1 / 100,对于注册中心、订阅方的存储压力都是一个极大的释放。更重要的是, 地址发现容量彻底与业务 RPC 定义解耦开来,整个集群的容量评估对运维来说将变得更加透明:部署多少台机器就会有多大负载,不会像 Dubbo2 一样, 因为业务 RPC 重构就会影响到整个集群服务发现的稳定性。

标签:Dubbo,服务,注册,发现,地址,3.0,Apache,Dubbo3,100
From: https://blog.51cto.com/u_15123639/8081266

相关文章

  • [ApacheCommon组件使用-IO]关于JavaIO,相当输入的一个工具就是ApacheCommon-IO
    1.首先,如果你使用的是maven或者gradle建立的项目,maven只需要<!--https://mvnrepository.com/artifact/commons-io/commons-io--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId>......
  • org.apache.subversion.javahl.ClientException: The working copy needs to be upgra
    eclipse不编译,每次修改代码控制台都显示错误svn:Theworkingcopyneedstobeupgradedorg.apache.subversion.javahl.ClientException:Theworkingcopyneedstobeupgradedsvn:Workingcopy‘E:\aliyun-spirit\spiritmap0916′istooold(format10,createdbySubversi......
  • Dubbo 路由及负载均衡性能优化
    作者:vivo互联网中间件团队-WangXiaochuang本文主要介绍在vivo内部针对Dubbo路由模块及负载均衡的一些优化手段,主要是异步化+缓存,可减少在RPC调用过程中路由及负载均衡的CPU消耗,极大提升调用效率。一、概要vivo内部Java技术栈业务使用的是ApacheDubbo框架,基于开源社区2.7.x版本......
  • Apache Presto:一个统一多数据源的SQL查询引擎
    ApachePresto是一个开源的分布式SQL查询引擎,它可以在大数据环境下进行交互式的数据分析。Presto允许用户使用熟悉的SQL语法在不同的数据源上进行查询,比如Hive、Cassandra、PostgreSQL、Kafka、MySQL、ElasticSearch等,让用户可以在不同数据源上进行统一查询。Presto的......
  • 实战系列(一)Dubbo和Spring Cloud的区别,包含代码详解
    Dubbo和SpringCloud都是微服务架构中的重要框架,但它们的定位和关注点不同。Dubbo是阿里巴巴开源的一个高性能、轻量级的RPC框架,主要用于构建微服务之间的服务治理。而SpringCloud是基于SpringBoot的一个微服务架构开发工具,它提供了一系列的开发工具和服务,帮助开发者快......
  • 查看Linux 、Apache 、 MySQL 、 PHP 版本的方法
    1.查看linux的内核版本,系统信息,常用的有三种办法:uname-a;more/etc/issue;cat/proc/version;2.查看apache的版本信息如果是通过yum,或者是rpm安装的,可以使用rpm-qa|gerphttpd来查看;还可以通过httpd-v来查询;当然,安装好apache后,可以直接elink回环查看apache的信息。3.查看ph......
  • Redis 6 学习笔记 4 —— 通过秒杀案例,学习并发相关和apache bench的使用,记录遇到的问
    背景这是某硅谷的redis案例,主要问题是解决计数器和人员记录的事务操作按照某硅谷的视频敲完之后出现这样乱码加报错的问题 乱码的问题要去tomcat根目录的conf文件夹下修改logging.properties,把下面两个encoding参数都改成GBK就行。其实错误也很明显(ClassNotFoundExceptio......
  • 教你看懂Web 3.0:未来的互联网
    众所周知,互联网已经成为我们日常生活的一部分,我们用它来搜索信息、社交、购物,甚至观看视频和听音乐。但你是否曾经想过,未来的互联网会是什么样子?让我们来谈谈Web3.0,它是互联网的下一个大版本,就像我们的手机升级操作系统一样。Web1.0:互联网的起始首先,让我们回顾一下Web1.0,也就是......
  • Vue3.0 中使用 wangEditor 富文本编辑器
    当使用Vue3.0版本时,wangEditor的使用方法略有不同。以下是在Vue3.0中使用wangEditor富文本编辑器的示例代码:```<template> <div>  <divref="editorContainer"></div>  <button@click="saveContent">保存</button> </div></template&......
  • Linux编译OpenSSL 3.0.0
    github仓库地址:https://github.com/openssl/openssl官网下载地址:https://www.openssl.org/source/old/#下载特定版本wgethttps://www.openssl.org/source/old/3.0/openssl-3.0.0-alpha3.tar.gztar-xvfopenssl-3.0.0-alpha3.tar.gz&&cdopenssl-3.0.0-alpha3#配......