Two instances: the basics
Why does Azure Advisor flag an App Service plan running on one instance?
An App Service plan is the pool of virtual machines your web apps run on, and the instance count is simply how many of those VMs the plan keeps running. When the count is one, every app on that plan lives on a single VM, and that VM is a single point of failure. App Service moves and upgrades the underlying VMs as part of normal platform operation: OS and runtime patching, hardware retirement, scaling events. Each of those can restart or relocate your only instance, and while the platform restarts it, requests have nowhere else to go.
Azure Advisor surfaces this as a reliability recommendation: scale a production App Service plan out to at least two instances. The reasoning is concrete rather than abstract. With two or more instances, the load balancer can keep serving traffic from the healthy instance while the platform moves or patches the other one, and the App Service Health Check feature, which only takes effect with two or more instances, can pull a misbehaving instance out of rotation without dropping your app. With one instance, there is nothing to fail over to and Health Check has nothing to compare against.
There is a second, quieter reason. If your app has a slow start, a heavy framework, a large in-memory cache, a warm-up routine, then a single-instance plan exposes that cold start to every visitor whenever the platform recycles the VM. The app is technically online while it cold-starts, but the first requests are slow or time out. Two instances let the platform recycle one at a time, so there is always a warm instance answering while the other comes back.
In this lesson you will learn why a single-instance App Service plan is a single point of failure, how the platform's routine maintenance turns that into real downtime and cold-start interruptions, and how to move your production plans to a resilient minimum of two instances with one CLI command or a one-line change in your infrastructure code. You will also see where the line sits between apps that genuinely need the second instance and the internal tools that can stay on one.
The Health Check that only checks when it has company
App Service Health Check, the feature that pulls a sick instance out of the load balancer so it stops serving errors, does nothing at all on a single-instance plan. The logic is deliberate: if App Service removed your only instance, your app would be entirely down, which is worse than serving from a struggling one. So Health Check only takes effect with two or more instances, and there is a further safeguard, if every instance is unhealthy, none are removed, because taking them all out of rotation would be a self-inflicted outage. The feature you turned on to improve reliability is quietly inert until you give it a second instance to work with.
Finding single-instance production plans
Priya runs the platform team at a SaaS company. Azure Advisor has raised a reliability recommendation against the App Service plan behind the customer portal, the company's main revenue front door, telling her to scale it out to at least two instances.
Rather than act on the one Advisor flag, she starts by listing every App Service plan in the subscription with its current instance count and tier, so she can see how many production plans are running on a single instance before deciding which ones to fix first.
List every App Service plan with its instance count, tier and worker count. Any production plan showing a capacity of 1 is a single point of failure.
A revenue-bearing PremiumV3 plan on a single instance is the highest-value target. The Basic internal-tools plan on one instance may be a deliberate, acceptable choice; decide per app, not per flag.
How a single instance turns routine maintenance into downtimedeep dive
The instance count lives on the App Service plan as 'sku.capacity', the number of worker VMs the plan runs. Every web app assigned to that plan runs on every one of those workers, and the platform's load balancer distributes traffic across them. With capacity set to 1, there is exactly one worker, so there is no second target for the load balancer and no instance to fail over to. App Service performs routine maintenance on these workers as a normal part of operation: it patches the OS and language runtime, retires and replaces underlying hardware, and applies platform updates, and any of these can restart or relocate your worker. On a single instance, that recycle is visible to users as a restart, and if your app is slow to start, as a cold-start delay on the first requests.
App Service Health Check changes behaviour entirely depending on instance count. With two or more instances, an instance that fails to return a 2xx response across repeated probes is removed from the load balancer so it stops serving errors, and if it stays unhealthy for an hour the platform replaces it with a fresh one. With a single instance, Health Check is effectively a no-op, because removing the only instance would take the app fully offline, the platform never does that. There is also a deliberate safeguard at the top end: if all instances are unhealthy at once, none are removed, so a bad deploy that sickens every instance does not get amplified into a full blackout by Health Check itself.
Two instances is therefore the floor for the platform's self-healing to function at all, and it is also the precondition for zone redundancy. To spread an App Service plan across availability zones, so the loss of an entire datacentre zone does not take the app down, you need a minimum of two instances on a Premium v2 or higher plan; the platform enforces that floor and bills for it. Adding the second instance is the step that takes you from 'survives nothing' to 'survives a single instance loss', and unlocks the path to 'survives a zone loss'.
What is the impact of running production on one instance?
The direct impact is avoidable downtime and slow requests. Because the platform recycles workers for patching, hardware retirement and updates on its own schedule, a single-instance production app will be interrupted by events you did not initiate and cannot fully predict. Each interruption is short, but it lands without warning, during business hours as easily as overnight, and on a revenue-bearing app each one is lost transactions and a worse customer experience. For apps with a meaningful cold start, the impact is larger: the first wave of requests after every recycle is slow or times out while the app warms up.
The second-order impact is that your reliability tooling does not work. Health Check, the feature meant to detect and eject a failing instance, is inert on one instance. There is no headroom to absorb a traffic spike or a slow instance, because there is no second instance to share load. And you are blocked from the next reliability step entirely: zone redundancy requires at least two instances, so a single-instance plan cannot survive a zone outage no matter what else you configure.
On the governance side, every reliability and operational-resilience expectation, internal SLOs, customer-facing uptime commitments, and the operational-resilience requirements that regulated sectors now face, assumes your production services can survive the loss of a single component. A production app whose architecture cannot survive its one server being restarted is a documented gap against any of those, and a single Advisor reliability recommendation left open is the clearest possible evidence of it.
How do you move production to a resilient minimum?
Work this as a quick triage rather than a blanket change. The goal is a second instance on every plan where downtime has a real cost, and a recorded, deliberate exception on the few where it does not.
1. Inventory plans by instance count and what they serve
List every App Service plan with its tier and current capacity. For each single-instance plan, note what it serves and roughly what an hour of its downtime costs. This is the source of truth, not the single Advisor flag, because Advisor highlights individual plans while the decision is best made across the estate.
2. Scale out the revenue-bearing plans to at least two
For any plan behind a customer-facing or revenue-generating app, raise the worker count to at least two. This is a single command per plan and takes effect without redeploying your app. Two is the floor; for apps with a slow cold start or heavier traffic, three is the more comfortable minimum the reliability guidance suggests.
3. Turn on Health Check and, where it matters, zone redundancy
With two or more instances, enable App Service Health Check so a sick instance is pulled from rotation automatically. For the highest-criticality apps, take the next step and make the plan zone redundant on a Premium v2 or higher tier, which spreads the instances across availability zones so the loss of an entire zone does not take the app down. Zone redundancy itself requires the minimum of two instances you have just set.
4. Bake the floor into your infrastructure code
Set the instance count in the Bicep or ARM template that defines the plan, so a future redeploy cannot quietly drop a production plan back to one instance. Encoding the minimum in the template is the difference between fixing the count today and guaranteeing it stays fixed across every future deployment.
# Scale a production App Service plan out to two instances. Takes effect
# without redeploying the app. --number-of-workers accepts 1 to 30.
az appservice plan update \
--name portal-prod-plan \
--resource-group portal-prod-rg \
--number-of-workers 2
# Enable Health Check on the web app so a sick instance is ejected
# from the load balancer (only effective with two or more instances).
az webapp config set \
--name portal-prod \
--resource-group portal-prod-rg \
--generic-configurations '{"healthCheckPath": "/health"}' Quick quiz
Question 1 of 5Azure Advisor recommends scaling a production App Service plan out to at least two instances. What is the core reason?
You scored
0 / 5
Keep learning
Go deeper on why two instances is the production floor for App Service, and how it connects to Health Check and zone redundancy.
- Reliability in Azure App Service Microsoft's reliability guidance, including running with at least two to three instances and configuring zone redundancy.
- Monitor App Service instances using Health check How Health Check ejects and replaces unhealthy instances, and why it needs two or more to take effect.
- Configure App Service plans for zone redundancy How to spread a plan across availability zones, which requires the two-instance minimum.
You can now treat a single-instance production App Service plan for what it is: an avoidable single point of failure that the platform's own routine maintenance will eventually trip. Inventory your plans by instance count and what they serve, scale the revenue-bearing ones out to at least two, turn on Health Check so the new headroom self-heals, take the critical apps zone redundant, and bake the minimum into your infrastructure code so a redeploy cannot undo it.
Back to the library