Hi All,
Current auto-scaler takes only the 'average' threshold value from a user's
auto-scaling policy. Then inside the scaling related drools rules it
calculates an upper bound and a lower bound by multiplying the average
threshold value by two non-configurable constants.
scaleUp : Boolean() from ((rifReset && (rifPredictedValue > rifAverageLimit
* *0.8*)) || (mcReset && (mcPredictedValue > mcAverageLimit * 0.8)) ||
(laReset && (laPredictedValue > laAverageLimit * 0.8)))
scaleDown : Boolean() from ((rifReset && (rifPredictedValue <
rifAverageLimit ** 0.1*)) && (mcReset && (mcPredictedValue < mcAverageLimit
* 0.1)) && (laReset && (laPredictedValue < laAverageLimit * 0.1)))
IMO this is a limitation and we could make these constants configurable via
auto-scaling policy.
So, I propose following format to the auto-scaling policy:
{
"id": "autoscale-policy-1",
"loadThresholds": {
"requestsInFlight": {
"upperLimit": 30,
"lowerLimit": 5
},
"memoryConsumption": {
"upperLimit": 80,
"lowerLimit": 50
},
"loadAverage": {
"upperLimit": 100,
"lowerLimit": 20
}
}
}
Then, we can modify the rule to consider user-defined threshold values when
taking the scaling decision.
Let me know your thoughts.
--
Best Regards,
Nirmal
Nirmal Fernando.
PPMC Member & Committer of Apache Stratos,
Senior Software Engineer, WSO2 Inc.
Blog: http://nirmalfdo.blogspot.com/