[ 
https://issues.apache.org/jira/browse/CAMEL-5039?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13217711#comment-13217711
 ] 

Xavier Fournet commented on CAMEL-5039:
---------------------------------------

Hi Ashwin,

your pseudo code is quite similar with the mine I had attached before. The 
difference is in the strict application of the round robin at each round or a 
statistical application of the weights on a long number of execution.

I just notice that this is quite similar with the coding challenge recently 
proposed by Cedric Beust, see
http://beust.com/weblog/2012/02/16/a-new-coding-challenge-2/
http://beust.com/weblog/2012/02/20/various-ways-to-get-randomness-wrong/

I used and adapted his method to check the randomness of the repartition. I 
also added some stats on distances between the choice of the same processor.
I also worked on the round robin implementation that suffer the same kind of 
default

I have tested three random implementation:
* CurrentWeightedRandomLoadBalancer: the current camel random implentation
* NewStrictWeightedRandomLoadBalancer: a random algorithm with strict weight 
loadbalancing at each turn (ie the one I had previously proposed)
* NewApproximateWeightedRandomLoadBalancer: a random algorithm with non-strict 
weight loadbalancing at each turn (ie the one you propose if I had correctly 
implemented it)
and 2 two round robin implementation
* CurrentWeightedRoundRobinLoadBalancer: the current camel random implementation
* NewWeightedRoundRobinLoadBalancer: a new implementation that try to do a 
better loadbalacing (ie avoid peak)

Results (the out.txt attachment has been created by using 2 14 3 1 weights as 
program arguments)
* every algorithm respect the weight (see last line of Distribution matrix)
* CurrentWeightedRandomLoadBalancer is clearly not random if we consider the 
criteria exposed by Cedric (see Max of error and Average of error, both are in 
percentage)
* NewStrictWeightedRandomLoadBalancer and 
NewApproximateWeightedRandomLoadBalancer can be considered random and performs 
equally in regards of this criterias. However considering the standard 
deviations of the distances between two same choosen endpoint, the 
NewStrictWeightedRandomLoadBalancer is doing a better job especially on routes 
with lowest weigths ie it minimize the risk of peaks)
* NewWeightedRoundRobinLoadBalancer do a better job for pure round robin but is 
not perfect. I used a naive approach, may be someone could have better idea to 
implement it ? the goal is to minize at the maximum the distance stddev

best regards,

Xavier

                
> Make WeightedRandomLoadBalancer really random
> ---------------------------------------------
>
>                 Key: CAMEL-5039
>                 URL: https://issues.apache.org/jira/browse/CAMEL-5039
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core
>            Reporter: Xavier Fournet
>            Assignee: Ashwin Karpe
>         Attachments: CamelLoadBalancerTest.java, CamelLoadBalancerTest.java, 
> current-impl-result.txt, new-impl-result.txt, out.txt
>
>
> As Mark Harwood explained in last comment of CAMEL-3197 the 
> WeightedRandomLoadBalancer is not doing a good load balancing job if some 
> weight are a lot bigger than some other weight.
> See in the attached example (current-impl-result.txt), the first and third 
> routes are always called at the very beginning of every 50 iterations 
> loadbalancing round.
> I propose a modified algorithm that do a more balanced loadbalancing 
> (new-impl-result.txt)
> Attached the test program with the proposed implementation.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to