Thanks Manik! Great to hear some feedback from you, especially as you
have way more experience with gRPC.

Beyond helping to develop (and maintain!) clients for a wider range of
programming languages - it would also help to provide both a
"traditional" and a non-blocking client for each such language, while
having to maintain just an async server implementation.

Sanne

On 6 June 2018 at 07:13, Manik Surtani <ma...@infinispan.org> wrote:
> Hello everyone! (Wow, it's been a while since I dropped by and said hello...
> )
>
> Super-interesting discussion.
>
> Adrian: "What is the approach you envision regarding the IDL? Should we
> strive for a pure IDL definition of the service? That could be an
> interesting approach that would make it possible for a third party to
> generate their own infinispan grpc client in any new language that we do not
> already offer support, just based on the IDL. And maybe using a different
> grpc implementation if they do not find suitable the one from google."
>
> This is spot-on, and where I see value in gRPC being incorporated into
> Infinispan: making use of open(-ish) standards of RPC communication and
> applying that to how we do client/server. Good discussion on handling
> payload types in the interface definition. I've made use of some of the
> ideas discussed here when creating a proto-defined IDL to look up ... more
> serialized proto definitions for given types! Keen to see what your PoC
> looks like.
>
> - M
>
>
> On Wed, 30 May 2018 at 08:19 Galder Zamarreno <gal...@redhat.com> wrote:
>>
>> On Wed, May 30, 2018 at 5:00 PM Radim Vansa <rva...@redhat.com> wrote:
>>>
>>> On 05/30/2018 02:53 PM, Sanne Grinovero wrote:
>>> > On 30 May 2018 at 13:26, Adrian Nistor <anis...@redhat.com> wrote:
>>> >> Yest, the client needs that hash but that does not necessarily mean it
>>> >> has to compute it itself.
>>> >> The hash should be applied to the storage format which might be
>>> >> different from the format the client sees. So hash computation could
>>> >> be
>>> >> done on the server, just a thought.
>>> > Unless we want to explore some form of hybrid gRPC which benefits from
>>> > Hot Rod intelligence level 3?
>>>
>>> Since Tristan said that gRPC is viable only if the performance is
>>> comparable - I concluded that this involves the smart routing. I was
>>> hoping that gRPC networking layer would provide some hook to specify the
>>> destination.
>>
>>
>> It does, via SubchannelPicker implementations. It requires key to be sent
>> as HTTP header down the stack so that the SubchannelPicker can extract it.
>>
>> SubchannelPicker impl can then apply hash on it and decide based on
>> available channels.
>>
>>>
>>> An alternative would be a proxy hosted on the same node
>>> that would do the routing.
>>>
>>>
>>> If we're to replace Hot Rod I was expecting the (generated) gRPC client
>>> to be extensible enough to allow us add client-side features (like near
>>> cache, maybe listeners would need client-side code too) but saving us
>>> most of the hassle with networking and parsing, while providing basic
>>> client in languages we don't embrace without additional cost.
>>>
>>> R.
>>>
>>> >
>>> > In which case the client will need to compute the hash before it can
>>> > hint the network layer were to connect to.
>>> >
>>> > Thanks,
>>> > Sanne
>>> >
>>> >> On 05/30/2018 02:47 PM, Radim Vansa wrote:
>>> >>> On 05/30/2018 12:46 PM, Adrian Nistor wrote:
>>> >>>> Thanks for clarifying this Galder.
>>> >>>> Yes, the network layer is indeed the culprit and the purpose of this
>>> >>>> experiment.
>>> >>>>
>>> >>>> What is the approach you envision regarding the IDL? Should we
>>> >>>> strive
>>> >>>> for a pure IDL definition of the service? That could be an
>>> >>>> interesting
>>> >>>> approach that would make it possible for a third party to generate
>>> >>>> their own infinispan grpc client in any new language that we do not
>>> >>>> already offer support, just based on the IDL. And maybe using a
>>> >>>> different grpc implementation if they do not find suitable the one
>>> >>>> from google.
>>> >>>>
>>> >>>> I was not suggesting we should do type transformation or anything on
>>> >>>> the client side that would require an extra layer of code on top of
>>> >>>> what grpc generates for the client, so maybe a pure IDL based
>>> >>>> service
>>> >>>> definition would indeed be possible, without extra helpers. No type
>>> >>>> transformation, just type information. Exposing the type info that
>>> >>>> comes from the server would be enough, a lot better than dumbing
>>> >>>> everything down to a byte[].
>>> >>> I may be wrong but key transformation on client is necessary for
>>> >>> correct
>>> >>> hash-aware routing, isn't it? We need to get byte array for each key
>>> >>> and
>>> >>> apply murmur hash there (IIUC even when we use protobuf as the
>>> >>> storage
>>> >>> format, segment is based on the raw protobuf bytes, right?).
>>> >>>
>>> >>> Radim
>>> >>>
>>> >>>> Adrian
>>> >>>>
>>> >>>> On 05/30/2018 12:16 PM, Galder Zamarreno wrote:
>>> >>>>> On Tue, May 29, 2018 at 8:57 PM Adrian Nistor <anis...@redhat.com
>>> >>>>> <mailto:anis...@redhat.com>> wrote:
>>> >>>>>
>>> >>>>>       Vittorio, a few remarks regarding your statement "...The
>>> >>>>>       alternative to this is to develop a protostream equivalent
>>> >>>>> for
>>> >>>>>       each supported language and it doesn't seem really feasible
>>> >>>>> to me."
>>> >>>>>
>>> >>>>>       No way! That's a big misunderstanding. We do not need to
>>> >>>>>       re-implement the protostream library in C/C++/C# or any new
>>> >>>>>       supported language.
>>> >>>>>       Protostream is just for Java and it is compatible with
>>> >>>>> Google's
>>> >>>>>       protobuf lib we already use in the other clients. We can
>>> >>>>> continue
>>> >>>>>       using Google's protobuf lib for these clients, with or
>>> >>>>> without gRPC.
>>> >>>>>       Protostream does not handle protobuf services as gRPC does,
>>> >>>>> but
>>> >>>>>       we can add support for that with little effort.
>>> >>>>>
>>> >>>>>       The real problem here is if we want to replace our hot rod
>>> >>>>>       invocation protocol with gRPC to save on the effort of
>>> >>>>>       implementing and maintaining hot rod in all those clients. I
>>> >>>>>       wonder why the obvious question is being avoided in this
>>> >>>>> thread.
>>> >>>>>
>>> >>>>>
>>> >>>>> ^ It is not being avoided. I stated it quite clearly when I replied
>>> >>>>> but maybe not with enough detail. So, I said:
>>> >>>>>
>>> >>>>>>    The biggest problem I see in our client/server architecture is
>>> >>>>>> the
>>> >>>>> ability to quickly deliver features/APIs across multiple language
>>> >>>>> clients. Both Vittorio and I have seen how long it takes to
>>> >>>>> implement
>>> >>>>> all the different features available in Java client and port them
>>> >>>>> to
>>> >>>>> Node.js, C/C++/C#...etc. This effort lead by Vittorio is trying to
>>> >>>>> improve on that by having some of that work done for us. Granted,
>>> >>>>> not
>>> >>>>> all of it will be done, but it should give us some good foundations
>>> >>>>> on which to build.
>>> >>>>>
>>> >>>>> To expand on it a bit further: the reason it takes us longer to get
>>> >>>>> different features in is because each client implements its own
>>> >>>>> network layer, parses the protocol and does type transformations
>>> >>>>> (between byte[] and whatever the client expects).
>>> >>>>>
>>> >>>>> IMO, the most costly things there are getting the network layer
>>> >>>>> right
>>> >>>>> (from experience with Node.js, it has taken a while to do so) and
>>> >>>>> parsing work (not only parsing itself, but doing it in a efficient
>>> >>>>> way). Network layer also includes load balancing, failover, cluster
>>> >>>>> failover...etc.
>>> >>>>>
>>> >>>>>   From past experience, transforming from byte[] to what the client
>>> >>>>> expects has never really been very problematic for me. What's been
>>> >>>>> difficult here is coming up with encoding architecture that Gustavo
>>> >>>>> lead, whose aim was to improve on the initial compatibility mode.
>>> >>>>> But, with that now clear, understood and proven to solve our
>>> >>>>> issues,
>>> >>>>> the rest in this area should be fairly straightforward IMO.
>>> >>>>>
>>> >>>>> Type transformation, once done, is a constant. As we add more Hot
>>> >>>>> Rod
>>> >>>>> operations, it's mostly the parsing that starts to become more
>>> >>>>> work.
>>> >>>>> Network can also become more work if instead of RPC commands you
>>> >>>>> start supporting streams based commands.
>>> >>>>>
>>> >>>>> gRPC solves the network (FYI: with key as HTTP header and
>>> >>>>> SubchannelPicker you can do hash-aware routing) and parsing for us.
>>> >>>>> I
>>> >>>>> don't see the need for it to solve our type transformations for us.
>>> >>>>> If it does it, great, but does it support our compatibility
>>> >>>>> requirements? (I had already told Vittorio to check Gustavo on
>>> >>>>> this).
>>> >>>>> Type transformation is a lower prio for me, network and parsing are
>>> >>>>> more important.
>>> >>>>>
>>> >>>>> Hope this clarifies better my POV.
>>> >>>>>
>>> >>>>> Cheers
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>       Adrian
>>> >>>>>
>>> >>>>>
>>> >>>>>       On 05/29/2018 03:45 PM, Vittorio Rigamonti wrote:
>>> >>>>>>       Thanks Adrian,
>>> >>>>>>
>>> >>>>>>       of course there's a marshalling work under the cover and
>>> >>>>>> that is
>>> >>>>>>       reflected into the generated code (specially the accessor
>>> >>>>>>       methods generated from the oneof clause).
>>> >>>>>>
>>> >>>>>>       My opinion is that on the client side this could be
>>> >>>>>> accepted, as
>>> >>>>>>       long as the API are well defined and documented: application
>>> >>>>>>       developer can build an adhoc decorator on the top if needed.
>>> >>>>>> The
>>> >>>>>>       alternative to this is to develop a protostream equivalent
>>> >>>>>> for
>>> >>>>>>       each supported language and it doesn't seem really feasible
>>> >>>>>> to me.
>>> >>>>>>
>>> >>>>>>       On the server side (java only) the situation is different:
>>> >>>>>>       protobuf is optimized for streaming not for storing so
>>> >>>>>> probably
>>> >>>>>>       a Protostream layer is needed.
>>> >>>>>>
>>> >>>>>>       On Mon, May 28, 2018 at 4:47 PM, Adrian Nistor
>>> >>>>>>       <anis...@redhat.com <mailto:anis...@redhat.com>> wrote:
>>> >>>>>>
>>> >>>>>>           Hi Vittorio,
>>> >>>>>>           thanks for exploring gRPC. It seems like a very elegant
>>> >>>>>>           solution for exposing services. I'll have a look at your
>>> >>>>>> PoC
>>> >>>>>>           soon.
>>> >>>>>>
>>> >>>>>>           I feel there are some remarks that need to be made
>>> >>>>>> regarding
>>> >>>>>>           gRPC. gRPC is just some nice cheesy topping on top of
>>> >>>>>>           protobuf. Google's implementation of protobuf, to be
>>> >>>>>> more
>>> >>>>>>           precise.
>>> >>>>>>           It does not need handwritten marshallers, but the 'No
>>> >>>>>> need
>>> >>>>>>           for marshaller' does not accurately describe it.
>>> >>>>>> Marshallers
>>> >>>>>>           are needed and are generated under the cover by the
>>> >>>>>> library
>>> >>>>>>           and so are the data objects and you are unfortunately
>>> >>>>>> forced
>>> >>>>>>           to use them. That's both the good news and the bad
>>> >>>>>> news:)
>>> >>>>>>           The whole thing looks very promising and friendly for
>>> >>>>>> many
>>> >>>>>>           uses cases, especially for demos and PoCs :))). Nobody
>>> >>>>>> wants
>>> >>>>>>           to write those marshallers. But it starts to become a
>>> >>>>>>           nuisance if you want to use your own data objects.
>>> >>>>>>           There is also the ugliness and excessive memory
>>> >>>>>> footprint of
>>> >>>>>>           the generated code, which is the reason Infinispan did
>>> >>>>>> not
>>> >>>>>>           adopt the protobuf-java library although it did adopt
>>> >>>>>>           protobuf as an encoding format.
>>> >>>>>>           The Protostream library was created as an alternative
>>> >>>>>>           implementation to solve the aforementioned problems with
>>> >>>>>> the
>>> >>>>>>           generated code. It solves this by letting the user
>>> >>>>>> provide
>>> >>>>>>           their own data objects. And for the marshallers it gives
>>> >>>>>> you
>>> >>>>>>           two options: a) write the marshaller yourself (hated),
>>> >>>>>> b)
>>> >>>>>>           annotated your data objects and the marshaller gets
>>> >>>>>>           generated (loved). Protostream does not currently
>>> >>>>>> support
>>> >>>>>>           service definitions right now but this is something I
>>> >>>>>>           started to investigate recently after Galder asked me if
>>> >>>>>> I
>>> >>>>>>           think it's doable. I think I'll only find out after I do
>>> >>>>>> it:)
>>> >>>>>>
>>> >>>>>>           Adrian
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>           On 05/28/2018 04:15 PM, Vittorio Rigamonti wrote:
>>> >>>>>>>           Hi Infinispan developers,
>>> >>>>>>>
>>> >>>>>>>           I'm working on a solution for developers who need to
>>> >>>>>>> access
>>> >>>>>>>           Infinispan services  through different programming
>>> >>>>>>> languages.
>>> >>>>>>>
>>> >>>>>>>           The focus is not on developing a full featured client,
>>> >>>>>>> but
>>> >>>>>>>           rather discover the value and the limits of this
>>> >>>>>>> approach.
>>> >>>>>>>
>>> >>>>>>>           - is it possible to automatically generate useful
>>> >>>>>>> clients
>>> >>>>>>>           in different languages?
>>> >>>>>>>           - can that clients interoperate on the same cache with
>>> >>>>>>> the
>>> >>>>>>>           same data types?
>>> >>>>>>>
>>> >>>>>>>           I came out with a small prototype that I would like to
>>> >>>>>>>           submit to you and on which I would like to gather your
>>> >>>>>>>           impressions.
>>> >>>>>>>
>>> >>>>>>>            You can found the project here [1]: is a gRPC-based
>>> >>>>>>>           client/server architecture for Infinispan based on and
>>> >>>>>>>           EmbeddedCache, with very few features exposed atm.
>>> >>>>>>>
>>> >>>>>>>           Currently the project is nothing more than a poc with
>>> >>>>>>> the
>>> >>>>>>>           following interesting features:
>>> >>>>>>>
>>> >>>>>>>           - client can be generated in all the grpc supported
>>> >>>>>>>           language: java, go, c++ examples are provided;
>>> >>>>>>>           - the interface is full typed. No need for marshaller
>>> >>>>>>> and
>>> >>>>>>>           clients build in different language can cooperate on
>>> >>>>>>> the
>>> >>>>>>>           same cache;
>>> >>>>>>>
>>> >>>>>>>           The second item is my preferred one beacuse it frees
>>> >>>>>>> the
>>> >>>>>>>           developer from data marshalling.
>>> >>>>>>>
>>> >>>>>>>           What do you think about?
>>> >>>>>>>           Sounds interesting?
>>> >>>>>>>           Can you see any flaw?
>>> >>>>>>>
>>> >>>>>>>           There's also a list of issues for the future [2],
>>> >>>>>>> basically
>>> >>>>>>>           I would like to investigate these questions:
>>> >>>>>>>           How far this architecture can go?
>>> >>>>>>>           Topology, events, queries... how many of the Infinispan
>>> >>>>>>>           features can be fit in a grpc architecture?
>>> >>>>>>>
>>> >>>>>>>           Thank you
>>> >>>>>>>           Vittorio
>>> >>>>>>>
>>> >>>>>>>           [1] https://github.com/rigazilla/ispn-grpc
>>> >>>>>>>           [2] https://github.com/rigazilla/ispn-grpc/issues
>>> >>>>>>>
>>> >>>>>>>           --
>>> >>>>>>>
>>> >>>>>>>           Vittorio Rigamonti
>>> >>>>>>>
>>> >>>>>>>           Senior Software Engineer
>>> >>>>>>>
>>> >>>>>>>           Red Hat
>>> >>>>>>>
>>> >>>>>>>           <https://www.redhat.com>
>>> >>>>>>>
>>> >>>>>>>           Milan, Italy
>>> >>>>>>>
>>> >>>>>>>           vriga...@redhat.com <mailto:vriga...@redhat.com>
>>> >>>>>>>
>>> >>>>>>>           irc: rigazilla
>>> >>>>>>>
>>> >>>>>>>           <https://red.ht/sig>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>           _______________________________________________
>>> >>>>>>>           infinispan-dev mailing list
>>> >>>>>>>           infinispan-dev@lists.jboss.org
>>> >>>>>>>           <mailto:infinispan-dev@lists.jboss.org>
>>> >>>>>>>           https://lists.jboss.org/mailman/listinfo/infinispan-dev
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>       --
>>> >>>>>>
>>> >>>>>>       Vittorio Rigamonti
>>> >>>>>>
>>> >>>>>>       Senior Software Engineer
>>> >>>>>>
>>> >>>>>>       Red Hat
>>> >>>>>>
>>> >>>>>>       <https://www.redhat.com>
>>> >>>>>>
>>> >>>>>>       Milan, Italy
>>> >>>>>>
>>> >>>>>>       vriga...@redhat.com <mailto:vriga...@redhat.com>
>>> >>>>>>
>>> >>>>>>       irc: rigazilla
>>> >>>>>>
>>> >>>>>>       <https://red.ht/sig>
>>> >>>>>       _______________________________________________
>>> >>>>>       infinispan-dev mailing list
>>> >>>>>       infinispan-dev@lists.jboss.org
>>> >>>>>       <mailto:infinispan-dev@lists.jboss.org>
>>> >>>>>       https://lists.jboss.org/mailman/listinfo/infinispan-dev
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>> _______________________________________________
>>> >>>>> infinispan-dev mailing list
>>> >>>>> infinispan-dev@lists.jboss.org
>>> >>>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>>> >>>>
>>> >>>>
>>> >>>> _______________________________________________
>>> >>>> infinispan-dev mailing list
>>> >>>> infinispan-dev@lists.jboss.org
>>> >>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>>> >> _______________________________________________
>>> >> infinispan-dev mailing list
>>> >> infinispan-dev@lists.jboss.org
>>> >> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>>>
>>>
>>> --
>>> Radim Vansa <rva...@redhat.com>
>>> JBoss Performance Team
>>>
>>> _______________________________________________
>>> infinispan-dev mailing list
>>> infinispan-dev@lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>>
>> _______________________________________________
>> infinispan-dev mailing list
>> infinispan-dev@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev
_______________________________________________
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev

Reply via email to