Can you believe that Windows Server 2008 has been on the market for over six months now? Last May I wrote about the new Terminal Server features of Windows 2008, including what Microsoft calls the TS Session Broker. (And in fact, Michel Roth wrote a very in-depth overview of this feature last summer.) The TS Session Broker is used to route incoming RDP connection requests to an appropriate terminal server, be it a user with an existing disconnected session somewhere in the farm that should be routed back to that server, or a new user that should be sent to the least-loaded server in the farm. The biggest complaint that people have about the TS Session Broker is that it's a bit hard to configure. (Well, maybe not "hard" per se, but it's definitely complex.) The good news about that being the only complaint is that once the Session Broker is up and running, it works well--the pain is only one-time.
Like many features of Windows Server, the TS Session Broker is a "platform" feature that provides basic functionality, but Microsoft wrote it in such a way that it's highly extensible. To that end, the Microsoft Terminal Server team has started blogging about the various ways that the Session Broker can be extended. For example, Christa Anderson (she's at Microsoft now) wrote about how you can use the Session Broker's APIs to remove the built-in load balancing mechansim (that only allows connections to Terminal Servers) and replace it with your own code that does whatever you want, including brokering connections to desktops for VDI scenarios.
Following up on Christa's post, Roman Porter just posted the first entry in a series that will walk you through creating your own load-balancing logic to override the basic stuff from Microsoft. (The other biggest complaint of the TS Session Broker is that its load-balancing logic is too simplistic.) I'm not a programmer, so I don't know how hard this would be to do, but how cool would it be to make a free plug-in / extenstion to the built-in load-balancer that would extend it so it could use any perfmon counter you wanted? I would imagine you could even build a little list of counters, specify your maximum and minimums, and off you go!
If this were the case, I'd personally make some load-balancing rules that primarily looked at the total users on a server, but I'd also want to take into consideration things like processor queue lenght, memory pages input per second, disk queue length, and network queue length. (Unfortunately, none of these counters are exposed in XenApp.) This would also be cool because if you were using something like RTO PinPoint which creates its own "logon speed" perfmon counters, you could factor that into your load-balancing decision as well.