dubbo应用级服务发现初体验

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 了解dubbo的朋友知道,dubbo的provider启动时向注册中心注册,consumer从注册中心消费。目前dubbo往注册中心上注册的数据是接口级,而应用级服务发现是往注册中心上注册实例(ip+port),两者的区别只是注册的粒度不同。

dubbo应用级服务发现介绍


了解dubbo的朋友知道,dubbo的provider启动时向注册中心注册,consumer从注册中心消费。


目前dubbo往注册中心上注册的数据是接口级,而应用级服务发现是往注册中心上注册实例(ip+port),两者的区别只是注册的粒度不同。


至于为什么会出现应用级服务发现,有如下几点原因


  • 与业界主流微服务模型对齐,比如 SpringCloud、Kubernetes Native Service 等
  • 减少注册数据,提升性能


为什么要写这篇文章


在dubbo2.7.5版本中发布了应用级服务发现


640.png


官方的release note中只有这么一句话提到,给出的信息就两点:


  • 支持一种新的服务发现粒度:应用级服务发现
  • 尚处于BETA版本


且并没有相关官方文档介绍如何使用。


网上搜索了一些文章,只是一些方向性原理性的介绍,如《Dubbo 迈出云原生重要一步 - 应用级服务发现解析》、《Apache-Dubbo-服务自省架构设计》(非公众号文章,可网上搜索,作者小马哥)。


原理、方向固然重要,但想试用下dubbo的应用级服务发现却不知道如何配置,于是接下来从网上的碎片和源码来搭建一下dubbo的应用级服务发现demo


体验应用级服务发现


环境搭建


这里介绍下我常用的搭建dubbo源码调试的环境,简单有效。


简单的让dubbo跑起来只要一个zookeeper作为注册中心即可。


使用docker来搭建zk环境:


docker pull zookeeper
docker run -p 2181:2181  -d zookeeper:latest


dubbo源码调试环境,只需要从github上下载源码


git clone https://github.com/apache/dubbo.git


使用源码自带的demo即可,dubbo运行方式有很多,注解、api、xml等方式,选择你熟悉的即可,没有本质区别


640.png



两种服务发现


接口级服务发现


dubbo默认就是接口级服务注册,只要找个provider的demo启动就行,启动好我们看一下zk上注册的数据


640.png


/dubbo 目录下的configmetadata是2.7之后引入的“三大中心”,这块不在本文讨论范围,暂时忽略


/dubbo/org.apache.dubbo.demo.DemoService即是注册上去的服务,下面挂了一个临时节点


[dubbo%3A%2F%2F172.23.234.91%3A20880%2Forg.apache.dubbo.demo.DemoService%3Fanyhost%3Dtrue%26application%3Ddubbo-demo-api-provider%26default%3Dtrue%26deprecated%3Dfalse%26dubbo%3D2.0.2%26dynamic%3Dtrue%26generic%3Dfalse%26interface%3Dorg.apache.dubbo.demo.DemoService%26metadata-type%3Dremote%26methods%3DsayHello%2CsayHelloAsync%26pid%3D90356%26release%3D%26side%3Dprovider%26timestamp%3D1599039616611]


urldecode一下


[dubbo://172.23.234.91:20880/org.apache.dubbo.demo.DemoService?anyhost=true&application=dubbo-demo-api-provider&default=true&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=org.apache.dubbo.demo.DemoService&metadata-type=remote&methods=sayHello,sayHelloAsync&pid=90356&release=&side=provider&timestamp=1599039616611]


可以看到注册上去的是一些元数据,比如ip、port、interface、methods等


应用级服务发现


应用级服务发现的配置,在网上能找到的资料很少,这里我也是翻遍了资料,加上自己尝试,得出的配置,除了配置zk地址,还需要开启应用级服务发现:


dubbo.registry.parameters[registry-type]=service


用代码是这样写


RegistryConfig registryConfig = new RegistryConfig("zookeeper://127.0.0.1:2181");
Map<String, String> params = new HashMap<>();
params.put("registry-type", "service");
registryConfig.setParameters(params);


provider与consumer都需要这样写,且consumer还需要在reference上配置services,指向provider的applicationName,表示需要消费这个应用


ReferenceConfig<DemoService> reference = new ReferenceConfig<>();
reference.setInterface(DemoService.class);
reference.setGeneric("true");
reference.setServices("dubbo-demo-api-provider");
RegistryConfig registryConfig = new RegistryConfig("zookeeper://127.0.0.1:2181");
Map<String, String> params = new HashMap<>();
params.put("registry-type", "service");
registryConfig.setParameters(params);


zk上注册的数据变成了在/services


640.png


我们发现在服务维度的注册的元数据不见了,所以此时consumer会先和provider建立连接,再去获取元数据。


最后


本文通过实例介绍了dubbo新版本提供的应用级维度服务注册发现能力,也只是和现有其他的微服务发现模型对齐,我们在实际中的运用还需要深入思考。


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
6月前
|
缓存 负载均衡 Dubbo
Dubbo 第二节_ Dubbo的基本应用与高级应用
官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/loadbalance/ 如果在消费端和服务端都配置了负载均衡策略,以消费端为准。 这其中⽐较难理解的就是最少活跃调⽤数是如何进⾏统计的? 讲道理,最少活跃数应该是在服务提供者端进⾏统计的,服务提供者统计有多少个请求正在执⾏中。 但在Dubbo中,就是不讲道理,它是在消费端进⾏统计的,为什么能在消费端进⾏统计? 逻辑是这样的:官⽹地址:http://dubbo.apache.org/zh/docs
|
25天前
|
Dubbo 应用服务中间件 Apache
Dubbo 应用切换 ZooKeeper 注册中心实例,流量无损迁移
如果 Dubbo 应用使用 ZooKeeper 作为注册中心,现在需要切换到新的 ZooKeeper 实例,如何做到流量无损?
17 4
|
2月前
|
缓存 负载均衡 Dubbo
Dubbo技术深度解析及其在Java中的实战应用
Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
77 6
|
4月前
|
Kubernetes Dubbo Cloud Native
如何将Dubbo应用接入服务网格
介绍使用传统Dubbo微服务体系的客户要如何将自己的服务接入到服务网格这一新一代云原生基础设施。
|
6月前
|
负载均衡 Dubbo Java
Dubbo 第一节_ Dubbo框架介绍与手写模拟Dubbo 第二节_ Dubbo的基本应用与高级应用
官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/generic-service/官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/local-mock/官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/async-call/
|
6月前
|
负载均衡 Dubbo Java
Dubbo 的心脏:理解和应用多种协议【十三】
Dubbo 的心脏:理解和应用多种协议【十三】
74 0
|
6月前
|
Dubbo 应用服务中间件 Nacos
要让一个Dubbo-Consumer应用通过Higress调用Nacos里面的服务
要让一个Dubbo-Consumer应用通过Higress调用Nacos里面的服务
58 2
|
负载均衡 监控 Dubbo
Dubbo底层原理分析和分布式实际应用
Dubbo底层原理分析和分布式实际应用
|
Dubbo 应用服务中间件 API
2. 介绍一下 Dubbo 在项目中的应用场景,怎么用的?
2. 介绍一下 Dubbo 在项目中的应用场景,怎么用的?
105 0
|
SQL 缓存 Dubbo
探索 Java ServiceLoader、Dubbo ExtensionLoader:构建灵活可扩展的应用程序的利器(下)
探索 Java ServiceLoader、Dubbo ExtensionLoader:构建灵活可扩展的应用程序的利器(下)
121 0