Idea:
Split server into world servers, and a player server.
Essentially, the game would have the abiity to run on
N+1 machines.
World servers would essentially be what the main server
core is now. They would be in charge of a large chunk
of land, and process everything regarding that chunk.
There would be a single player server, which acted like
an intermediary client. It would talk with the world
server (or maybe multiple ones, if we wish to extend
that way) and contain data about the direct
surroundings of the player, just like the client does.
However since we can trust it, it could handle all
player collision, and all player->player interaction.
Essentially.. the player server could house all the
player connections, get an idea of the map conditions
on the underlying world server, and perform certain
actions on behalf of the engine. Anything that needed
interaction with the world server, would be handled
just like the client currently communicates with the
main server now.
The benefit of this is that a single machine can be
dedicated to handling players, and therefore more can
be handled. The world servers free from having to do
constant collision work and whatnot for the players,
would be free to move NPCs around as it pleases.
Additionally the world servers could be farmed out, to
a grid of world servers, each in charge of one chunk of
land. (the player server would know that location x,z
is owned by server N)
Main drawbacks would be:
1) Additional latency between client and main server,
as the player server now has to talk to the world
server occasionally to perform certain actions.
(probably combat)
2) Code complexity would be involved in allowing the
game to still run as a single process, for smaller servers.