元数据中心
概述
元数据中心为Dubbo中的两类元数据提供了存取能力。
- 地址发现元数据,用于应用级服务发现。
- 服务运维元数据,用于外围运维系统如可视化控制台进行服务查询、测试等。
地址发现元数据
Dubbo3中引入了应用级服务发现机制用来解决异构微服务体系互通与大规模集群实践的性能问题,应用级服务发现将全面取代2.X时代的接口级服务发现。
同时为了保持Dubbo面向服务/接口的应用型、服务治理的灵活性,Dubbo围绕应用级服务发现构造了一套元数据机制,即接口 - 应用映射关系
与接口配置元数据
。
接口 - 应用映射关系
在Dubbo中,Consumer只订阅需要的地址列表,相对于拉取/订阅全量地址列表,这样具有更好的性能优势。
在应用级服务发现模型中,Dubbo Consumer只声明了要消费的的接口列表,Consumer需要能将接口转换为Provider应用名才能进行精准服务订阅。
在元数据中心维护着接口->服务名
的对应关系,Dubbo3中通过provider启动时主动向元数据中心上报实现。
接口(service name) - 应用(Provider application name)的映射关系是一对多的。
[zk: localhost:2181(CONNECTED) 3] get /dubbo/mapping/com.doudou.demo.api.DemoService
ServiceApplication
接口配置元数据
接口级配置元数据
是作为地址发现的补充,相比于SpringCloud等地址发现只能同步IP、port信息,Dubbo的服务发现机制可以同步接口列表、接口定义、接口级参数配置等信息。
这部分内容根据当前应用的自身信息、以及接口信息计算而来,并且从性能角度出发,还根据元数据生成revision,以实现不同机器实例间的元数据聚合。
可以通过设置
dubbo.metadata-report.report-metadata=false
关闭元数据上报
zookeeper接口配置元数据保存位置:/dubbo/metadata/{application name}/{revision}
服务运维元数据
Dubbo上报的服务运维元数据通常为各种运维系统所用,比如服务测试、网关数据映射、服务静态依赖关系分析等。
可通过设置
dubbo.metadata-report.report-definition=false
关闭元数据上报。
服务端上报元数据
get /dubbo/metadata/com.doudou.demo.api.HelloService/provider/ServiceApplication{
"annotations": [],"canonicalName": "com.doudou.demo.api.HelloService","codeSource": "file:/C:/Users/admin/Documents/project/dubboDemo02/demo-api/target/classes/","methods": [{"annotations": [],"name": "hello","parameterTypes": ["java.lang.String"],"parameters": [],"returnType": "java.lang.String"}],"parameters": {"pid": "29276","release": "3.3.0","anyhost": "true","side": "provider","interface": "com.doudou.demo.api.HelloService","application": "ServiceApplication","dubbo": "2.0.2","executor-management-mode": "isolation","file-cache": "true","methods": "hello","logger": "slf4j","deprecated": "false","qos.port": "22222","service-name-mapping": "true","qos.enable": "true","generic": "false","bind.port": "20880","bind.ip": "10.1.6.137","prefer.serialization": "hessian2,fastjson2","background": "false","dynamic": "true","qos.accept.foreign.ip": "false","timestamp": "1744284257628"},"types": [{"enums": [],"items": [],"properties": {},"type": "java.lang.String"}],"uniqueId": "com.doudou.demo.api.HelloService@file:/C:/Users/admin/Documents/project/dubboDemo02/demo-api/target/classes/"
}
客户端上报元数据
get /dubbo/metadata/com.doudou.demo.api.HelloService/provider/ServiceApplication{"interface": "com.doudou.demo.api.DemoService","release": "3.3.0","dubbo": "2.0.2","pid": "12056","application": "ConsumerApplication","side": "consumer","executor-management-mode": "isolation","file-cache": "true","register.ip": "10.1.6.137","methods": "sayHello","logger": "slf4j","qos.port": "22223","qos.enable": "true","unloadClusterRelated": "false","background": "false","sticky": "false","qos.accept.foreign.ip": "false","timestamp": "1744286126413"
}
元数据上报工作机制
元数据上报默认是一个异步的过程。为了更好的控制异步行为,元数据配置组件(metadata-report)开放了两个配置项:
- 失败重试
- 每天定时重新刷新
retrytimes 失败重试
失败重试可以通过retrytimes(重试次数,默认100),retryperiod(重试周期,默认3000ms)进行设置。
定时刷新
默认开启,可以通过设置cycleReport=false进行关闭。
元数据配置项
dubbo.metadata-report.address=zookeeper://127.0.0.1:2181
dubbo.metadata-report.username=xxx ##非必须
dubbo.metadata-report.password=xxx ##非必须
dubbo.metadata-report.retry-times=30 ##非必须,default值100
dubbo.metadata-report.retry-period=5000 ##非必须,default值3000
dubbo.metadata-report.cycle-report=false ##非必须,default值true
dubbo.metadata-report.sync.report=false ##非必须,default值为false