On Sunday, December 2, 2018 at 6:04:02 PM UTC+5:30, [email protected]
wrote:
>
>
> Thanks Carl, appreciate your detailed response, helps clear my confusions.
>
> Regarding Load balancer, yes, you are right, i was talking about server
> side LB like a LinkerD or Ngnix.
>
> Actually this is my setup
>
grpc client ------> Virtual IP ----> Load balancer 1 - grpc
server 1, grpc server 2
Load balancer
2 - grpc server 3, grpc server 4
Based on the setup above, assuming everyone is on "round robin",
will there be 4 connections / channel ? or 1 channel used across multiple
grpc servers.
Internally i see that netty is used, and async stubs, which implies async
connections. It adds to the confusion, how are async connections managed ?
do they follow the same pattern as synchronous .
Thanks again !
AK
>
>
>
>
>
> On Saturday, December 1, 2018 at 12:40:41 AM UTC+5:30, Carl Mastrangelo
> wrote:
>>
>> gRPC uses a "channel" rather than a "connection" as the surface level
>> API. A channel is a managed set of connections to your server(s). The
>> number of connections could drop down to 0 if they are idle, or be as large
>> as every server returned by your DNS entries. gRPC has two pluggable
>> components called a "name resolver" and a "load balancer" which both run
>> inside of your client. The name resolver (typically DNS), converts the
>> "target" string you connect to, and turns it into a set of addresses. The
>> load balancer is notified of the addresses, and decides which ones to
>> create connections to, and which ones received your RPCs. By default, we
>> use a "pick first" load balancer which only makes one connection.
>>
>> If the connection between a client and a particular server breaks, the
>> connection is removed from the set, and if another connection is available,
>> gRPC will fire RPCs on the healthy one. If not, gRPC will attempt to
>> establish a new connection, up until the point that your RPC is not
>> canceled or the deadline has exceeded.
>>
>> The word load balancer is overloaded here, because client side load
>> balancing is different than server side. I think you are talking about
>> server side. You will need to modify your client side load balancer to
>> "round robin", which will establish connections to every backend server you
>> have. When servers terminate, or are added to the pool of backends, it's
>> up to the client side load balancer / name resolver to notice these
>> differences and adjust the connections. gRPC does this by default (via the
>> connections actually breaking), but it's faster if your name resolver
>> (again, typically DNS) notices the server set has changed.
>>
>> On Friday, November 30, 2018 at 7:20:27 AM UTC-8, fairly accurate wrote:
>>>
>>>
>>> Hello All,
>>> I'm a newbie grpc user. Actually, i'm using a product that is built
>>> over grpc.
>>> I have read stuff about grpc, pardon my ignorance, some basic questions
>>> on grpc connections.
>>>
>>> 1. I understand it is 1 connection per client server pair. Does this
>>> mean a connection is established between client and server, and stays alive
>>> until one of them ceases to exist ?
>>> Also, if the connection drops, a new connection is initiated ?
>>>
>>> 2. I have a load balancer placed between the client and server. The LB
>>> has 2 servers. In this case is 1 connection to each server or just one to
>>> LB and the load is balanced between the tow servers or 2 connections ?
>>>
>>> Appreciate your response.
>>>
>>> AK
>>>
>>
--
You received this message because you are subscribed to the Google Groups
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit
https://groups.google.com/d/msgid/grpc-io/3dc2f1bc-352b-4a4c-a1eb-e6b3c3f00250%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.