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)