Hi. Thanks for sharing the information regarding Envoy proxy. I think it 
will require a lot of changes for me to integrate Envoy proxy in our 
architecture and writing a simple reverse proxy (if it works) the way I 
described above is an easier, faster and better option. Do you have any 
feedback on how it can be achieved directly through implementation on gRPC 
interfaces?

On Sunday, 9 August 2020 19:09:54 UTC-7, sanjay...@google.com wrote:
>
> Envoy proxy uses xDS to dynamically change the routing configuration - 
> some of these can be header matching rules that encapsulate your dynamic 
> logic. This of course requires an "xDS" server to supply the route (and 
> other dependent) configuration. 
>
> In gRPC too there is support for xDS on the client side and very soon 
> there will be support for header based routing as described here 
> <https://github.com/grpc/proposal/blob/master/A28-xds-traffic-splitting-and-routing.md#routing-lb-policy>
>  which 
> means the client itself does the header based routing. But this too 
> requires putting your logic in an xDS server similar to above (once the 
> feature is available in gRPC Java).
>
> On Sunday, August 9, 2020 at 6:28:29 PM UTC-7 chetan...@gmail.com wrote:
>
>> I did look at Envoy proxy. The business logic to redirect traffic is 
>> dynamic and involves fetching latest information from another distributed 
>> system and I couldn't find a straight forward way to do it using Envoy 
>> proxy. 
>> My requirement to direct traffic is not static or deterministic, hence 
>> building a custom solution seems a better option.
>>
>>
>> On Sunday, 9 August 2020 18:17:51 UTC-7, sanjay...@google.com wrote:
>>>
>>> Have you considered using the Envoy proxy 
>>> <https://www.envoyproxy.io/docs/envoy/latest/intro/intro>with static 
>>> configuration so you don't need to develop a reverse proxy of your own?
>>>
>>> On Thursday, August 6, 2020 at 1:47:52 PM UTC-7 chetan...@gmail.com 
>>> wrote:
>>>
>>>> Hi
>>>>
>>>> I am planning to build a grpc-reverse proxy that sits in fronts of a 
>>>> few of our grpc services.
>>>>
>>>> *Requirement:*
>>>> We have a client A that at the moment talks to B or C (based on 
>>>> internal logic). We want to move this logic to the proxy layer.
>>>> So we will introduce a new grpc-reverse-proxy server P sitting in front 
>>>> of B and C and redirect requests based on the headers passed and the 
>>>> application logic. Below is how I'm thinking of designing it-
>>>>
>>>> A  (starts calls to P with custom headers )
>>>>    -> P
>>>>         - Implements ServerCallHandler to read headers and run 
>>>> application logic
>>>>         - Has 2 channel objects that it uses to connect to B & C as a 
>>>> client
>>>>         - Based on the logic proxies the request to either B or C
>>>>    -> B or C
>>>>         - Processes the request and returns the response back to P
>>>>    -> P
>>>>        - Proxies the response back to A 
>>>>
>>>>
>>>> I have leveraged some of the code from here - 
>>>> https://github.com/ejona86/grpc-java/commit/29728aeb003ced3c190197c176563643be22bef1,
>>>>  
>>>> to build the logic described above and it works.
>>>>
>>>> I couldn't find a lot of documentation on how the client and server in 
>>>> gRPC internally talk to each other and what are the best practices when 
>>>> writing your own ServerCallHandler, ClientCall.Listener and 
>>>> ServerCall.Listener; particularly a sequence diagram of how startCall(), 
>>>> onMessage(), onHalfClose(), onCancel() and onReady() are called and what 
>>>> are the guarantees gRPC provides. 
>>>>
>>>> I would like to know if my approach to tackle the requirement sounds 
>>>> acceptable and whether there are things that I should take into 
>>>> consideration when building this solution. One thing for example is that 
>>>> the clients will have to create a new stub for each request to add custom 
>>>> headers before starting a call. Is this good or bad? I don't see any 
>>>> problem with it in terms of how gRPC works but would like to know if it 
>>>> will break something I'm not aware about.
>>>>
>>>> Thanks
>>>> Chetan 
>>>>
>>>

-- 
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 grpc-io+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/e6e1238e-6e0f-4cba-b09e-7543878bd5a8o%40googlegroups.com.

Reply via email to