青鱼292 2023-10-31 15:11 采纳率: 89.3%
浏览 4
已结题

Map-over-xds如何对接第三方注册中心?

Map-over-xds如何对接第三方注册中心?接包含哪些方法?推送map的时机有哪几类

  • 写回答

1条回答

  • 谐云 谐云官方账号 2023-10-31 15:38
    关注

    编写 MCP-over-XDS server。然后将该server的地址配置到pilot 的configSource 参数中。pilot 启动的时候,就会向目的 MCP-over-XDS server 发起订阅请求,并建立 grpc 链接。MCP-over-XDS server 读取 注册中心的数据,并转换为ServiceEntry,然后 push 给 pilot。pilot接受到数据后,会对比内存中的数据,保证数据一致。

    img

    其中 MCP-over-XDS server 主要包含两部分:

    一部分是Service watcher,用于监听服务注册中心,一旦有服务变更,就需要触发一次MCP推送,将最新的服务信息同步给istio。

    另一部分是XDS grpc server,用于向istiod推送MCP协议的数据

    要对接一个服务注册中心,只需实现Registry接口即可

    img

    接口包含3个方法:

    1. AppendServiceChangeHandler:添加“服务更新时需要触发的回调函数”,也就是说,在发现该注册中心的服务变更时,需要触发serviceChanged回调函数

    2. Run:运行service watcher,开始监听注册中心

    3. ServiceEntries:返回目前注册中心中的所有服务,以istio ServiceEntry的形式输出

    触发XDS grpc server推送MCP的时机有2类:

    1. istiod启动时,会向mcp server发送一个初始(initial)请求,获取当前注册中心的所有服务服务信息

    2. 注册中心的服务变更时

    在发生上述事件后,grpc server会调用Service watcher的ServiceEntries方法,获取到最新的服务信息,并用MCP协议包装,最终作为XDS协议的payload发送给istiod。

    推送的过程存在一个防抖机制(参考istio推送XDS的过程),目的是为了避免频繁的服务更新导致多次MCP推送。防抖会将短时间内的多次更新事件合并为一次,减轻推送压力。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月8日
  • 已采纳回答 10月31日
  • 创建了问题 10月31日