sofastack/sofa-registry

如何获取sofa-registry全量服务(配置)信息?

Opened this issue · 9 comments

Your question

我这在做系统的对接,希望有一种方式可以获取sofa-registry全量服务(配置)信息,我看Java SDK只能订阅单独的dataId信息,有没有什么方式可以获取全量的,例如SDK方式或HTTP方式?

Your scenes

对接系统,需要获取全量信息,也需要后续支持变更推送等

Your advice

describe the advice or solution you'd like

Environment

  • SOFARegistry version: 6.x
  • JVM version (e.g. java -version):
  • OS version (e.g. uname -a):
  • Maven version:
  • IDE version:

curl ${dataip}:9622/digest/datum/getDataInfoIdList
这个http api可以获取到单台data server上的所有的service列表,目前没有api把所有data server上的service列表做一个汇总。

那就是需要基于所有机器做一次汇总吗

getDataInfoIdList 这个接口是只拿到 DataInfoId 列表吧 应该不包含 详细数据吧?

那就是需要基于所有机器做一次汇总吗

getDataInfoIdList 这个接口是只拿到 DataInfoId 列表吧 应该不包含 详细数据吧?

对,需要基于所有机器做一次汇总;getDataInfoIdList只获取dataid列表,如果需要获取详细数据,可以再根据com.alipay.sofa.registry.server.data.resource.DataDigestResource#getDatumByDataInfoId 这个http api遍历查询每一个service的详细数据。
没有把这些动作包含在一个api全量返回,主要是数据量太大时这样的api会有性能问题。

好的,大概了解了;那想再问一个问题,如果我希望用一个Java客户端接入SDK,增量地订阅服务,比如动态地增加订阅数量,这样可行性高吗?用这个Java客户端订阅1000个服务的可靠性高吗,因为我理解订阅一个服务就会开启一个Thread监听,会对资源产生负担嘛?

  1. java进程在运行中动态新增订阅某个服务是一个比较常见的场景,可以结合sofa rpc或者dubbo之类的rpc框架来完成,也可以直接调用sofa registry skd的订阅服务的api来完成。
  2. 单个java进程能订阅多少个服务,取决于服务器的规格,每个服务下面的服务发布者数量,服务的变更推送频率。开启线程不是主要的性能消耗点,主要消耗是在订阅服务的数据量大小,以及序列化/反序列化数据产生的cpu/mem消耗。以4c8g的java进程为例,如果每个服务只有 几个 的服务发布者,那么订阅1000个服务是可以支撑的,但是服务每个服务下面有 > 100 的服务发布者,java进程可能就支持不住了。具体的数据需要以你的场景压测来评估。

好的 十分感谢

请问,我基于client API的订阅回调获取到了UserData(如下JSON所示),但其中不包含发布方的method,这块信息基于SDK该如何获取?

DefaultUserData{
    zoneData={
        DEFAULT_ZONE=[
            10.10.10.10:12200?rpcVer=50502&serialization=hessian2&weight=100&timeout=3000&appName=service-provider&p=1&v=4.0&_SERIALIZETYPE=hessian2&_WEIGHT=100&_TIMEOUT=3000&app_name=service-provider&startTime=1711957038325
        ]
    }, 
    localZone='DEFAULT_ZONE'
}

目前开源的rpc框架,比如dubbo和sofarpc,在注册发布者信息的时候,都是注册在interface级别,不会注册在method级别。所以使用这些rpc框架的时候,注册中心是没有这个数据的。
除非你修改rpc框架的逻辑将method信息也发布到注册中心。

curl ${dataip}:9622/digest/datum/getDataInfoIdList 这个http api可以获取到单台data server上的所有的service列表,目前没有api把所有data server上的service列表做一个汇总。

我在本地使用integration方式起动了之后,使用 curl http://localhost:9622/digest/datum/getDataInfoIdList 会报404?是我启动的有问题还是的确没有provider注册上去?