Building Scaleable Middleware for MMORPGs
CowboyRobot writes "ACM Queue has an article exploring the challenges of developing a reliable platform for an MMORPG, specifically looking at Wish by Mutable Realms. From the article: 'A common scalability problem for distributed multiplayer games relates to managing distributed sets of objects... A player may not be a member of more than one guild, or a guild may have at most one level-5 mage (magician). In computing terms, implementing such behavior boils down to performing membership tests on sets of distributed objects.'"
I've tried a few MMORPGs and have found them all to be lacking in the same key area: one's control over one's character is not real-time. This is a generic description of a problem which surfaces in many ways in MMORPGs, most notably in the combat system. I haven't found one yet that allows real-time combat; it's always "click on the guy you want to fight and press the 'attack' button", then sit back and watch. Typically can do things like cast a spell or use a buff or otherwise make strategic changes to the way that your character is fighting, but you can't aim, run around, swing at the monster, etc, as you can with first person games.
...
The game that comes closest to the combat system I would want is Jedi Academy, in which the multiplayer mode works just like the first-person real-time perspective of the single player game. You do have to aim, you do have to run around and avoid shots, you do have to swing your light saber yourself. I find this to be infinitely more enjoyable than the MUD-like "you hit the spider for 10 points, it hit you for 5 points" back-and-forth that is common on all of the MMORPGs that I have played.
One gets the feeling in playing these MMORPGs that your client view of the world only loosely approximates what is happening on the server. You can make your character run from here to there and find that other people are "sliding" by or popping in and out as you get only sporadic notification from the server of what's really happening. It all gives a very disconnected feel that I really find unappealing about MMORPGs.
There must be some kind of scaleability limitation though because Jedi Academy only supports about 30 players or so at a time in an area that is far smaller than a play area in an MMORPG. I think that if someone could design an MMORPG that played like an FPS, but had all of the depth and breadth of one of these not-so-real-time MMORPGs, it would be ideal.
As an aside, has anyone beta tested Worlds of Warcraft? It like an excellent execution of the MMORPG genre, but I have yet to read any comments from beta testers on whether or not the fighting is real-time or "faked" like other MMORPGs is
I dunno, I've seen groups where there are 5 managers and one peon. Managers seem to accumulate.
You have a bunch of objects [Avatar] (all alike, at least programmatically :-) who want to perform operations on other objects. If the system has a [GuildManager] class, then access to this distributed network of avatars can be forced through the choke-point of 'can this avatar join this guild'.
Uh. By the time you're an Avatar you shouldn't be joining guilds. You should be heading them. Unless, and I may be mistaken here, Avatar is now an inflated title for someone who's really the assistant to the vice grunt.
A feeling of having made the same mistake before: Deja Foobar
I don't see a scaling problem in the example.
Why not just keep a variable on each character associated with each guilds he's in. And then, each guild keeps a list of members.
Thus, a query on the data is always fast and local.
Everybody has their own MMO now, but unless they've actually shipped one they really probably don't understand the true challenges in building one.
The RP in MMPORG means Role Playing ala Dungeons and Dragons. Thus, the focus is on character development, not first person shooter style twitch. RPGs are based on a dice game, and is really about mathematics. The people with powerful characters are the ones who can do math, not the once with a cable modem in the same town as the server.
Wake me up when you have something written by someone who actually has written and shipped a commercial MMORPG.
* P4 2.0GHz; P4 2.8GHz recommended (or Athlon equivalent).
* 512MB RAM; 1GB recommended.
* 64MB DX 9.0 Video Card (GeForce 3/4 Ti; ATI 8500+); 128 MB GeForce FX or Radeon 9600+ recommended.
* 16bit Sound Card; 24bit recommended.
* 8 GB free disk space; 7200+ RPM recommended.
* Connection to the Internet; 33 Kbps modem minimum; broadband recommended.
In the Portland, Ore area and like card games? Check out: http://groups.yahoo.com/group/portlandgames/
This problem is in no way limited to MMORPG, the problem of authenicating and managing objects across multiple servers/clients is central to all online games. As a hobby games developer with a pretty good understanding of this I suggest you read Policing Online Games and then compare the conceptual pitch to issues in digital cash and online money transfers etc.
These ideas also overlap with the much hated and draconian 'trusted computing' models.
Enforcing a set of rules across a network of untrusted hosts is a fascinating problem. For example Gnunet and Freenet forgo a centralised trust agent and allow trust to emerge from the interaction, and recorded past behaviour, of individual nodes.
Digital 'trust' is sure to remain a huge area of interest. However it will also continue to be an area dominated by soothsayers, witchdoctors and charlatans because it contains a numer of fundamental logical problems which are not solved in the traditional human way of appeal to authourity.
Is it actually available for Linux? The site seems to imply that it is currently Windows Only.
I might be wrong, but isn't Nethack text based? It's a lot easier to write a description of an action being carried out, than to actually simulate the action in a virtual world (with physics etc). Animating a towel being dipped into a fountain (an animation which must be carried out by all sorts of different player types and models), is hardly comparable to just writing "you dip the towel in the fountain" in some data file.
A 20 person UT match requires a surprising amount of bandwidth alone to make it as "realtime" as it can get
The large quantity of bandwidth exchanged in a UT (or similar peer-based FPS game) is an artifact of a design as single object view game with no distributed Server-side processing. Instead of waiting for bandwidth and CPU nirvana, there are smarter ways to maximize Server-side entity state updates while optimizing Server-Client bandwidth and delivering only environmentally-relevent data. Also, using multiple, distributed Servers enables you to multiplex Server-Client entity state updates using multiple pipes so you don't get a blocks or racing on a single message broker.
Da Blog
"RPGs are based on a dice game, and is really about mathematics. The people with powerful characters are the ones who can do math, not the once with a cable modem in the same town as the server."
Basically true (about D&D and other RPGs, I mean), although it's not the ideal. The Holy Grail of both P&P (Pencil & Paper) and MMO- RPGs is a system that conforms to common sense, so that math enters your gameplay only a little more than it enters the processes by which you live your everyday life.
That way you can really focus on *CHARACTER* development, rather than *STAT* development.
I agree with you and this is what really, really disturbs me about programmers and development projects these days.
In the classic sense, you select the tools/language best suited for the job. When you're dealing with huge amounts of data and lots of simultaneous usage, performance is going to be the difference between success and failure.
Yet, what do these people do? They choose a set of tools because development would be less problemmatic? Catering to the narrow specialties of their development team is a priority over the long-term performance and stability of the application? Or better yet, let's offload the responsibility for the game being "playable" upon continued development of new technology, which at some point might actually provide the resources necessary to make our badly-designed application perform adequately.
I understand the importance of selecting tools that are well-supported and easy to use, but some applications, such as MMORPGs really require hard-core performance. As a programmer, I've always felt it was a cop-out to force the companies I develop software for to throw more hardware at the application until it stops burping.
On the other hand, Slashdot is using Perl in real time, so maybe I should just shut up.
Web services were never designed to solve this sort of problem. They were never focused on the needs of a performance-critical, real time system like a MMORPG, but rather on doing things like swapping data between corporations and driving Web sites. It's probably more worthwhile to compare with things like MPI (used in supercomputing applications) and CORBA than XML-RPC or SOAP layered over HTTP. I think it'd take a lot of hubris to decide that the latest buzzword of the day (Web Services) is going to magically solve all the problems of the "old" models (CORBA, application-specific protocols).
:) MMORPG middleware is probably one of the few applications where it still makes sense to have a lot of C/C++ code.
Oh, and not to reopen that old debate, but Web services is basically CORBA ten years ago, with a different implementation (XML, SOAP, etc.) that should hopefully work better than CORBA's baroque design-by-committee industry standards. But behind all the buzzwords, we're still talking about the same basic sorts of distributed technology.
I don't imagine you want to suggest to John Carmack that he implement the Doom 3 network code using Python and XML-RPC, do you?