Scaling policies (target tracking, step, simple) in AWS - Time & Space Complexity
When using scaling policies in AWS, it's important to understand how the number of scaling actions grows as demand changes.
We want to know how the system reacts over time as load increases or decreases.
Analyze the time complexity of these scaling policy operations.
aws application-autoscaling put-scaling-policy --policy-name my-step-policy --service-namespace ecs \
--resource-id service/default/sample-webapp --scalable-dimension ecs:service:DesiredCount \
--policy-type StepScaling --step-scaling-policy-configuration file://step-config.json
aws application-autoscaling put-scaling-policy --policy-name my-target-tracking-policy --service-namespace ecs \
--resource-id service/default/sample-webapp --scalable-dimension ecs:service:DesiredCount \
--policy-type TargetTrackingScaling --target-tracking-scaling-policy-configuration file://target-tracking.json
These commands set up step and target tracking scaling policies for an ECS service.
Look at what happens repeatedly as load changes:
- Primary operation: Scaling actions that adjust the number of instances.
- How many times: Each scaling action happens whenever the metric crosses thresholds or deviates from the target.
As load increases, the number of scaling actions grows roughly in proportion to how often the metric crosses thresholds.
| Input Size (Load Changes) | Approx. Scaling Actions |
|---|---|
| 10 | About 10 scaling actions |
| 100 | About 100 scaling actions |
| 1000 | About 1000 scaling actions |
Pattern observation: Scaling actions increase linearly with the number of load changes.
Time Complexity: O(n)
This means the number of scaling actions grows directly with the number of load changes.
[X] Wrong: "Scaling happens instantly and only once regardless of load changes."
[OK] Correct: Scaling policies react each time the metric crosses thresholds, so multiple scaling actions happen as load fluctuates.
Understanding how scaling actions grow with load helps you design systems that respond well to demand and avoid surprises in performance.
What if we changed from step scaling to simple scaling? How would the time complexity change?
Practice
Solution
Step 1: Understand target tracking policy function
Target tracking automatically adjusts resources to keep a metric (like CPU usage) near a set target value.Step 2: Compare with other options
Manual scaling and scheduled scaling do not automatically adjust based on metrics, and disabling scaling is unrelated.Final Answer:
To automatically adjust resources to keep a metric close to a target value -> Option AQuick Check:
Target tracking = automatic metric-based scaling [OK]
- Confusing target tracking with manual scaling
- Thinking scheduled scaling is target tracking
- Assuming target tracking disables scaling
Solution
Step 1: Identify simple scaling policy syntax
Simple scaling uses PolicyType "SimpleScaling" with AdjustmentType and ScalingAdjustment fields.Step 2: Verify JSON options
{"PolicyName": "ScaleOut", "PolicyType": "SimpleScaling", "AdjustmentType": "ChangeInCapacity", "ScalingAdjustment": 2} matches simple scaling syntax; others are for target tracking, step scaling, or scheduled scaling.Final Answer:
{"PolicyName": "ScaleOut", "PolicyType": "SimpleScaling", "AdjustmentType": "ChangeInCapacity", "ScalingAdjustment": 2} -> Option CQuick Check:
Simple scaling = PolicyType "SimpleScaling" [OK]
- Using TargetTrackingScaling type for simple scaling
- Confusing step scaling syntax with simple scaling
- Including schedule fields in simple scaling
{
"PolicyType": "StepScaling",
"StepAdjustments": [
{"MetricIntervalLowerBound": 0, "ScalingAdjustment": 1},
{"MetricIntervalLowerBound": 10, "ScalingAdjustment": 2}
]
}If the metric increases by 12 units, how many instances will be added?
Solution
Step 1: Understand step adjustments
Each step defines scaling for metric intervals. For metric increase of 12, check which intervals apply.Step 2: Find matching step
12 is >=10, so the second step applies with ScalingAdjustment 2.Final Answer:
2 -> Option DQuick Check:
Metric 12 >= 10 -> add 2 instances [OK]
- Adding adjustments from both steps
- Choosing the first step only
- Ignoring metric intervals
Solution
Step 1: Check alarm linkage
Step scaling policies rely on CloudWatch alarms to trigger. If alarms are not linked, no scaling occurs.Step 2: Evaluate other options
Target tracking does not override step scaling; negative adjustments cause scale-in, not no action; no instances means no scaling needed.Final Answer:
The metric alarms are not properly linked to the scaling policy -> Option BQuick Check:
Missing alarm linkage = no scaling trigger [OK]
- Assuming target tracking disables step scaling
- Ignoring alarm configuration
- Confusing negative adjustment with no scaling
Solution
Step 1: Understand target tracking role
Target tracking keeps CPU near 50% automatically adjusting capacity.Step 2: Understand step scaling role
Step scaling defines specific actions when CPU crosses 70% (add 2) or 30% (remove 1).Step 3: Combine policies
Use target tracking for steady state and step scaling for aggressive changes beyond thresholds.Final Answer:
Use a target tracking policy for 50% CPU and step scaling for adding/removing instances at 70% and 30% -> Option AQuick Check:
Target tracking + step scaling = precise control [OK]
- Using only one policy type for all needs
- Confusing scheduled scaling with metric-based scaling
- Ignoring removal scaling actions
Ready to prove it?
Pass the test and this pattern moves unknown
