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/

Reply via email to