I noticed recently in the Azure Portal that with little fan-fare or documentation, native auto-scaling for pooled desktop host-pools has gone native. For a while, now WVD/ AVD host pool scaling has been dealt with via third-party solutions (such as Nerdio) or by the Microsoft provided collection of Logic Apps and Automation Runbooks. In this post, I will compare the new native scaling solution against the logic app deployment and third-party solutions to help you decide which better suits your organisation.
The Logic App & Runbook Solution
If you deployed WVD/AVD pooled desktops sometime over the last year or so, you are probably doing one of three things:
- Paying too much to have VMs idling overnight,
- Paying a third party to manage scaling for you, or
- Using the Microsoft provided Logic App/Runbook combo.
Obviously, the third option would have been quite appealing as you can deploy the solution yourself and immediately start saving money (without having to give some of it to a third-party). This solution, however, is not without its drawbacks.
- Deployment is cumbersome (it’s a collection of PowerShell scripts that won’t check for dependent modules for example),
- Tweaking and configuring your scaling settings requires editing a logic app, and
- Troubleshooting the solution if and when required means your admins have to have a sound understanding of Logic Apps, PowerShell, and Azure Automation.
Once the solution is in, however, it pretty much “Does What It Says On The Tin™” and will happily scale your hosts in and out based on how many sessions are active per host. It is worth noting though that the Logic App is triggered by a timer. This might not seem like a problem at first until you consider the potential balancing act. Set that trigger interval too low and you’re going to be paying for unnecessary Logic App and Runbook executions, set it too high and your users are going to notice something is a bit busted. For example, if you have the trigger set to run every 15 minutes (which is the default) and you had a rush of users logging in over a singular 15 minute period, the Logic App will not have executed and powered on more VMs to ensure availability and your users will get an error message saying they should perhaps contact their administrator (and that’s you! And you’re on your lunch break! And they haven’t made your Banh Mi yet!) The next iteration of this solution addresses this problem, and a couple more to boot.
The Azure Native Solution
The native scaling solution, which appears to have skipped the usual raft of preview modes and popped up in everyone’s tenant already improves on the functionality of the Logic App/Runbook combo in several ways. Perhaps most importantly for many organisations, the scaling plan is now a nice tidy little package within Azure Virtual Desktop and requires no explicit skills or knowledge of PowerShell, Azure Automation, or Logic Apps. It also introduces several new key features:
- Exclusion tags: Define a tag that will exclude a VM from your scaling plan
- Granular scheduling: Create multiple schedules for your host pools, each with their own scaling settings
- Ramp-up: Fire up VMs on the shoulder of your peak times to ensure availability
- Ramp-down: Scale back VMs approaching your off-peak periods
Although not explicitly mentioned as a feature, the absence of a specific trigger suggests that the scaling should now be much closer to real-time now. I’m yet to test this functionality but will circle back and update this blog once I’ve had a play.
It’s worth noting here that if you do have internal staff with the right skill set, it’s not impossible to extend the old Logic App/Runbook solution to include these new features, but the day-to-day administration & modification of these things will never be quite as simple. Often in these cases, the person who created the most complicated solution doesn’t work for the company anymore, and you may find yourself having to send a WhatsApp to John on a Sunday to ask him why your scaling solution stopped working.
There are of course a few more players in this space of third-party vendors who jumped in to address scaling issues before they existed in any capacity on the Microsoft side of the fence. I’m most familiar with the features of the Nerdio solution, but others no doubt offer similar features. Nerdio may have been built initially to address the lack of scaling, but it also offers several key advantages over the existing Microsoft offerings. For example:
- Image Management: A nice UI for firing up, modifying, and saving gold images
- Auto-Heal Broken Session Hosts: Restarts and/or replaces session hosts with specific statuses
- Re-Image pools: Replace existing session hosts in a pool easily with a new image
- FSLogix Profile Configuration: Manage FSLogix profile settings from within the console
- Host Bursting: When there are no more hosts to power on, automatically provision new ones
I’m not going to list every additional feature Nerdio has (this isn’t a sponsored post), but the point here is that this product (and others) may have started life as a scaling solution, but they have evolved to be more of a swiss army knife for AVD admins. This is of course not without the associated costs. Everything that can be done through the Nerdio console can also be done in other ways in Azure, given the right skill set – it’s just not in a nice centralised dashboard and readily understood by everyone.
OK, So What Should I Do?
If you are using the Logic App/Runbook combo today, it seems like a no-brainer to scrap that solution and replace it with the new native scaling solution. You will get better controls over your scaling settings in a much easier to understand and administer package and will cost you exactly no more dollars (and in fact may save you money). The decision however to replace an existing third-party scaling solution may require a little more consideration.
- Are you using the additional features?
- Do you need to?
- For the sake of a per-user licensing fee, could you make do with adjusting the way you use those additional features?
As is often the case, it’s a bit of a cost-benefit analysis. While the new scaling solution addresses some gaps in the native AVD offering, there are still a couple of notable absences which would make sense. For me, a big one is host bursting. This Nerdio feature allows you to have an existing pool of desktops that scale by switching on and off, but once that pool is exhausted, new hosts will be automatically provisioned. That makes a load of sense.
In the existing solution, if the pool were to become saturated, users would just be told they can’t log on anymore, while you’re on your lunch break and they haven’t made your Bahn Mi yet.
Again, this is not an unsolvable problem, it’s just a question of if you’d like to pay a per-user fee to solve the problem and have it in a nice little console.
Microsoft is clearly showing a commitment to building out the AVD (and Windows 365) product, and I expect we’ll see more and more of these current third-party features trickling in to make the product more powerful and easier to administer.