The current server system for the game in general is very inefficient. There are also times where the client exits or goes back to the title screen depending on errors that occur before a player is logged into the game. Once in game, there are times where a player is locked on a black loading screen until manually exiting the client.
Server restructuring
Login server: Two purposes. 1) Validates login information. 2) Checks the lobby server's current capacity. If the lobby server is full, place the account in the login queue server. If the lobby server is not full, place the account in the lobby server.
Login queue server: Two purposes. 1) Check the lobby server's current capacity. 2) Place the account in the lobby server if it has an opening. This is more efficient because the lobby server will only be queried once (for the person that is #1 in line) instead of thousands of times by every player attempting to connect.
Lobby server: Three purposes. 1) Retrieve a list of current online servers. 2) Retrieve a list of characters for the server selected. 3) Check the selected character's server capacity. If the server is at capacity, put the character in the world queue server. If the server has an opening, connect the player.
Lobby queue server: Two purposes. 1) Check the lobby server's capacity. 2) Place the character in the lobby server if it has an opening. Again, this is much more efficient because only one capacity check is being made by the #1 queue spot, instead of thousands of players at the same time.
World server: Two purposes. 1) Host the character for all non-instance content. 2) Check instance servers for capacity. More on this in the instance server section.
World queue server: Two purposes. 1) Check world server's capacity. 2) Place character in the world server if it has an opening. Again, this is much more efficient because only one capacity check is being made by the #1 queue spot, instead of hundreds of players at the same time.
Instance server: Two purposes. 1) Check its current capacity. If full, put player in a duty finder style queue. 2) Host instanced content.
Instance queue server: Two purposes. 1) Check instance server capacity. 2) If a spot is open, display a duty finder style dialogue to enter the instanced content.
Error restructuring
1) Issue: If the client fails to connect to the lobby server at the title screen, the client exits.
Resolution: Do not exit the client. Display an error message and a "Will attempt to reconnect in <x amount of time>"
2) Issue: "This World is currently full. Please wait until an opening is available and try again." -- This error takes you back to the title screen.
Ideal resolution: Use the world queue server to place the character in a queue.
Non-ideal resolution: Return to the character select menu instead of the title screen.
3) Issue: Infinite black loading screen and/or error message concerning inability to connect to instance server.
Resolution: As mentioned above, use an instance queue server with a duty finder style dialogue on the player's screen. This is more efficient (balances server load) and more user friendly (lets the player do something else while waiting for the instance servers to have an opening).
Will add more later when I remember other issues / suggestions.