Thought of some improvements. - We shall have an AbstractThrottleDecisionEngine so that we can extend the core to support various decision engines later on (to accommodate suggestions from Suho and Senaka). - Make CallerContext abstract so extend into ClusterAwareCallerContext and SingleNodeCallerContext.
Regards, Manoj On Mon, Jan 27, 2014 at 5:33 PM, Manoj Fernando <man...@wso2.com> wrote: > Initial code checked in @ http://svn.wso2.org/repos/wso2/people/manojf . > > Next : implementing periodic counter replication, persistence. > > - Manoj > > > On Mon, Jan 27, 2014 at 9:16 AM, Srinath Perera <srin...@wso2.com> wrote: > >> Hi Suho, >> >> I think we need throttling to work without having to run a distributed >> CEP. Using Siddhi is fine, as that is transparent, but need for Strom to >> run thottling usecae is too much IMO. >> >> --Srinath >> >> >> On Fri, Jan 3, 2014 at 4:55 PM, Sriskandarajah Suhothayan >> <s...@wso2.com>wrote: >> >>> Is there any possibility of using Distributed CEP/Siddhi here? Because >>> with Siddhi we can have some flexibility in the way we want to throttle >>> and throttling is a common usecase of CEP. Its underline architecture >>> also uses Hazelcast or Storm for distributed processing. >>> >>> Regards >>> Suho >>> >>> >>> On Tue, Dec 24, 2013 at 8:54 AM, Manoj Fernando <man...@wso2.com> wrote: >>> >>>> +1. Changing caller contexts in to a Hazlecast map would require some >>>> significant changes to the throttle core, which may eventually be >>>> re-written. >>>> >>>> Will update the design. >>>> >>>> Thanks, >>>> Manoj >>>> >>>> >>>> On Mon, Dec 23, 2013 at 4:09 PM, Srinath Perera <srin...@wso2.com>wrote: >>>> >>>>> Manoj, above plan look good. >>>>> >>>>> I chatted with Azeez, and we cannot register a Entry listener as I >>>>> mentioned before because hazecast does not support entry listeners for >>>>> atomic long. >>>>> >>>>> --Srinath >>>>> >>>>> >>>>> On Mon, Dec 23, 2013 at 11:15 AM, Manoj Fernando <man...@wso2.com>wrote: >>>>> >>>>>> Short update after the discussion with Azeez. >>>>>> >>>>>> - The need to re-write the throttle core is still at large, so the >>>>>> best was to see how we can decouple the persistence logic from the >>>>>> throttle >>>>>> core (at least as much as possible). >>>>>> - A cluster updatable global counter will be included to the >>>>>> ThrottleContext. The idea is that each node will periodically broadcast >>>>>> the local counter info to the members in the cluster and the >>>>>> ThrottleConfiguration will update the value of the Global counter summing >>>>>> up the local counter values. >>>>>> - The ThrottleConfiguration will also push the global counter values >>>>>> to the Axis2 Configuration Context; a K, V pairs identified by the >>>>>> ThrottleContext ID. >>>>>> - A new platform component needs to be written to read the throttle >>>>>> related Axis2 Config Context list and persist them periodically (duration >>>>>> configurable). The throttle core will have no visibility into this >>>>>> persistence logic, so this will be completely decoupled. >>>>>> - So who should do the persistence? We can start with letting all >>>>>> nodes to persist first, but later (or in parallel) we can improve the >>>>>> Hazlecast's leader election (if that's not already there), so that the >>>>>> leader takes the responsibility of persisting. >>>>>> - The counters will be read off the persistence store at the time of >>>>>> Hazlecast Leader election takes place? (An alternative is to load the >>>>>> global counters at the init of ThrottleConfiguration but that means >>>>>> coupling throttle core with persistence.) >>>>>> >>>>>> I will update the design accordingly. >>>>>> >>>>>> Any more thoughts or suggestions? >>>>>> >>>>>> Regards, >>>>>> Manoj >>>>>> >>>>>> >>>>>> On Thu, Dec 19, 2013 at 12:30 PM, Manoj Fernando <man...@wso2.com>wrote: >>>>>> >>>>>>> +1. Let me setup a time. >>>>>>> >>>>>>> Regards, >>>>>>> Manoj >>>>>>> >>>>>>> >>>>>>> On Thursday, December 19, 2013, Srinath Perera wrote: >>>>>>> >>>>>>>> We need Azeez's feedback. Shall you, myself, and Azeez chat >>>>>>>> sometime and decide on the first Arch design? >>>>>>>> >>>>>>>> >>>>>>>> On Thu, Dec 19, 2013 at 11:55 AM, Manoj Fernando >>>>>>>> <man...@wso2.com>wrote: >>>>>>>> >>>>>>>> Hi Srinath, >>>>>>>> >>>>>>>> That sounds like a much cleaner solution. We can perhaps use the >>>>>>>> native map-store declarative [1] which I think does something similar. >>>>>>>> It >>>>>>>> may sound a little silly to ask... but are we keeping Hazlecast active >>>>>>>> on a >>>>>>>> single node environment as well? :) Otherwise we will have to handle >>>>>>>> persistence on a single node in a different way. This is with the >>>>>>>> assumption of needing to persist throttle data on a single node >>>>>>>> environment >>>>>>>> as well (but questioning if we really need to do that is not totally >>>>>>>> invalid IMO). >>>>>>>> >>>>>>>> Shall we go ahead with the Hazlecast option targeting cluster >>>>>>>> deployments then? >>>>>>>> >>>>>>>> - Manoj >>>>>>>> >>>>>>>> [1] https://code.google.com/p/hazelcast/wiki/MapPersistence >>>>>>>> >>>>>>>> >>>>>>>> On Thu, Dec 19, 2013 at 10:51 AM, Srinath Perera >>>>>>>> <srin...@wso2.com>wrote: >>>>>>>> >>>>>>>> One another way to do this use Hazelcast and then use "though >>>>>>>> cache" or "Change listener's" in Hazecast for persistence. >>>>>>>> >>>>>>>> --Srinath >>>>>>>> >>>>>>>> >>>>>>>> On Tue, Dec 17, 2013 at 4:49 PM, Manoj Fernando <man...@wso2.com>wrote: >>>>>>>> >>>>>>>> +1 for persisting through a single (elected?) node, and let >>>>>>>> Hazlecast do the replication. >>>>>>>> >>>>>>>> I took into consideration the need to persist periodically instead >>>>>>>> of at each and every request (by spawning a separate thread that has >>>>>>>> access >>>>>>>> to the callerContext map)... so yes... we should think in the same >>>>>>>> way for >>>>>>>> replicating the counters across the cluster as well. >>>>>>>> >>>>>>>> Instead of using a global counter, can we perhaps use the last >>>>>>>> updated timestamp of each CallerContext? It's actually not a single >>>>>>>> counter we need to deal with, and each CallerContext instance will have >>>>>>>> separate counters mapped to their throttling policy AFAIK. Therefore, >>>>>>>> I >>>>>>>> think its probably better to update CallerContext instances based on >>>>>>>> the >>>>>>>> last update timestamp. >>>>>>>> >>>>>>>> WDYT? >>>>>>>> >>>>>>>> If agree, then I need to figure out how to make delayed replication >>>>>>>> on hazlecast (is it through the hazelcast.heartbeat.interval.seconds >>>>>>>> config >>>>>>>> item?) >>>>>>>> >>>>>>>> Regards, >>>>>>>> Manoj >>>>>>>> >>>>>>>> >>>>>>>> On Tue, Dec 17, 2013 at 4:22 PM, Srinath Perera >>>>>>>> <srin...@wso2.com>wrote: >>>>>>>> >>>>>>>> We need to think it a cluster setup do we need persistence as well? >>>>>>>> As we can have replication using Hazelcast? >>>>>>>> >>>>>>>> If we need persistence, I think it is a good if a single node >>>>>>>> persists the current throttling values, and if that node fails, someone >>>>>>>> else takes it place? >>>>>>>> >>>>>>>> Current implementation sync the values across the cluster per each >>>>>>>> message, which introduce significant overhead. I think we should go to >>>>>>>> a >>>>>>>> model where each node collects and update the values once few seconds. >>>>>>>> >>>>>>>> idea is >>>>>>>> 1) there is a global counter, that we use to throttle >>>>>>>> 2) Each node keep a global counter, and periodically it update the >>>>>>>> global counter using value in location counter and reset the counter >>>>>>>> and >>>>>>>> read the current global counter. >>>>>>>> 3) Until next update, each node make decisions based on local >>>>>>>> global counter values it has read already >>>>>>>> >>>>>>>> This will mean that the throttling will throttle close to the >>>>>>>> limit, not exactly at the limit. However, IMHO, that is not a problem >>>>>>>> for >>>>>>>> throttling usecase. >>>>>>>> >>>>>>>> --Srinath >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Mon, Dec 16, 2013 at 7:20 PM, Manoj Fernando <man...@wso2.com>wrot >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Manoj Fernando >>>>>>> Director - Solutions Architecture >>>>>>> >>>>>>> Contact: >>>>>>> LK - +94 112 145345 >>>>>>> Mob: +94 773 759340 >>>>>>> www.wso2.com >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Manoj Fernando >>>>>> Director - Solutions Architecture >>>>>> >>>>>> Contact: >>>>>> LK - +94 112 145345 >>>>>> Mob: +94 773 759340 >>>>>> www.wso2.com >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> ============================ >>>>> Srinath Perera, Ph.D. >>>>> http://people.apache.org/~hemapani/ >>>>> http://srinathsview.blogspot.com/ >>>>> >>>> >>>> >>>> >>>> -- >>>> Manoj Fernando >>>> Director - Solutions Architecture >>>> >>>> Contact: >>>> LK - +94 112 145345 >>>> Mob: +94 773 759340 >>>> www.wso2.com >>>> >>>> _______________________________________________ >>>> Architecture mailing list >>>> Architecture@wso2.org >>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture >>>> >>>> >>> >>> >>> -- >>> >>> *S. Suhothayan * >>> Associate Technical Lead, >>> *WSO2 Inc. *http://wso2.com >>> * <http://wso2.com/>* >>> lean . enterprise . middleware >>> >>> >>> *cell: (+94) 779 756 757 <%28%2B94%29%20779%20756%20757> | blog: >>> http://suhothayan.blogspot.com/ <http://suhothayan.blogspot.com/> twitter: >>> http://twitter.com/suhothayan <http://twitter.com/suhothayan> | linked-in: >>> http://lk.linkedin.com/in/suhothayan <http://lk.linkedin.com/in/suhothayan>* >>> >>> >> >> >> -- >> ============================ >> Srinath Perera, Ph.D. >> >> Director, Research, WSO2 Inc. >> Visiting Faculty, University of Moratuwa >> Member, Apache Software Foundation >> Research Scientist, Lanka Software Foundation >> Blog: http://srinathsview.blogspot.com/ >> Photos: http://www.flickr.com/photos/hemapani/ >> Phone: 0772360902 >> >> _______________________________________________ >> Architecture mailing list >> Architecture@wso2.org >> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture >> >> > > > -- > Manoj Fernando > Director - Solutions Architecture > > Contact: > LK - +94 112 145345 > Mob: +94 773 759340 > www.wso2.com > -- Manoj Fernando Director - Solutions Architecture Contact: LK - +94 112 145345 Mob: +94 773 759340 www.wso2.com
_______________________________________________ Architecture mailing list Architecture@wso2.org https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture