Re: Proposal for weighted routing user experience in Cloud Foundry
Filip Hanik
aaarrgh, there is a bug in my psuedo code
clusterWeight = [v1,v1,v1,v1,v1,v1,v2,v2,v2,v3,v3] should be
clusterWeight = [v1,v1,v1,v1,v1,v1,v2,v2,v2,v3,v4]
Full solution:
Implementation: "Randomized Round Robin" is also super simple [pseudo code follows]
clusterWeight = [v1,v1,v1,v1,v1,v1,v2,v2,v2,v3,v4] //very easy to create based on base1 solution
randomCluster = random(clusterWeight)
int atomicPointer = 0;
for each request:
next = atomicPointer.getAndIncrease();
application = randomCluster[atomicPointer];
On Fri, Jul 13, 2018 at 8:09 PM Filip Hanik <fhanik@...> wrote:
I put a long comment in the doc, maybe comments are good for short notes. here is the spiel"The sum of weights must add to 100"I would say this is where being user friendly ends. If I add reviews-v4 I have to go in and rebalance the whole thing just to figure out how to get to 100.an alternate solution can be much simpler:What if you just used a single integer that is relative to the whole cluster. let's call it "base1-lb"reviews-v1: 6reviews-v2: 3reviews-v3: 1there are two ways to think of thisrelative to each other:In this scenario, v1 gets twice as many requests as v2, and six times as many requests as v3or in consideration of X requests: (and this is most likely how the code implements it so that it doesn't have to do a lot of math)This is saying is that for every (total) 10 requests, this is how they distributed.to add v4reviews-v1: 6reviews-v2: 3reviews-v3: 1reviews-v4: 1this is still super simple to look at. v1 gets 6x more than v3/v4, still gets 2x more than v2. I don't have to figure out how to "add up to a 100"and it's not complicated to calculate either. for every 11 requests:v1 gets 6v2 gets 3v3 gets 1v4 gets 1Implementation: "Randomized Round Robin" is also super simple [pseudo code follows]clusterWeight = [v1,v1,v1,v1,v1,v1,v2,v2,v2,v3,v3] //very easy to create based on base1 solutionrandomCluster = random(clusterWeight)int atomicPointer = 0;for each request:next = atomicPointer.getAndIncrease();application = randomCluster[atomicPointer];and that's it. the router doesn't have to figure out where the next request goes. This is a simple, elegant and easy to understand solution.FilipOn Fri, Jul 13, 2018 at 3:09 PM Shubha Anjur Tupil <sanjurtupil@...> wrote:The CF Routing team has received feedback from many users that support for weighted routing would make it easier to accomplish their goals. We have a proposal on the preferred user experience for weighted routing and the considerations we have taken into account.
If you have thoughts on this or have experience working with traffic splitting on other platforms, please share your feedback with us. Feel free to comment on the doc or reply here.
Regards,
CF Routing Team