服务配置

服务所有者如何使用服务配置来控制客户端行为。

服务配置

服务所有者如何使用服务配置来控制客户端行为。

概述

服务配置指定了 gRPC 客户端在与 gRPC 服务器交互时应该如何表现。服务所有者可以提供一个服务配置,其中包含所有服务客户端的预期行为。服务配置中的设置始终应用于特定的目标字符串(例如“api.myapp.com”,而不是全局设置。

服务配置控制的行为

服务配置中的设置会影响客户端的负载均衡、调用行为和健康检查。

本页概述了服务配置中的选项,但完整的服务配置数据结构已通过 protobuf 定义 文档化。

负载均衡

一个服务可以由多个服务器组成,负载均衡配置指定了来自客户端的调用应该如何分布在这些服务器之间。默认情况下,使用 pick_first 负载均衡策略,但可以在服务配置中指定其他策略。例如,指定 round_robin 策略将使客户端在服务器之间轮流使用,而不是重复使用第一个服务器。

调用行为

RPC 可以通过多种方式进行配置

  • 如果启用了 等待就绪,如果客户端无法连接到后端,RPC 将被延迟,而不是立即失败。
  • 可以提供一个调用 超时,指示客户端在放弃 RPC 之前应该等待的最长时间。
  • 其中之一
    • 重试 策略(最大尝试次数、退避设置、可重试状态码)
    • 对冲 策略(最大尝试次数、延迟、非致命状态码)

健康检查

可以通过提供健康检查名称来配置客户端以执行 健康检查。然后,客户端将使用标准的 gRPC 健康检查服务。

获取服务配置

可以通过名称解析或通过客户端应用程序以编程方式向客户端提供服务配置。

名称解析

gRPC 名称解析机制 允许使用可插拔的名称解析器实现。这些实现返回与名称关联的地址以及关联的服务配置。这是服务所有者可以用来将他们的服务配置分发到 gRPC 客户端群组的机制。

  • xDS 名称解析器会将它从控制平面接收到的 xDS 配置转换为相应的服务配置。
  • Go 实现中的标准 DNS 名称解析器支持 存储为 TXT 记录 的服务配置,这些配置位于名称服务器上。

以编程方式

gRPC 客户端 API 提供了一种在 JSON 格式中指定服务配置的方法。这用于提供一个默认的服务配置,该配置将在名称解析器未提供服务配置的情况下使用。它在某些测试情况下也很有用。

服务配置示例

下面的示例执行以下操作

  • 启用 round_robin 负载均衡策略。
  • 设置一个默认的调用超时时间为 1 秒,该超时时间适用于所有服务中的所有方法。
  • 覆盖 foo 服务中 bar 方法以及 baz 服务中所有方法的超时时间,使其为 2 秒。
{
  "loadBalancingConfig": [ { "round_robin": {} } ],
  "methodConfig": [
    {
      "name": [{}],
      "timeout": "1s"
    },
    {
      "name": [
        { "service": "foo", "method": "bar" },
        { "service": "baz" }
      ],
      "timeout": "2s"
    }
  ]
}
上次修改时间:2024 年 2 月 29 日:使用绝对路径而不是绝对 URL (#1268) (4f733b4)