[译]gRPC 中的 xDS 功能

gRPC 中的 xDS 功能

原文:GRPC Core: xDS Features in gRPC

本文档列出了各种 gRPC 语言实现和版本所支持的 xDS 功能。

请注意,gRPC 客户端将简单地忽略它不支持的功能配置。gRPC 客户端不会生成日志来表明某些配置被忽略了。生成日志并保持更新是不切实际的,因为 xDS 有大量的 API 是 gRPC 不支持的,而且这些 API 也在不断发展。在一个 xDS 字段对应的功能被支持,但为该字段配置的值不被支持的情况下,gRPC 客户端将 NACK 这样的配置。我们建议阅读第一个关于 gRPC 中 xDS 支持的 gRFC,以了解设计理念。

不是所有的集群负载平衡策略都被支持。gRPC 客户端将 NACK 包含不支持集群负载平衡策略的配置。这将导致所有集群配置被客户端拒绝,因为 xDS 协议目前要求拒绝给定响应中的所有资源,而不是能够只拒绝响应中的个别资源。由于这一限制,在为服务配置所需的集群负载平衡策略之前,你必须确保所有客户端都支持该策略。例如,如果你把 ROUND_ROBIN 策略改为 RING_HASH,你必须确保所有客户端都升级到支持 RING_HASH 的版本。

EDS 策略将不支持 超额配置,这与 Envoy 不同。Envoy 在本地加权负载平衡和优先级故障转移中都考虑到了超额配置,但 gRPC 假设 xDS 服务器会在需要这种优雅故障转移时更新它来重定向流量。gRPC 将向 xDS 服务器发送 envoy.lb.does_not_support_overprovisioning 客户特征,告诉 xDS 服务器它不会执行优雅故障转移;xDS 服务器实现可以用它来决定自己是否执行优雅故障转移。

EDS 策略将不支持每端点(per-endpoint)统计;它将只报告每地点(per-locality)的统计。

如果一个 lb_endpoint 的健康状态不是 HEALTHY 或 UNKNOWN,则会被忽略。可选的 load_balancing_weight 总是被忽略。

最初,只支持 google_default 通道认证与 xDS 服务器进行认证。

下表中未列出的 gRPC 语言实现不支持 xDS 功能:

功能 gRFCs C++, Python, Ruby, PHP Java Go Node
gRPC 客户端通道中的 xDS 基础设置:
- LDS->RDS->CDS->EDS flow
- ADS stream
A27 v1.30.0 v1.30.0 v1.30.0 v1.2.0
负载均衡:
- Virtual host domains matching
- Only default path ("" or “/") matching
- Priority-based weighted round-robin locality picking
- Round-robin endpoint picking within locality
- Cluster route action
- Client-side Load reporting via LRS
A27 v1.30.0 v1.30.0 v1.30.0 v1.2.0
Request matching based on:

- Path (prefix, full path and safe regex)
- case_sensitive must be true else config is NACKed
- Headers

Request routing to multiple clusters based on weights
A28 v1.31.0 v1.31.0 v1.31.0 v1.3.0
Case insensitive prefix/full path matching:case_sensitive can be true or false v1.34.0 v1.34.0 v1.34.0 v1.3.0
Support for xDS v3 APIs A30 v1.36.0 v1.36.0 v1.36.0 v1.4.0
Support for xDS v2 APIs A27 < v1.51.0 < v1.53.0 TBA < v1.8.0
Maximum Stream Duration:Only max_stream_duration is supported. A31 v1.37.1 v1.37.1 v1.37.0 v1.4.0
Circuit Breaking:Only max_requests is supported. A32 v1.37.1 (N/A for PHP) v1.37.1 v1.37.0 v1.4.0
Fault Injection: Only the following fields are supported:delayabortmax_active_faultsheaders A33 v1.37.1 v1.37.1 v1.37.0 v1.4.0
Client Status Discovery Service A40 v1.37.1 (C++) v1.38.0 (Python) v1.37.1 v1.37.0 v1.5.0
Ring hash load balancing policy: Only the following policy specifiers are supported:headerfilter_state with key io.grpc.channel_idOnly XX_HASH function is supported. A42 v1.40.0 (C++ and Python) v1.40.1 1.41.0
Retry: Only the following fields are supported:retry_on for the following conditions: cancelled, deadline-exceeded, internal, resource-exhausted, and unavailable.num_retriesretry_back_off A44 v1.40.0 (C++ and Python) v1.40.1 1.41.0
Security: Uses certificate providers instead of SDS A29 v1.41.0 (C++ and Python) v1.41.0 1.41.0
Authorization (RBAC): LOG action has no effectCEL unsupported and rejected A41 v1.51.0 (C++ and Python) v1.42.0 1.42.0

Outlier Detection: Only the following detection types are supported:

  • Success Rate
  • Failure Percentage

备注:

截止2023年6月,最新的版本是:

  • Grpc-java: 1.55.1
  • grpc-go: 1.54.1
  • grpc-node:1.8.15
  • grpc (b based,C++, Python, Ruby, Objective-C, PHP, C#): 1.55.1
  • grpc官方没有rust的sdk!