Mark Mzyk | February 27, 2008
While still musing on the possibilities of cloud computing, I started to wonder about online games, such as Second Life and World of Warcraft. A large barrier to entry into the online game industry is the sheer cost of the servers. Cloud computing seems to alleviate that burden because the hardware becomes cheap and easily scalable.
However, cloud computering presents a new set of problems, if it is to be used with online games. The question shifts from having the hardware to managing it.
Currently, when playing an online game, players are usually assigned to a server and then their online character exists on that server, but does not exist on any of the other servers that players might be playing on. Each server represents its own encapsulated world. With cloud computing, the physical servers of the game world would be shifting constantly, making it impossible to assign players to a server.
To overcome this, I image there being a set of permanent servers that do nothing but store player information, while the cloud computing servers run the game world, pulling and storing information about the player from the permanent servers as needed. Perhaps to speed up the process, since it would likely involve a lot of similar read and writes, the permanent servers could be set up in a map reduce cluster that parallelizes any work that needs to be done and provides redundancy.
Of course, this still leaves open the issues of running the cloud computing servers. Will the cloud computing servers each run an encapsulated version of the game world? If this is the case, how is it ensured that two friends who want to play together end up on the same server?
Or do the cloud computing servers run one massive version of the game world? If that is the case, how is communication between the servers handled? What if two players want to talk to each other while on different servers? How do the servers handle the load when all the characters in the game world decide to congregate in the same place, placing huge load on one server while other servers are under light load? How is the work split amongst the servers so the players don’t notice any glitches or slow downs?
An intermediate solution I can see is assigning players to the permanent storage servers that sit in front of the cloud. Players pick which storage server they want to reside on. Each storage server then spawns a unique instance of the game world using the cloud computing resources. The storage server then manages the cloud, growing the number of cloud computers used as more players sign on, throttling back when players sign off. There is still the issue with communication among the various cloud computers, but that issue could be resolved by having a permanent server that acts as a choke point, where all communication flows through it. There would be one choke point for each unique instance of the game world.
While perhaps not an ideal solution, it is the first that comes to mind. It’s a start towards solving a problem that will certainly take several iterations to get right. Of course, I’m just spouting ideas and haven’t actually undertaken the task of testing this out.
Any one else have a more elegant solution than what I have offered? It will be interesting to explore what software engineering is needed to solve this problem.
Filed in: General.