gRPC -- Guides -- Custom Name Resolution
Custom Name Resolution自定义名称解析说明标准名称解析、自定义名称解析器接口以及如何编写实现。Overview概述名称解析的核心是服务发现。客户端发送 gRPC 请求时必须将服务名解析为 IP 地址。名称解析通常被等同于DNS但实际中常通过扩展或完全替换 DNS 来实现。gRPC 客户端默认使用 DNS 解析也支持以下解析机制表格解析器示例说明DNSgrpc.io:50051默认使用 DNSDNSdns:///grpc.io:50051额外斜杠用于指定 authorityUnix Domain Socketuds:///run/containerd/containerd.sock-xDSxds:///wallet.grpcwallet.io-IPv4ipv4:198.51.100.123:50051仅部分语言支持注意上述三斜杠///遵循RFC-3986URI 格式。双斜杠后、三斜杠前的部分为authority表示资源所在服务器。部分解析器不需要 authority因此留空形成连续三斜杠。多语言支持自定义名称解析器接口用户可定义解析逻辑。注册后以my-resolver:开头的目标字符串会自动使用对应解析器例如my-resolver:///my-service。Custom Name Resolvers自定义名称解析器需要增强或替换 DNS 做服务发现时可使用自定义名称解析器例如基于Apache Zookeeper实现服务查找直接对接 Kubernetes API Server 解析无头服务自定义名称解析器相比标准 DNS 的关键优势响应式可基于监听模式实时接收名称服务器更新智能应对后端故障、扩缩容可向客户端连接提供service config用于定义路由、负载均衡等策略配合自定义负载均衡策略可构建 xDS 等复杂流量管理系统Life of a Target String目标字符串的生命周期各语言接口细节不同但整体流程一致客户端在进程启动时向全局注册中心注册NameResolverProvidergRPC 库将目标字符串交给对应解析器提供者解析器提供者返回NameResolver实例名称解析器与客户端连接交互完成解析并返回地址列表Language Support语言支持LanguageExampleJavaExampleGoExampleCNot supportedPythonNot supported