(imported comment written by SystemAdmin)
I use autoselection for a large number of machines and there are a number of cases where one or two relays will be the closest/best choice for machines, even with 3 or 4 other relays screaming for attention.
Now, in an ideal world, I would just install new relays, relocate existing ones or create new relays to ensure the coverage is balanced a bit better. As this really isn’t an option, the best way I’ve found to handle it is to use a tiered naming convention in my autoselection list.
Example: The advertisment list is something like “d_1,d,c,b,a,*”, where some clients might have “d,c,b” in their list, and some will have “d_1,d”. The ones with “d_1” will attempt to find a matching relay with “d_1” in their list. If they can’t find one (or there isn’t space), they will try “d”. Any clients with “d” will ignore “d_1” in the list, but still might connect to one with “d_1”, having matched on the “d” in the list.
But even with the settings above, the real control for load balancing is to use “_Enterprise Server_ClientRegister_MaxChildCount”. This sets the limit for how many clients you will allow to connect to a relay. So, assuming you have 2000 clients that are trying to connect to three relays, 'Mr. Popular Relay" is set to 800 (or 900, 1200, etc. depending on spec), which will force the other 1200ish clients to get fed up and go shuffling off to find a less popular relay. Keep in mind that you still might have ‘Mr. Kind-of-Popular Relay, but who isn’t as Popular as Mr. Popular Relay’ that might need a cap as well (800 - 900?), to keep the desperate clients from clinging on to that one and ignoring the 3rd.
Once it is set up, it works very well, with only a quick check now and again to ensure your client loads are reasonably balanced.
-Jim