Zero-downtime deployment pattern in Terraform - Time & Space Complexity
We want to understand how the time to deploy changes grows as we increase the number of servers or instances.
Specifically, how does zero-downtime deployment affect the number of operations Terraform performs?
Analyze the time complexity of this Terraform snippet for zero-downtime deployment.
resource "aws_autoscaling_group" "blue" {
name_prefix = "blue-"
desired_capacity = var.instance_count
launch_configuration = aws_launch_configuration.blue.id
}
resource "aws_autoscaling_group" "green" {
name_prefix = "green-"
desired_capacity = var.instance_count
launch_configuration = aws_launch_configuration.green.id
}
resource "aws_route53_record" "app" {
zone_id = var.zone_id
name = var.app_name
type = "A"
alias {
name = aws_autoscaling_group.green.load_balancer_dns_name
zone_id = aws_autoscaling_group.green.load_balancer_zone_id
evaluate_target_health = true
}
}
This code creates two groups of servers (blue and green) and switches traffic between them for zero downtime.
Look at what Terraform does repeatedly when scaling or switching.
- Primary operation: Creating or updating each server instance in the autoscaling groups.
- How many times: Once per instance, for both blue and green groups, so roughly twice the number of instances.
As the number of instances increases, Terraform must manage more resources.
| Input Size (n) | Approx. Api Calls/Operations |
|---|---|
| 10 | About 20 instance operations (10 blue + 10 green) |
| 100 | About 200 instance operations |
| 1000 | About 2000 instance operations |
Pattern observation: The number of operations grows roughly twice as fast as the number of instances because two groups are managed.
Time Complexity: O(n)
This means the deployment time grows linearly with the number of instances managed in both groups.
[X] Wrong: "Zero-downtime deployment means the deployment time stays the same no matter how many instances there are."
[OK] Correct: Even with zero downtime, Terraform must create or update each instance, so the total work grows with the number of instances.
Understanding how deployment time scales helps you design systems that stay responsive and reliable as they grow.
What if we changed from two autoscaling groups (blue and green) to a single group with rolling updates? How would the time complexity change?