Yes, and since Helix enabled Github integration any comment in the
Github PR will be synced to JIRA and sent to dev@ list.

- Henry

On Tue, Aug 26, 2014 at 1:21 PM, Kanak Biscuitwala <kana...@hotmail.com> wrote:
> PR is available at https://github.com/apache/helix/pull/2 for anyone 
> interested in commenting.
>
>
>
> From: kana...@hotmail.com
> To: u...@helix.apache.org; dev@helix.apache.org
> Subject: RE: Add performant IPC (Helix actors)
> Date: Tue, 26 Aug 2014 10:37:56 -0700
>
>
>
>
> PR is probably the better way to go here. Greg and Sandeep can probably move 
> much faster that way, and it's not much overhead for us.
>
>
>
> Date: Tue, 26 Aug 2014 10:17:40 -0700
> Subject: Re: Add performant IPC (Helix actors)
> From: g.kish...@gmail.com
> To: dev@helix.apache.org
> CC: u...@helix.apache.org
>
> +1, if there is no additional dependency. But I would like to go through the 
> review process. I dont think we can use rb.
>
> Henry had couple of ideas
> -- create a branch and give access to Greg/Sandeep on the branches. Apache 
> allows contributors to work on branches. Not sure how to get this.
>
> -- Greg can fork the apache helix github repo and submit a PR and we can 
> comment on the PR. Apache has done some cool integration with github, Henry 
> can provide more info on this.
>
>
>
>
> On Tue, Aug 26, 2014 at 9:39 AM, Kanak Biscuitwala <kana...@hotmail.com> 
> wrote:
>
>
>
> Are folks OK with the current iteration of this being in the 0.7.1 beta? It 
> would be in a separate module, so no additional dependencies are required, 
> and it could be a good opportunity to get some more feedback.Date: Fri, 22 
> Aug 2014 13:42:31 -0700
>
>
> Subject: Re: Add performant IPC (Helix actors)
>
> From: g.kish...@gmail.com
>
> To: dev@helix.apache.org
>
> CC: u...@helix.apache.org
>
>
>
> Thanks Greg for explanation. I agree Akka is 2 or 3 layers above what 
> Helix-ipc is trying to provide. Also there are some nuances in order 
> guarantees with Akka. For control messages where reliability is a must and 
> probably more important than latency, I think using ZK as the communication 
> channel is the right solution. Without pushing state transition message 
> through a consensus system like ZK, there will be lot of edge cases where 
> ensuring correctness becomes impossible.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> On Fri, Aug 22, 2014 at 1:29 PM, Greg Brandt <brandt.g...@gmail.com> wrote:
>
>
>
> Hey Henry,
>
>
>
>
>
>
>
> So Akka actors actually give exactly the same messaging guarantees as the
>
>
>
> current implementation of Helix IPC: at-most-once message delivery, and
>
>
>
> ordering per sender-receiver pair. In Helix's case, the latter can be
>
>
>
> thought of further as ordering per-partition or resource, but basically is
>
>
>
> guaranteed by Netty's Channel implementation for sender-receiver pair (
>
>
>
> http://stackoverflow.com/questions/9082101/do-messages-sent-via-nettys-channel-write-preserve-their-order-when-begin-sen
>
>
>
>
>
>
> ).
>
>
>
>
>
>
>
> What Akka provides that this IPC layer doesn't is the application life
>
>
>
> cycle management part. This is why I made the claim that Akka Actors are
>
>
>
> analogous to Helix Participants. One writes callbacks for different message
>
>
>
> types in the Actor API to manage various control messages in the same way
>
>
>
> one writes callbacks in Helix to manage application state transitions.
>
>
>
>
>
>
>
> But more importantly, using Akka instead of getting really down into the
>
>
>
> transport layer might hide too much when we want to use it for
>
>
>
> performance-critical things like data replication. Continuing with that
>
>
>
> example, we likely want to use direct IO and minimize data copies in the
>
>
>
> transport layer, and it seems like some of the niceness involved in Akka's
>
>
>
> API would get in the way of that.
>
>
>
>
>
>
>
> Something that may be really cool to do is write another Akka transport
>
>
>
> implementation on top of this, so you could basically add partition/state
>
>
>
> to the Akka API and not have to implement the state machines yourself (as
>
>
>
> is shown in some Akka docs). In that scenario, users should probably be
>
>
>
> unaware that they were using Helix and just use the same Akka API.
>
>
>
>
>
>
>
> -Greg
>
>
>
>
>
>
>
>
>
>
>
> On Fri, Aug 22, 2014 at 11:13 AM, Henry Saputra <henry.sapu...@gmail.com>
>
>
>
> wrote:
>
>
>
>
>
>
>
>> Hi Greg,
>
>
>
>>
>
>
>
>> Thanks for the reply. Sorry for late for the discussions.
>
>
>
>>
>
>
>
>> If the IPC semantic will be used only by Helix internally I agree that
>
>
>
>> lower level transport like Netty should be the way to go.
>
>
>
>>
>
>
>
>> For control plane layer, such as communications between controller and
>
>
>
>> participants, wouldn't Akka actors give benefits of already reliable
>
>
>
>> message passing and monitoring without building from ground up?
>
>
>
>> Akka actor system has many different routers and allow callback to
>
>
>
>> caller to get async response (in this case return back response to
>
>
>
>> controller).
>
>
>
>>
>
>
>
>> I just saw the similarity of what the new API looks like with what
>
>
>
>> Akka actor APIs.
>
>
>
>>
>
>
>
>> Thanks,
>
>
>
>>
>
>
>
>> - Henry
>
>
>
>>
>
>
>
>> On Wed, Aug 20, 2014 at 5:46 PM, Greg Brandt <brandt.g...@gmail.com>
>
>
>
>> wrote:
>
>
>
>> > Hey Henry,
>
>
>
>> >
>
>
>
>> > Initially, I thought the same thing. But after evaluating Akka Actors, I
>
>
>
>> > think they're a fundamentally different approach to developing
>
>
>
>> distributed
>
>
>
>> > systems as opposed to simply a messaging layer implementation. Let me
>
>
>
>> > explain...
>
>
>
>> >
>
>
>
>> > The primary difference between Akka Actors and Helix is that the former
>
>
>
>> > prefers loose, decentralized control, whereas the latter prefers strong,
>
>
>
>> > centralized control. Akka applications are expected to manage state by
>
>
>
>> > themselves, whereas in Helix, that responsibility is delegated to the
>
>
>
>> > controller. And the actual user Akka Actor implementations are analogous
>
>
>
>> to
>
>
>
>> > Helix Participant implementations.
>
>
>
>> >
>
>
>
>> > So with that perspective, it would be a bit of a kludge to leverage Akka
>
>
>
>> > Actors for simple cluster-scope-addressable message passing. Actually,
>
>
>
>> > Helix already provides this messaging feature, but it is done via
>
>
>
>> ZooKeeper
>
>
>
>> > which is dangerous and less-than-performant for a high volume of
>
>
>
>> messages.
>
>
>
>> >
>
>
>
>> > The right thing to do seems to be to provide a set of better transport
>
>
>
>> > implemenations (e.g. Netty, ActiveMQ, Kafka, etc.) for the
>
>
>
>> > cluster-scope-addressable messaging system, and better preserve the
>
>
>
>> > fundamental concepts in Helix.
>
>
>
>> >
>
>
>
>> > Let me know what you think.
>
>
>
>> >
>
>
>
>> > -Greg
>
>
>
>> >
>
>
>
>> >
>
>
>
>> >
>
>
>
>> > On Wed, Aug 20, 2014 at 9:55 AM, Henry Saputra <henry.sapu...@gmail.com>
>
>
>
>> > wrote:
>
>
>
>> >
>
>
>
>> >> This seems fitting for Akka actor system [1]. Maybe we could just use
>
>
>
>> >> it as base?
>
>
>
>> >>
>
>
>
>> >>
>
>
>
>> >> - Henry
>
>
>
>> >>
>
>
>
>> >> [1] http://akka.io
>
>
>
>> >>
>
>
>
>> >> On Mon, Jul 21, 2014 at 9:47 AM, Greg Brandt <brandt.g...@gmail.com>
>
>
>
>> >> wrote:
>
>
>
>> >> > We talked about this in a little bit greater detail, and it's seeming
>
>
>
>> >> like
>
>
>
>> >> > there are three basic components that we want:
>
>
>
>> >> >
>
>
>
>> >> > 1. Transport - physically moving messages
>
>
>
>> >> > 2. Resolution - map cluster scope to set of machines
>
>
>
>> >> > 3. Management - message state, errors, retries, etc.
>
>
>
>> >> >
>
>
>
>> >> > The transport interface should be generic enough to allow many
>
>
>
>> >> > implementations (e.g. Netty, Kafka, etc.) It may be valuable to do
>
>
>
>> >> multiple
>
>
>
>> >> > implementations if one underlying system supports desired message
>
>
>
>> >> delivery
>
>
>
>> >> > guarantees better than another. For example, Kafka would be more
>
>
>
>> amenable
>
>
>
>> >> > to at-least-once delivery, whereas something like Netty, with much
>
>
>
>> less
>
>
>
>> >> > overhead than Kafka, would be better for at-most-once delivery.
>
>
>
>> >> >
>
>
>
>> >> > The goal here I think is to provide something that's most similar to
>
>
>
>> Akka
>
>
>
>> >> > Actors, with the following guarantees:
>
>
>
>> >> >
>
>
>
>> >> > 1. at-most-once delivery
>
>
>
>> >> > 2. message ordering per sender-receiver pair
>
>
>
>> >> >
>
>
>
>> >> > A light-weight messaging primitive with those guarantees would allow
>
>
>
>> >> > implementation of many interesting things like Kishore mentions. Netty
>
>
>
>> >> > seems most suited to this task (it is the underlying transport for
>
>
>
>> Akka
>
>
>
>> >> as
>
>
>
>> >> > well). The reason to avoid Akka I think is that it imposes too much of
>
>
>
>> >> its
>
>
>
>> >> > own philosophy on the user, and is really bloated. A Netty-based
>
>
>
>> >> primitive
>
>
>
>> >> > could be provided out-of-the-box, and the interfaces it implements
>
>
>
>> should
>
>
>
>> >> > be easy enough for users to implement on their own. It would be
>
>
>
>> >> relatively
>
>
>
>> >> > trivial to add a Kafka-based implementation out-of-the-box as well.
>
>
>
>> >> >
>
>
>
>> >> > (Have a bit of a prototype here:
>
>
>
>> >> >
>
>
>
>> >>
>
>
>
>> https://github.com/brandtg/helix-actors/blob/master/helix-actors/src/main/java/org/apache/helix/actor/netty/NettyHelixActor.java
>
>
>
>
>
>
>> >> > )
>
>
>
>> >> >
>
>
>
>> >> > The transport mechanism should be agnostic to anything going on in the
>
>
>
>> >> > cluster: the resolution module is totally separate, and maps cluster
>
>
>
>> >> scope
>
>
>
>> >> > to sets of nodes. For example, one could send a message to the entire
>
>
>
>> >> > cluster, specific partitions of a resource, or even from one cluster
>
>
>
>> to
>
>
>
>> >> > another (via composing resolution modules or something).
>
>
>
>> >> >
>
>
>
>> >> > Then there would be a management component, composed with the other
>
>
>
>> two
>
>
>
>> >> > components, which manages user callbacks associated with varying
>
>
>
>> cluster
>
>
>
>> >> > scopes, tracks messages based on ID in order to perform request /
>
>
>
>> >> response
>
>
>
>> >> > or feedback-loop kinds of things, manages errors / timeouts / retries,
>
>
>
>> >> etc.
>
>
>
>> >> >
>
>
>
>> >> > -Greg
>
>
>
>> >> >
>
>
>
>> >> >
>
>
>
>> >> >
>
>
>
>> >> > On Sat, Jul 12, 2014 at 11:27 AM, kishore g <g.kish...@gmail.com>
>
>
>
>> wrote:
>
>
>
>> >> >
>
>
>
>> >> >> Hi Vlad,
>
>
>
>> >> >>
>
>
>
>> >> >> Yes the idea is to have a pluggable architecture where Helix provides
>
>
>
>> >> the
>
>
>
>> >> >> messaging channel without serializing/deserializing the data. In the
>
>
>
>> >> end, I
>
>
>
>> >> >> envision having most of the building blocks needed to build a
>
>
>
>> >> distributed
>
>
>
>> >> >> system. One should be able to build a datastore/search/olap/pu
>
>
>
>> >> sub/stream
>
>
>
>> >> >> processing systems easily on top of Helix.
>
>
>
>> >> >>
>
>
>
>> >> >> I am curious to see what kind of tuning you guys did to handle 1.5
>
>
>
>> QPS.
>
>
>
>> >> Our
>
>
>
>> >> >> goal is to have 1M QPS between the two servers. In order to achieve
>
>
>
>> >> this we
>
>
>
>> >> >> might need pipelining/batching along with ordering guarantee's. This
>
>
>
>> is
>
>
>
>> >> non
>
>
>
>> >> >> trivial and error prone, I see a huge value in providing this
>
>
>
>> feature.
>
>
>
>> >> Most
>
>
>
>> >> >> systems have built some form replication schemes on their own. There
>
>
>
>> are
>
>
>
>> >> >> two parts in the replication, one is the high through put message
>
>
>
>> >> exchange
>
>
>
>> >> >> and the other is the scheme that is synchronous replication/async
>
>
>
>> >> >> replication/chained replication/consensus etc. The first part is the
>
>
>
>> >> common
>
>
>
>> >> >> part that is needed across all the replication scheme.
>
>
>
>> >> >>
>
>
>
>> >> >> Of course getting this right is not easy and design is tricky but I
>
>
>
>> feel
>
>
>
>> >> >> its worth a try.
>
>
>
>> >> >>
>
>
>
>> >> >> This is the high level flow I had discussed with Greg.
>
>
>
>> >> >>
>
>
>
>> >> >> Each server can host P partitions and is listening at one port.
>
>
>
>> Based on
>
>
>
>> >> >> how many execution threads are needed, we can create C channels.
>
>
>
>> Every
>
>
>
>> >> >> partition maps to a specific channel. On each channel we can
>
>
>
>> guarantee
>
>
>
>> >> >> message ordering. We simply provide a callback to handle each message
>
>
>
>> >> and
>
>
>
>> >> >> pass the received bytes without deserializing. Its up to the
>
>
>
>> callback to
>
>
>
>> >> >> either process it synchronously or asynchronously.
>
>
>
>> >> >>
>
>
>
>> >> >> There are more details that its difficult to go over in the email. We
>
>
>
>> >> >> should probably write up the design and then deep dive on the
>
>
>
>> details.
>
>
>
>> >> >>
>
>
>
>> >> >> thanks,
>
>
>
>> >> >> Kishore G
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >>
>
>
>
>> >> >> On Sat, Jul 12, 2014 at 8:08 AM, vlad...@gmail.com <
>
>
>
>> vlad...@gmail.com>
>
>
>
>> >> >> wrote:
>
>
>
>> >> >>
>
>
>
>> >> >> > I agree that having a messaging scheme that is not
>
>
>
>> ZooKeeper-reliant
>
>
>
>> >> >> would
>
>
>
>> >> >> > help in building some synchronization protocols between clients and
>
>
>
>> >> >> > replicas. I am thinking of cases such as writing inside Kafka to
>
>
>
>> >> >> replicated
>
>
>
>> >> >> > partitions our our own application,a replicated Key/Value store.
>
>
>
>> >> >> >
>
>
>
>> >> >> > For me, service discovery bridges the gap between an application
>
>
>
>> >> wanting
>
>
>
>> >> >> > to address a service (in Helix's case more particularly, a
>
>
>
>> >> >> service/resource
>
>
>
>> >> >> > name/partition tuple) and finding out a list of hostnames that can
>
>
>
>> >> >> receive
>
>
>
>> >> >> > that request. After that, whether the application wants to use
>
>
>
>> Helix
>
>
>
>> >> >> itself
>
>
>
>> >> >> > or another messaging stack is an open problem, perhaps a clear
>
>
>
>> >> separation
>
>
>
>> >> >> > of the discovery/messaging layers would allow for quickly swapping
>
>
>
>> >> >> > different pieces here.
>
>
>
>> >> >> >
>
>
>
>> >> >> > The interesting part (in my view) in providing fast messaging as
>
>
>
>> part
>
>
>
>> >> of
>
>
>
>> >> >> > Helix is the ability to use the service topology information that
>
>
>
>> >> Helix
>
>
>
>> >> >> > hosts (number of replicas and their placement) together with the
>
>
>
>> >> >> messaging
>
>
>
>> >> >> > layer as sufficient components for realizing a consensus algorithm
>
>
>
>> >> >> between
>
>
>
>> >> >> > replicas, that is providing, on top of the regular service
>
>
>
>> discovery
>
>
>
>> >> >> > function of writing to one instance of a service, the function of
>
>
>
>> >> writing
>
>
>
>> >> >> > with consensus verification to all replicas of a service.
>
>
>
>> >> >> >
>
>
>
>> >> >> > In terms of capabilities, looking at Kafka and KV/Store as use
>
>
>
>> cases,
>
>
>
>> >> >> this
>
>
>
>> >> >> > would mean running a whole protocol between the replicas of the
>
>
>
>> >> service
>
>
>
>> >> >> to
>
>
>
>> >> >> > achieve a certain synchronization outcome (be it Paxos, 2 Phase
>
>
>
>> >> Commit or
>
>
>
>> >> >> > Chain Replication - Paxos would probably not be needed since Helix
>
>
>
>> >> >> already
>
>
>
>> >> >> > provides a resilient master for the partition, so there is a clear
>
>
>
>> >> >> > hierarchy). Kafka suggests even more cases if we take the
>
>
>
>> interaction
>
>
>
>> >> >> > between client and service into account, namely specifying the
>
>
>
>> call to
>
>
>
>> >> >> > return after the master gets the data or after consensus between
>
>
>
>> >> master
>
>
>
>> >> >> and
>
>
>
>> >> >> > replicas have been achieved, or sending data asynchronously (the
>
>
>
>> >> >> > combination of the producer.type and request.required.acks
>
>
>
>> parameters
>
>
>
>> >> of
>
>
>
>> >> >> > the producer).
>
>
>
>> >> >> >
>
>
>
>> >> >> > The only reason for which I would like to see a pluggable
>
>
>
>> >> architecture is
>
>
>
>> >> >> > that in high volume applications the messaging stack requires a
>
>
>
>> lot of
>
>
>
>> >> >> > tuning. As I said at the meet-up, in our company we deal with about
>
>
>
>> >> 1.5M
>
>
>
>> >> >> > QPS, so having serialization/deserialization overheads per
>
>
>
>> message, or
>
>
>
>> >> >> > event separate listening/executor threads can be resource
>
>
>
>> intensive.
>
>
>
>> >> >> > Whenever we can, we are tempted to use a stage-event drive
>
>
>
>> >> architecture,
>
>
>
>> >> >> > with few threads that handle large message pools. This also raises
>
>
>
>> the
>
>
>
>> >> >> > question of how to implement the upper-layer callbacks (that would
>
>
>
>> >> >> perform
>
>
>
>> >> >> > the synchronization-related actions) without spawning new threads.
>
>
>
>> >> >> >
>
>
>
>> >> >> > Regards,
>
>
>
>> >> >> > Vlad
>
>
>
>> >> >> >
>
>
>
>> >> >> >
>
>
>
>> >> >> > On Fri, Jul 11, 2014 at 11:40 PM, kishore g <g.kish...@gmail.com>
>
>
>
>> >> wrote:
>
>
>
>> >> >> >
>
>
>
>> >> >> >> Good point Vlad, I was thinking of defining the right abstraction
>
>
>
>> and
>
>
>
>> >> >> >> possibly provide one implementation based. I think the synchronous
>
>
>
>> >> and
>
>
>
>> >> >> >> asynchronous messaging should be covered as part of this.
>
>
>
>> >> >> >>
>
>
>
>> >> >> >> Also I think Finagle and likes of it cater more towards the client
>
>
>
>> >> >> server
>
>
>
>> >> >> >> communication but what we lack today is a good solution for peer
>
>
>
>> to
>
>
>
>> >> peer
>
>
>
>> >> >> >> transport. For example, if some one has to build a consensus layer
>
>
>
>> >> they
>
>
>
>> >> >> >> have build everything from ground up. Providing a base layer that
>
>
>
>> >> >> exchange
>
>
>
>> >> >> >> messages between peers on a per partition basis can be a great
>
>
>
>> >> building
>
>
>
>> >> >> >> block to build different replication schemes.
>
>
>
>> >> >> >>
>
>
>
>> >> >> >> Overall messaging can be used for two cases
>
>
>
>> >> >> >> -- data and control.
>
>
>
>> >> >> >>
>
>
>
>> >> >> >>
>
>
>
>> >> >> >> CONTROL
>
>
>
>> >> >> >>
>
>
>
>> >> >> >> This is needed for control messages that occur rarely, for these
>
>
>
>> >> type of
>
>
>
>> >> >> >> messages latency/throughput is not important but its important
>
>
>
>> for it
>
>
>
>> >> >> to be
>
>
>
>> >> >> >> reliable.
>
>
>
>> >> >> >>
>
>
>
>> >> >> >>
>
>
>
>> >> >> >> DATA
>
>
>
>> >> >> >>
>
>
>
>> >> >> >> This is mainly exchanging data between different roles,
>
>
>
>> >> >> >> controller-participant, participant-participant,
>
>
>
>> >> spectator-participant.
>
>
>
>> >> >> >> These types of message exchanges occur quite frequently and having
>
>
>
>> >> high
>
>
>
>> >> >> >> throughput and low latency is a requirement.
>
>
>
>> >> >> >>
>
>
>
>> >> >> >> For example having the following api and guarantee would allow
>
>
>
>> one to
>
>
>
>> >> >> >> build synchronous replication, asynchronous, quorum etc.
>
>
>
>> >> >> >>
>
>
>
>> >> >> >> send(partition, message, ACK_MODE, callback) ACK_MODE can be like
>
>
>
>> ACK
>
>
>
>> >> >> >> from ALL, QUORUM, 1, NONE etc. callback is fired when one gets the
>
>
>
>> >> >> response
>
>
>
>> >> >> >> back from the receiver.
>
>
>
>> >> >> >>
>
>
>
>> >> >> >> This simple api can allow both synchronous and asynchronous mode
>
>
>
>> of
>
>
>
>> >> >> >> communication. We dont have to do the
>
>
>
>> serialization/deserialization.
>
>
>
>> >> The
>
>
>
>> >> >> >> hard part here would be to guarantee ordering between the
>
>
>
>> messages.
>
>
>
>> >> One
>
>
>
>> >> >> >> should be able to specify the message ordering requirement, FIFO
>
>
>
>> on a
>
>
>
>> >> >> per
>
>
>
>> >> >> >> partition level or dont care about ordering. Having this makes it
>
>
>
>> >> easy
>
>
>
>> >> >> for
>
>
>
>> >> >> >> one to implement replication schemes.
>
>
>
>> >> >> >>
>
>
>
>> >> >> >>  thanks,
>
>
>
>> >> >> >> Kishore G
>
>
>
>> >> >> >>
>
>
>
>> >> >> >>
>
>
>
>> >> >> >> On Fri, Jul 11, 2014 at 12:49 PM, Greg Brandt <
>
>
>
>> brandt.g...@gmail.com
>
>
>
>> >> >
>
>
>
>> >> >> >> wrote:
>
>
>
>> >> >> >>
>
>
>
>> >> >> >>> Vlad,
>
>
>
>> >> >> >>>
>
>
>
>> >> >> >>> I'm not sure that the goal here is to cover all possible use
>
>
>
>> cases.
>
>
>
>> >> >> This
>
>
>
>> >> >> >>> is
>
>
>
>> >> >> >>> intended as basically a replacement for the current Helix cluster
>
>
>
>> >> >> >>> messaging
>
>
>
>> >> >> >>> service, which doesn't rely on ZooKeeper. I would argue that
>
>
>
>> Helix
>
>
>
>> >> is
>
>
>
>> >> >> >>> already that general framework for discovering the service
>
>
>
>> endpoint,
>
>
>
>> >> >> and
>
>
>
>> >> >> >>> that this is just one implementation of an underlying messaging
>
>
>
>> >> stack
>
>
>
>> >> >> >>> (for
>
>
>
>> >> >> >>> which there is currently only the ZooKeeper-based
>
>
>
>> implementation).
>
>
>
>> >> >> >>>
>
>
>
>> >> >> >>> Moreover, keeping it too general (i.e. providing the APIs
>
>
>
>> outlined
>
>
>
>> >> in
>
>
>
>> >> >> the
>
>
>
>> >> >> >>> JIRA, but no implementation) puts much greater onus on the user.
>
>
>
>> It
>
>
>
>> >> >> would
>
>
>
>> >> >> >>> be nice for someone just starting out with Helix to have a pretty
>
>
>
>> >> good
>
>
>
>> >> >> >>> messaging service readily available, as well as the APIs to
>
>
>
>> >> implement
>
>
>
>> >> >> >>> more
>
>
>
>> >> >> >>> specific solutions if he or she so chooses.
>
>
>
>> >> >> >>>
>
>
>
>> >> >> >>> -Greg
>
>
>
>> >> >> >>>
>
>
>
>> >> >> >>>
>
>
>
>> >> >> >>> On Fri, Jul 11, 2014 at 11:07 AM, vlad...@gmail.com <
>
>
>
>> >> vlad...@gmail.com
>
>
>
>> >> >> >
>
>
>
>> >> >> >>> wrote:
>
>
>
>> >> >> >>>
>
>
>
>> >> >> >>> > This sounds like service discovery for a messaging solution. At
>
>
>
>> >> this
>
>
>
>> >> >> >>> point
>
>
>
>> >> >> >>> > there would be some overlap with message buses such as Finagle.
>
>
>
>> >> >> Perhaps
>
>
>
>> >> >> >>> > this should be a general framework for discovering the service
>
>
>
>> >> >> endpoint
>
>
>
>> >> >> >>> > that could leave the actual underlaying messaging stack open
>
>
>
>> (be
>
>
>
>> >> it
>
>
>
>> >> >> >>> > Finagle, Netty-based or ZeroMQ, for example). My only fear is
>
>
>
>> >> that if
>
>
>
>> >> >> >>> the
>
>
>
>> >> >> >>> > messaging framework is encapsulated completely into Helix, it
>
>
>
>> >> would
>
>
>
>> >> >> be
>
>
>
>> >> >> >>> hard
>
>
>
>> >> >> >>> > to compete with tuned messaging bus solutions and cover all
>
>
>
>> >> possible
>
>
>
>> >> >> >>> use
>
>
>
>> >> >> >>> > cases (for example, in my company, we use a large number of sub
>
>
>
>> >> cases
>
>
>
>> >> >> >>> on
>
>
>
>> >> >> >>> > the synchronous call to asynchronous call spectrum).
>
>
>
>> >> >> >>> >
>
>
>
>> >> >> >>> > Regards,
>
>
>
>> >> >> >>> > Vlad
>
>
>
>> >> >> >>> >
>
>
>
>> >> >> >>> >
>
>
>
>> >> >> >>> > On Fri, Jul 11, 2014 at 10:56 AM, Greg Brandt <
>
>
>
>> >> brandt.g...@gmail.com
>
>
>
>> >> >> >
>
>
>
>> >> >> >>> > wrote:
>
>
>
>> >> >> >>> >
>
>
>
>> >> >> >>> >> (copied from HELIX-470)
>
>
>
>> >> >> >>> >>
>
>
>
>> >> >> >>> >> Helix is missing a high-performance way to exchange messages
>
>
>
>> >> among
>
>
>
>> >> >> >>> >> resource partitions, with a user-friendly API.
>
>
>
>> >> >> >>> >>
>
>
>
>> >> >> >>> >> Currently, the Helix messaging service relies on creating many
>
>
>
>> >> nodes
>
>
>
>> >> >> >>> in
>
>
>
>> >> >> >>> >> ZooKeeper, which can lead to ZooKeeper outages if messages are
>
>
>
>> >> sent
>
>
>
>> >> >> >>> too
>
>
>
>> >> >> >>> >> frequently.
>
>
>
>> >> >> >>> >>
>
>
>
>> >> >> >>> >> In order to avoid this, high-performance NIO-based HelixActors
>
>
>
>> >> >> should
>
>
>
>> >> >> >>> be
>
>
>
>> >> >> >>> >> implemented (in rough accordance with the actor model).
>
>
>
>> >> HelixActors
>
>
>
>> >> >> >>> exchange
>
>
>
>> >> >> >>> >> messages asynchronously without waiting for a response, and
>
>
>
>> are
>
>
>
>> >> >> >>> >> partition/state-addressable.
>
>
>
>> >> >> >>> >>
>
>
>
>> >> >> >>> >> The API would look something like this:
>
>
>
>> >> >> >>> >>
>
>
>
>> >> >> >>> >> public interface HelixActor<T> {
>
>
>
>> >> >> >>> >>     void send(Partition partition, String state, T message);
>
>
>
>> >> >> >>> >>     void register(String resource, HelixActorCallback<T>
>
>
>
>> >> callback);
>
>
>
>> >> >> >>> >> }
>
>
>
>> >> >> >>> >> public interface HelixActorCallback<T> {
>
>
>
>> >> >> >>> >>     void onMessage(Partition partition, State state, T
>
>
>
>> message);
>
>
>
>> >> >> >>> >> }
>
>
>
>> >> >> >>> >>
>
>
>
>> >> >> >>> >> #send should likely support wildcards for partition number and
>
>
>
>> >> >> state,
>
>
>
>> >> >> >>> or
>
>
>
>> >> >> >>> >> its method signature might need to be massaged a little bit
>
>
>
>> for
>
>
>
>> >> more
>
>
>
>> >> >> >>> >> flexibility. But that's the basic idea.
>
>
>
>> >> >> >>> >>
>
>
>
>> >> >> >>> >> Nothing is inferred about the format of the messages - the
>
>
>
>> only
>
>
>
>> >> >> >>> metadata
>
>
>
>> >> >> >>> >> we need to be able to interpret is (1) partition name and (2)
>
>
>
>> >> state.
>
>
>
>> >> >> >>> The
>
>
>
>> >> >> >>> >> user provides a codec to encode / decode messages, so it's
>
>
>
>> nicer
>
>
>
>> >> to
>
>
>
>> >> >> >>> >> implementHelixActor#send and HelixActorCallback#onMessage.
>
>
>
>> >> >> >>> >>
>
>
>
>> >> >> >>> >> public interface HelixActorMessageCodec<T> {
>
>
>
>> >> >> >>> >>     byte[] encode(T message);
>
>
>
>> >> >> >>> >>     T decode(byte[] message);
>
>
>
>> >> >> >>> >> }
>
>
>
>> >> >> >>> >>
>
>
>
>> >> >> >>> >> Actors should support somewhere around 100k to 1M messages per
>
>
>
>> >> >> second.
>
>
>
>> >> >> >>> >> The Netty framework is a potential implementation candidate,
>
>
>
>> but
>
>
>
>> >> >> >>> should be
>
>
>
>> >> >> >>> >> thoroughly evaluated w.r.t. performance.
>
>
>
>> >> >> >>> >>
>
>
>
>> >> >> >>> >
>
>
>
>> >> >> >>> >
>
>
>
>> >> >> >>>
>
>
>
>> >> >> >>
>
>
>
>> >> >> >>
>
>
>
>> >> >> >
>
>
>
>> >> >>
>
>
>
>> >>
>
>
>
>>
>
>
>
>
>
>
>

Reply via email to