【译】gRPC名称解析

原文:gRPC Name Resolution 翻译整理: 本站 译文链接:【译】gRPC名称解析。 转载请保留原文出处和译文译者和出处。 概览 gRPC支持将DNS作为默认名称系统。 在各种部署中使用了许多其他类型的名称系统。 我们支持足够通用的API,以支持各种名称系统和名称的相应语法。 各种

gRPC微服务

原文:gRPC Name Resolution 翻译整理: 本站 译文链接:【译】gRPC名称解析。 转载请保留原文出处和译文译者和出处。

概览

gRPC支持将DNS作为默认名称系统。 在各种部署中使用了许多其他类型的名称系统。 我们支持足够通用的API,以支持各种名称系统和名称的相应语法。 各种语言的gRPC客户端库将提供一种插件机制,以便可以插入用于不同名称系统的解析器。

详细设计

名称语法

用于 gRPC 通道构造的完全限定的自包含名称系统使用 RFC 3986中定义的URI 语法.

URI scheme指示要使用的解析程序插件。 如果未指定scheme前缀或scheme未知,则默认使用dns scheme。URI路径指示要解析的名称。

大多数gRPC实现都支持以下URI schemes:

  • dns:[//authority/]host[:port] -- DNS (默认)
    • host是要通过DNS解析的主机。
    • port是每个地址要返回的端口。 如果未指定,则使用443(但对于不安全的通道,某些实现默认为80)。
    • authority 指示要使用的DNS服务器,尽管只有某些实现才支持。 (在C-core中,默认的DNS解析器不支持此功能,但是基于c-ares的解析器支持以“ IP:port”的形式指定此名称。)
  • unix:path, unix://absolute_path --Unix域套接字(只是在Unix系统)
    • path 指示所需套接字的位置.
    • 在第一种形式中,路径可以是相对的或绝对的。 在第二种形式中,路径必须是绝对(即,实际上将有三个斜线,两个斜线在路径之前,另一个斜线开始绝对路径)。
  • unix-abstract:abstract_path -- 抽象名称空间中的Unix域套接字(只是在Unix系统)
    • abstract_path指示抽象名称空间中的名称.
    • 该名称与文件系统路径名没有关系.
    • 没有权限限制将应用于套接字-任何进程/用户都可以访问套接字
    • 抽象套接字的基础实现使用空字节('\ 0')作为第一个字符。实现将会前置这个null。不要在abstract_path中包含null。
    • abstract_path不能包含null字节.

gRPC C核心实现支持以下scheme,但其他语言可能不支持以下scheme:

  • ipv4:address[:port][,address[:port],...] -- IPv4 地址
    • 能够指定多个以逗号分割的地址,地址形式为address[:port]:
      • address 使用的IPv4地址.
      • port 使用的端口.如果没有指定, 使用443.
  • ipv6:address[:port][,address[:port],...] -- IPv6 地址
    • 能够指定多个以逗号分割的地址,地址形式为 address[:port]:
      • address 是使用的IPv6地址. 为了和 port一起使用, address 必须 用方括号括起来 ([ and ]). 例如: ipv6:[2607:f8b0:400e:c00::ef]:443 或者 ipv6:[::]:1234
      • port 使用的端口.如果没有指定, 使用443.

在未来, 额外的 schemes 例如 etcd 能够被添加.

解析插件

gRPC客户端库将使用指定的scheme来选择正确的解析器插件,并将完整的名称字符串传递给它。

解析器应该能够连接到认证机构(authority)并获得一个解析,认证机构将结构返回给gRPC客户端库。返回的内容包括:

  • 解析地址列表(IP地址和端口)。每个地址可以具有一组任意属性 (key/value 对) 与它关联,可以用来将信息从解析器传递到负载平衡策略。
  • 服务配置信息:service config.

插件API允许解析器连续监视端点并根据需要返回更新的解析结果。

备注:

1.C-core是grpc共享C 核心库 src/core.

2.**c-ares**是一个用于异步DNS请求(包括名称解析)的C库。

ABOUT THE AUTHOR

织织

前大厂程序员、AI 工具开发者,正在记录从技术到产品的实践。

关于作者
DISCUSSION

评论与讨论

留下你的想法