Skip to content

路由表

dylanxu edited this page Mar 3, 2020 · 10 revisions

数据流

  1. 如图所示,整个数据流由 Guest方的业务系统向本方的proxy发起inference request在线预测接口开始。
  2. Guest proxy收到inference request后,(如果是http请求,proxy会先将http请求的数据转化成grpc),查询到本方serving-server的路由。这里,如果启用zk服务治理,必须proxy和serving-server都启用(application.properties中useZkRouter=true),服务启动都会在ZK中注册相应的内容,serving-proxy组件转发时会优先从ZK中去查找目标地址,没有找到目标地址时,则会从路由表(route_table.json)中查找,未启动ZK服务治理时,直接查询路由表。
  3. Guest proxy 通过grpc 把请求发到Guest serving-server。
  4. Guest serving-server 做本地推理,然后通过 Guest proxy 请求host方推理。
  5. Guest proxy 查询本地路由表,把 Guest serving-server 的推理请求 发到host方的proxy。
  6. Host proxy 把 Guest的推理请求路由到 Host的 serving-server,这里的路由规则与Guest类似(步骤2),基于zk或本地路由表。
  7. Host的 serving-server做推理,然后结果原路返回(host proxy -> guest proxy -> guest serving-server)。
  8. guest serving-server 整合两方推理,通过 guest proxy把最终推理结果返回给guest的业务调用方。

route_table.json 配置

{
  "route_table": {
    "default": {
      "default": [
        // 此处用于配置serving-proxy对外转发地址,如对端serving-proxy的grpc服务地址
        {
          "ip": "127.0.0.1",
          "port": 9999
        }
      ]
    },
    // 以下部分为当前serving-proxy所在节点(Party)路由规则,10000为己端PartyID,
    // 当前serving-proxy组件配置中的coordinator参数也应设置为PartyID,查找路由时会通过此参数在路由表中查询
    "10000": {
      // 在未找到对应role的路由地址时,会使用default的配置
      "default": [
        {
          "ip": "127.0.0.1",
          "port": 8889
        }
      ],
      // serving为所部署的serving-server所配置的serviceRoleName参数
      // 当使用ZK为注册中心时,优先从ZK中获取目标地址,未找到时从此路由表中查询
      "serving": [
        // 此处配置己端对应serving服务地址列表,ip和port对应serving-server所启动的grpc服务地址
        {
          "ip": "127.0.0.1",
          "port": 8080
        }
      ]
    }
  },
  // 此处配置当前路由表规则开启/关闭
  "permission": {
    "default_allow": true
  }
}