NLB Ain't Application-Aware

It's been ages since I touched on anything wibbles-related, but I realized I'd neglected a very common query:

If one of my applications is under load, will Network Load Balancing route/move/transfer all the additional load to the other server?

No. As long as the box still lives (or more specifically, the NLB driver is able to send heartbeats and receive incoming IP traffic), NLB will keep on allowing connections.

The load rules are used to govern the rough percentages of connections, but any web developer will tell you that connections don't necessarily map to load.

From NLB's perspective, it doesn't even matter if your application isn't running any more. It's simply there to filter out all the traffic you don't want to hit that machine. (Recall that getting NLB working basically means fire-hosing all incoming traffic at all members of the NLB cluster, and relying on each node to know which bits of traffic to ignore, and which they "own").

For Terminal Servers, this means that if one TS is overloaded and can't accept any more connections, NLB doesn't know or care. IIS is similar - if one Web app is chewing 100% CPU, don't expect connections to be balanced to another server based on that fact alone.

This leads to the existence of health-monitoring utilities that will pull a box from an NLB cluster (i.e. DRAINSTOP it) if they detect a problem with a key app (much as ISA Server 2006 and 2004 do when they detect a problem with an array member).

Technet describes this in more detail here.

(Thanks to 'softie Daniel Taylor for digging up the relevant links and mailing them to me.)