[infinispan-dev] Hot Rod - pt3
Manik Surtani
manik at jboss.org
Tue Jan 5 05:04:32 EST 2010
On 5 Jan 2010, at 09:52, Galder Zamarreno wrote:
>
>
> On 01/04/2010 10:44 PM, Alex Kluge wrote:
>>>> - No events. I used events, that is asynchronous messages originating
>>>> from the server when certain conditions are met, to notify clients
>>>> that data was written to the server. This was mostly driven by the
>>>> need to notify an L1 cache of a write to the cache server. It would
>>>> be good to allow for this usage in this protocol. Note that this is
>>>> another case where the op code is useful to have as part of the
>>>> message.
>>>
>>> Isn't this expensive? Doesn't this mean the server
>>> has to fire off messages to each and every connected client,
>>> whether the clients are interested in these messages or
>>> not?
>>
>> Not necessarily. There are a number of options. It wouldn't be
>> difficult to allow the clients to register for the events, and
>> then only send them to the interested clients. The events can
>> be sent asynchronously (a separate thread), thus they won't
>> delay the response to a write. Piratically speaking, they aren't
>> that expensive.
>
> I'm still not convinced by this either. What you're talking about sounds
> like JMS to me :). Right now, the only situation where I can see this
> being useful is for sending back cluster formation changes but we found
> simpler way to deal with it and that doesn't require the added complexity.
I think eventing is pretty important. Especially if clients decide to add a further layer of client-side caching to prevent network lookups.
I can see how they can be abused to form a JMS-like message-passing layer, but then a lot of stuff could be open to abuse. Perhaps the events should just be restricted to notifying when a key has changed (i.e., a bit like Invalidation) but with no values/payload passed on, forcing the client to do a GET if the value was required.
<SNIP />
>> In my implementation I have a size attached to each field, and this
>> allows the messages to be handled easily. I retrieve more data from
>> the network if there is not enough data to complete the processing of
>> a field. There is no need to know the size of the full message.
>
> I borrowed the idea from the memcached binary protocol, but you have a a
> good point. I'll revisit the model to include size together with each field.
>
> Finally, I've noted that you add cache name in the requests. This is
> interesting because until now, I had thought of a Hot Rod server to map
> 1 to 1 to a cache, but if you add the cache name, you can map 1 Hot Rod
> server to a Cache manager and the cache allows you to direct requests to
> different caches under the same cache manager.
I think this makes sense, since you reduce the overhead of a cache server per cache. Would be divergent from the memcached server design though (as we wouldn't be able to change the memcached server to add cache name to requests)
--
Manik Surtani
manik at jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org
More information about the infinispan-dev
mailing list