Multiple Servers

 

This is the solution for the scalable dynamic world problem. The amount of processing power required to make such a large world, cannot be made available through the use of a single machine running up a server process. Only multiple server machines can handle such a load without compromising the overall responsiveness of the simulation.

The question is; if we run separate server processes... what does each one run exactly ?

On a dedicated server -- that is a host that is not doing world rendering but only game play simulation -- we can roughly subdivide an RTS game on 6 major areas that feed on processor cycles :

 

- AI Players Strategical Status and Goals Evaluation

- Game Resources And Infrastructure Management

- Unit Path Finding

- Unit Tactical Motion/Targeting Logic

- World Rendering Support State

- Other System Resources Management

 

Of all these probably the most time consuming task is the unit path finding, followed by motion/targeting logic. This is because a game of this type has an interesting property if we compare it to say, a typical first person shooter; the largest variable that has impact on scalability is not the number of players, but the number of units.

If we use a single machine, this means we either reduce the unit capability list to a bare minimum, or we cap the number of units the system can handle at a given time by either a forced limit, or better yet game play restrictions designed to contain the expansion of any single player forces. On the other hand if we use multiple servers we can share the heavy work load resulting from the fine grain tactical control over thousands of units at each game cycle and still be able to keep the frame rate up.

 

The network architecture of the multi-servers scheme is a cluster of mandatory servers that share the world simulation and clients that connect to one or more of these servers. No pier-to-pier communication is ever done between clients.

 

How to maintain game play integrity on a simulation that is running on distinct machines ? Well, we can arrange things so that for each unit there is a specific mandatory server that basically owns a master simulation, these mandatory servers could group the units by zones or geographic locations.

We can see that the interaction between units on the same server is easy, but what if they belong to different servers ? One solution, is the communication of interaction events between servers, by sending the parameters of each other units simulation and keeping state by maintain proxy objects of foreign units on each mandatory server so that each host has cached copies of other simulations, synchronization would be done by means of state update if the mandatory server changes the simulation parameters. To increase performance, we could enter the field of prediction but that is probably only a good thing between client and server and not necessarily between mandatory servers.

Other interesting features that could add to the multi-server paradigm are balancing servers, in which the load could pass from server to server on the fly as to avoid any single machine overload, and other one would be mirror servers to add redundancy into the system so that if one machine crashes, its state could be salvaged and not lost forever. This could be enhanced also by having auto backups, that is full state streaming into disk from time to time to recover from any catastrophic disaster. How to load and restore this data into a running and evolving world would be a game play issue though.

 

-Rui Ferreira

mail to: t5rui@hotmail.com

 

 

T-Minus 5 The Multi-Server Real Time Strategy Engine
Copyright © 2000 Rui Ferreira, the standard disclaimer applies.