服务配置
服务所有者如何使用服务配置来控制客户端行为。
服务配置
服务所有者如何使用服务配置来控制客户端行为。
概述
服务配置指定了 gRPC 客户端与 gRPC 服务器交互时的行为方式。服务所有者可以提供一个服务配置,其中包含所有服务客户端的预期行为。服务配置中的设置总是应用于特定的目标字符串(例如“api.myapp.com”),而不是全局生效。
由服务配置控制的行为
服务配置中的设置会影响客户端负载均衡、调用行为和健康检查。
本页面概述了服务配置中的选项,但是完整的服务配置数据结构在一个 protobuf 定义 中有文档记录。
负载均衡
一个服务可以由多个服务器组成,负载均衡配置指定了如何将客户端的调用分发到这些服务器。默认情况下,使用 pick_first
负载均衡策略,但可以在服务配置中指定其他策略。例如,指定 round_robin
策略将使客户端轮流使用服务器,而不是重复使用第一个服务器。
调用行为
RPC 可以通过多种方式配置
- 启用 wait-for-ready 后,如果客户端无法连接到后端,RPC 将被延迟,而不是立即失败。
- 可以提供一个调用 超时时间,指示客户端在放弃 RPC 之前应等待的最长时间。
- 其中之一
注意
这些调用行为设置可以限制在单个服务或方法上。
通过设置一个 重试限流策略 可以进一步调整重试和对冲策略,但它将应用于所有服务和方法。
健康检查
客户端可以通过提供一个健康检查名称来配置进行 健康检查。客户端随后将使用标准的 gRPC 健康检查服务。
获取服务配置
服务配置可以通过名称解析或由客户端应用程序以编程方式提供给客户端。
名称解析
gRPC 名称解析机制 允许使用可插拔的名称解析器实现。这些实现返回与名称关联的地址以及关联的服务配置。这是服务所有者可以用来将服务配置分发给一组 gRPC 客户端的机制。
- xDS 名称解析器将从控制平面接收到的 xDS 配置转换为相应的服务配置。
- Go 实现中的标准 DNS 名称解析器支持将服务配置在名称服务器上 存储为 TXT 记录。
注意
尽管服务配置结构在 protobuf 定义中有文档记录,但客户端中的内部表示是 JSON 格式。名称解析器实现可以自由选择存储服务配置信息的方式,只要在名称解析时以 JSON 格式提供即可。通过编程方式
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)