mirror of https://github.com/grpc/grpc.git
The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
https://grpc.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.2 KiB
65 lines
2.2 KiB
# gRPC Name Resolution |
|
|
|
## Overview |
|
|
|
gRPC supports DNS as the default name-system. A number of alternative |
|
name-systems are used in various deployments. We support an API that is |
|
general enough to support a range of name-systems and the corresponding |
|
syntax for names. The gRPC client library in various languages will |
|
provide a plugin mechanism so resolvers for different name-systems can |
|
be plugged in. |
|
|
|
## Detailed Design |
|
|
|
### Name Syntax |
|
|
|
A fully qualified, self contained name used for gRPC channel construction |
|
uses the syntax: |
|
|
|
``` |
|
scheme://authority/endpoint_name |
|
``` |
|
|
|
Here, `scheme` indicates the name-system to be used. Currently, we |
|
support the following schemes: |
|
|
|
- `dns` |
|
|
|
- `ipv4` (IPv4 address) |
|
|
|
- `ipv6` (IPv6 address) |
|
|
|
- `unix` (path to unix domain socket -- unix systems only) |
|
|
|
In the future, additional schemes such as `etcd` could be added. |
|
|
|
The `authority` indicates some scheme-specific bootstrap information, e.g., |
|
for DNS, the authority may include the IP[:port] of the DNS server to |
|
use. Often, a DNS name may be used as the authority, since the ability to |
|
resolve DNS names is already built into all gRPC client libraries. |
|
|
|
Finally, the `endpoint_name` indicates a concrete name to be looked up |
|
in a given name-system identified by the scheme and the authority. The |
|
syntax of the endpoint name is dictated by the scheme in use. |
|
|
|
### Resolver Plugins |
|
|
|
The gRPC client library will use the specified scheme to pick the right |
|
resolver plugin and pass it the fully qualified name string. |
|
|
|
Resolvers should be able to contact the authority and get a resolution |
|
that they return back to the gRPC client library. The returned contents |
|
include: |
|
|
|
- A list of resolved addresses, each of which has three attributes: |
|
- The address itself, including both IP address and port. |
|
- A boolean indicating whether the address is a backend address (i.e., |
|
the address to use to contact the server directly) or a balancer |
|
address (for cases where [external load balancing](load-balancing.md) |
|
is in use). |
|
- The name of the balancer, if the address is a balancer address. |
|
This will be used to perform peer authorization. |
|
- A [service config](service_config.md). |
|
|
|
The plugin API allows the resolvers to continuously watch an endpoint |
|
and return updated resolutions as needed.
|
|
|