Developer Blogs Tech Team Blogs

Technical Requirements for MMOGs

I’ll start with a brief introduction. My name is Robert L. Marsa, and I’m the lead programmer here at Spacetime Studios.

Massively-multiplayer online games are different from most other types of software in scope, complexity, and lifetime. Because of this, the technical requirements that are most important when building them are different from those of other software. What follows are my thoughts on the most important requirements:

Requirement 1: Availability

This may seem obvious, but if the game is not available, i.e. if you can’t log in and play, then it’s not going to do very well. A lot of things go into making sure an MMOG is available, it is not simply the task of making it stable. Stability is certainly important. After all, it is tough to play a game if the client or server keeps crashing. However, there are many worse things than a crash.

Even if the software is perfect (and it never is), there will still be times when a process goes down due to other factors like hardware failure. The system must be robust enough to handle these cases gracefully. Server systems should have failover capabilities so that the affected processes will automatically restart or their functionality will be taken over by other processes. At worst, a small set of users will face a short interruption in game play, while the others will be unaffected. Clients must be able to reconnect after a crash to find themselves in the same place and state as when they disconnected.

In multi-threaded systems, deadlock can make a process appear to be running, but not be available since it can’t respond to user requests. These systems must be designed with a deadlock detection system that will kill the process when deadlock occurs so that the system can continue to function. Once again, it is far better to have a short interruption of play than to have an extended period where the game is not working properly.

The network interface can greatly affect availability. Network protocols must be carefully designed so that a single runaway or unresponsive client cannot unfairly affect the performance of other clients. One error I’ve seen in practice is where network descriptors get used up so that even though the system is up and running correctly, no one can log in. Having good testing tools to simulate loads and adverse network conditions can help to catch these issues.

An MMOG will need to be modified many times after launch. While it is standard practice for servers to be brought down for daily or weekly maintenance, there is no reason why a system can’t be designed to minimize downtime from scheduled maintenance. Any time the service is down, whether it is planned or accidental, it is still unavailable.

Requirement 2: Correctness

The worst possible thing to have in an available game is data corruption. It is much preferable for a process to crash and restart than for it to continue to run in an invalid state. Users are far more tolerant of crashes than they are of data loss. Data corruption can result in something as simple as a character losing an item, to an individual player not being able to use his account, to an entire cluster being unable to boot.

Correctness demands integrity checking of loaded data, of internal state, and of saved data. To ensure valid data is saved, make sure multiple pieces of data are saved in the correct order or using transactions. Depending on the data storage mechanism, it may be necessary to include data hashes to make sure the data that is saved and read is the same.

Making sure the game runs correctly will not only prevent data loss, but dupes and cheating as well.

Requirement 3: Maintainability

An MMOG will (hopefully) be deployed for many years and see nearly constant revision. On top of this, the development team will likely see significant turnover. Therefore it is necessary to take extra care to ensure that the code-base is maintainable.

While maintainability is enhanced by many things including uniform coding standards, up-to-date documentation, and new hire training, the primary driver of maintainability is having flexible system designs on a solid architecture. The former things help with code understanding and readability, while the latter are what allow new features to be added without requiring major rewrites. These major rewrites are what cause significant breakage and instability when attempting what seems at first to be a minor functionality change.

Along with good, flexible designs, a great way to improve maintainability is to have extensive automated unit tests. Having these in place gives a team confidence that it can make changes to the code without introducing lots of new bugs that may go undetected until they are exposed to the players.

Requirement 4: Scalability

Performance is a very important requirement for games and this is no less true for massively-multiplayer ones. However, the aspect of performance that is most important for an MMOG is scalability, not raw speed. Players have significant freedom to affect the game world in ways that can’t be controlled. In particular, the population of regions of the game can vary from zero to several hundred players.

Game clients must be able to gracefully handle these widely varying loads so that a player maintains an adequate frame-rate while still getting the required visual information. Servers must be able to maintain adequate update rates to make sure game-play is responsive and that clients don’t get bumped off the network due to excessive bandwidth.

Here at Spacetime Studios, we are architecting our systems with these requirements in mind. We believe this will help us produce a fun game that will stay that way for years to come.

  • Robert

Leave a Reply

pr@spacetimestudios.com jobs@spacetimestudios.com :: SPACETIME STUDIOS ::