You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by la...@apache.org on 2015/03/01 18:29:44 UTC
stratos git commit: Updating autoscaling logic to work with practical
values
Repository: stratos
Updated Branches:
refs/heads/master 960e4240f -> 08045d9cf
Updating autoscaling logic to work with practical values
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/08045d9c
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/08045d9c
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/08045d9c
Branch: refs/heads/master
Commit: 08045d9cf13197ec32a8776e2f3abca354aa613a
Parents: 960e424
Author: Lahiru Sandaruwan <la...@apache.org>
Authored: Sun Mar 1 22:59:21 2015 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
Committed: Sun Mar 1 22:59:31 2015 +0530
----------------------------------------------------------------------
.../autoscaler/rule/RuleTasksDelegator.java | 27 +++++++++++++-------
.../src/main/conf/drools/scaling.drl | 6 +++--
2 files changed, 22 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/08045d9c/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
index bb28bc5..66568af 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
@@ -86,27 +86,36 @@ public class RuleTasksDelegator {
}
public int getNumberOfInstancesRequiredBasedOnMemoryConsumption(float threshold, double predictedValue,
- int activeInstanceCount) {
+ int min, int max) {
+ double numberOfAdditionalInstancesRequired = 0;
+ if(predictedValue != threshold) {
- double numberOfInstances;
- if(threshold != 0) {
+ float scalingRange = 100 - threshold;
+ int instanceRange = max - min;
- numberOfInstances = (activeInstanceCount * predictedValue) / threshold;
- return (int) Math.ceil(numberOfInstances);
+ if(instanceRange != 0){
+
+ float gradient = scalingRange / instanceRange;
+ numberOfAdditionalInstancesRequired = (predictedValue - threshold) / gradient;
+ }
+ }
+ if(min + numberOfAdditionalInstancesRequired > max){
+ return max;
+ } else {
+ return (int) Math.ceil(min + numberOfAdditionalInstancesRequired);
}
- return activeInstanceCount;
}
public int getNumberOfInstancesRequiredBasedOnLoadAverage(float threshold, double predictedValue,
- int activeInstanceCount) {
+ int min) {
double numberOfInstances;
if(threshold != 0) {
- numberOfInstances = (activeInstanceCount * predictedValue) / threshold;
+ numberOfInstances = (min * predictedValue) / threshold;
return (int) Math.ceil(numberOfInstances);
}
- return activeInstanceCount;
+ return min;
}
public int getMaxNumberOfInstancesRequired(int numberOfInstancesRequiredBasedOnRif,
http://git-wip-us.apache.org/repos/asf/stratos/blob/08045d9c/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
index a871469..3d13308 100644
--- a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
@@ -84,12 +84,14 @@ dialect "mvel"
laPredictedValue : Double() from delegator.getLoadAveragePredictedValue(clusterInstanceContext)
activeInstancesCount : Integer() from clusterInstanceContext.getActiveMemberCount()
+ maxInstancesCount : Integer() from clusterInstanceContext.getMaxInstanceCount()
+ minInstancesCount : Integer() from clusterInstanceContext.getMinInstanceCount()
requestsServedPerInstance : Float() from clusterInstanceContext.getRequestsServedPerInstance()
averageRequestsServedPerInstance : Float() from clusterInstanceContext.getAverageRequestsServedPerInstance()
numberOfInstancesReuquiredBasedOnRif : Integer() from delegator.getNumberOfInstancesRequiredBasedOnRif(rifPredictedValue, requestsServedPerInstance, averageRequestsServedPerInstance, arspiReset)
- numberOfInstancesReuquiredBasedOnMemoryConsumption : Integer() from delegator.getNumberOfInstancesRequiredBasedOnMemoryConsumption(mcThreshold, mcPredictedValue, activeInstancesCount)
- numberOfInstancesReuquiredBasedOnLoadAverage : Integer() from delegator.getNumberOfInstancesRequiredBasedOnLoadAverage(laThreshold, laPredictedValue, activeInstancesCount)
+ numberOfInstancesReuquiredBasedOnMemoryConsumption : Integer() from delegator.getNumberOfInstancesRequiredBasedOnMemoryConsumption(mcThreshold, mcPredictedValue, minInstancesCount, maxInstancesCount)
+ numberOfInstancesReuquiredBasedOnLoadAverage : Integer() from delegator.getNumberOfInstancesRequiredBasedOnLoadAverage(laThreshold, laPredictedValue, minInstancesCount)
numberOfRequiredInstances : Integer() from delegator.getMaxNumberOfInstancesRequired(numberOfInstancesReuquiredBasedOnRif, numberOfInstancesReuquiredBasedOnMemoryConsumption ,mcReset ,numberOfInstancesReuquiredBasedOnLoadAverage, laReset)