Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
trickMin opened this issue Apr 1, 2024 · 9 comments
Open

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

trickMin opened this issue Apr 1, 2024 · 9 comments

Comments

@trickMin
Copy link

trickMin commented Apr 1, 2024

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:
@nocvalight
Copy link
Member

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

@trickMin
Copy link
Author

trickMin commented Apr 1, 2024

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

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

@nocvalight
Copy link
Member

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

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

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

@trickMin
Copy link
Author

trickMin commented Apr 1, 2024

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

@nocvalight
Copy link
Member

nocvalight commented Apr 1, 2024

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

@trickMin
Copy link
Author

trickMin commented Apr 1, 2024

好的 十分感谢

@trickMin
Copy link
Author

trickMin commented Apr 3, 2024

请问,我基于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'
}

@nocvalight
Copy link
Member

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

@jotzhao
Copy link

jotzhao commented May 27, 2024

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注册上去?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants