Hey Dan,

Imo, having a standardized, versioned definition for GET, PUT, PUTALL, etc. message, that is encoded/decoded in a manner that multiple clients (written in many other languages) can encode/decode these messages, is paramount.

Having the standardized operational messages(GET,PUT,etc.) transported using the function service vs a more direct operation handler, that is another discussion and is something that should be investigated.

My immediate concerns regarding "normal" operations over the function service are:

1. I don't believe the current function service is "stream" enabled,
   and would require some potential rework for subscription-based
   operations
2. Can the function service handle the extra load?
3. Is the function service "lean" enough to sustain acceptable
   throughput? The current client/server protocol averages around
   40,000-50,000 messages/second.
4. There are some messages that are passed between the client <->
   locator. Given that the function service is "server" specific, this
   approach would not work for locators, where a different transport
   mechanism is required. (but this is not a show stopper if function
   service proves to be viable)
5. How much effort would be required to make the "old" function
   service, handle the new messages, ensuring that the current behavior
   is preserved.

As per a previous discussion we had, I believe that the "function-like" behavior (retry, HA, write vs read optimized) can incorporated into the processing layer on the server. In that way all messages can benefit from that behavior. In addition to this, if we have a single mechanism that will handle messages, retry, HA, read/write optimizations, is preferable to having a few "bespoke" implementations. So either approach (new message handling) vs function service, will be preferable.

"/The advantage of this approach is that if someone just builds a driver that only supports function execution and whatever serialization framework is required to serialize function arguments, they already have an API that application developers could use to do pretty much anything they wanted to do on the server. Having a Region object with methods like get and put on it could just be a little syntatic sugar on top of that./"

It can be argued that having a standard client/server message, with standardized encoding/decoding, is the same as using function execution. Both require a little syntactic sugar to add new functionality to an already standardized message.

--Udo

On 5/1/17 17:27, Dan Smith wrote:
I think any new client driver or server we develop might want to incorporate function execution at lower level than region operations like get and put, etc. We could then easily build operations like GET, PUT, PUTALL, etc. on top of that by making them functions. The original client protocol isn't designed like that because it pre-dates function execution.

The current function execution API is a little clunky and needs some work. But what it does do is provide the fundamental logic to target operations at members that host certain keys and retry in the case of failure.

The advantage of this approach is that if someone just builds a driver that only supports function execution and whatever serialization framework is required to serialize function arguments, they already have an API that application developers could use to do pretty much anything they wanted to do on the server. Having a Region object with methods like get and put on it could just be a little syntatic sugar on top of that.

-Dan

On Fri, Apr 28, 2017 at 2:49 PM, Udo Kohlmeyer <ukohlme...@pivotal.io <mailto:ukohlme...@pivotal.io>> wrote:

    Hi there Geode community,

    The new Client-Server protocol proposal is available for review.

    It can be viewed and commented on
    https://cwiki.apache.org/confluence/display/GEODE/New+Client+Server+Protocol
    
<https://cwiki.apache.org/confluence/display/GEODE/New+Client+Server+Protocol>

    --Udo



Reply via email to