Craig Tiller 9dee67b5cf Merge github.com:grpc/grpc into naming-crisis 10 yıl önce
..
lb_policies 03dc655d2e Fix state tracking, refcounting bugs 10 yıl önce
resolvers 9dee67b5cf Merge github.com:grpc/grpc into naming-crisis 10 yıl önce
subchannel_factory_decorators d6c98df792 clang-format all source 10 yıl önce
README.md 698d00c60e Add ipv4:, ipv6: schemes 10 yıl önce
client_config.c d7b68e72f5 Simple request unsecure passes with new client_config code 10 yıl önce
client_config.h 3bc8ebd48e Implementation work for client_config 10 yıl önce
connector.c 4ab82d2c4d clang-format 10 yıl önce
connector.h 4ab82d2c4d clang-format 10 yıl önce
lb_policy.c 03dc655d2e Fix state tracking, refcounting bugs 10 yıl önce
lb_policy.h acd095006f Spam cleanup 10 yıl önce
resolver.c 079a11bb9b clang-format affected files 10 yıl önce
resolver.h 079a11bb9b clang-format affected files 10 yıl önce
resolver_factory.c c9a3b0d55f Respond to review 10 yıl önce
resolver_factory.h c0136b9a27 Add comments 10 yıl önce
resolver_registry.c 25de92c997 Assert uri not null better 10 yıl önce
resolver_registry.h bc85be10ef Refactor default host name resolution 10 yıl önce
subchannel.c 4e407ba343 Merge pull request #2656 from yang-g/reconnect_branch_based_on_jitter 10 yıl önce
subchannel.h d0efbdbcf7 Update subchannel.h 10 yıl önce
subchannel_factory.c eb3b12e417 Further client config work 10 yıl önce
subchannel_factory.h f7afa1f1ba client_config: chttp2_fullstack_no_op_unsecure_test passes 10 yıl önce
uri_parser.c 275a02c317 Small fix 10 yıl önce
uri_parser.h 49924e0e62 Better handling of cancellation, uri parse errors, and disconnection 10 yıl önce

README.md

Client Configuration Support for GRPC

This library provides high level configuration machinery to construct client channels and load balance between them.

Each grpc_channel is created with a grpc_resolver. It is the resolver's duty to resolve a name into configuration data for the channel. Such configuration data might include:

  • a list of (ip, port) addresses to connect to
  • a load balancing policy to decide which server to send a request to
  • a set of filters to mutate outgoing requests (say, by adding metadata)

The resolver provides this data as a stream of grpc_client_config objects to the channel. We represent configuration as a stream so that it can be changed by the resolver during execution, by reacting to external events (such as a new configuration file being pushed to some store).

Load Balancing

Load balancing configuration is provided by a grpc_lb_policy object, stored as part of grpc_client_config.

The primary job of the load balancing policies is to pick a target server given only the initial metadata for a request. It does this by providing a grpc_subchannel object to the owning channel.

Sub-Channels

A sub-channel provides a connection to a server for a client channel. It has a connectivity state like a regular channel, and so can be connected or disconnected. This connectivity state can be used to inform load balancing decisions (for example, by avoiding disconnected backends).

Configured sub-channels are fully setup to participate in the grpc data plane. Their behavior is specified by a set of grpc channel filters defined at their construction. To customize this behavior, resolvers build grpc_subchannel_factory objects, which use the decorator pattern to customize construction arguments for concrete grpc_subchannel instances.

Naming for GRPC

Names in GRPC are represented by a URI (as defined in RFC 3986).

The following schemes are currently supported:

dns:///host:port - dns schemes are currently supported so long as authority is

               empty (authority based dns resolution is expected in a future
               release)

unix:path - the unix scheme is used to create and connect to unix domain

               sockets - the authority must be empty, and the path
               represents the absolute or relative path to the desired
               socket

ipv4:host:port - a pre-resolved ipv4 dotted decimal address/port combination

ipv6:[host]:port - a pre-resolved ipv6 address/port combination