6
\$\begingroup\$

A friend of mine is asking me to help out on a project of his, I have done a small amount of game development before, but mainly do application and enterprise development these days.

He is asking me to look into some of the networking part of his game. I know that a huge part of this is going to involve reporting/analytics as well as scalability, so it isnt as simple as spamming a server and instantly getting responses.

In the enterprise app/web world we tend to use CQRS pattern or some other similar approach when we need to scale quite well and also take into account reporting on interactions etc.

So I imagine that most typical MMO style games (lets assume mmorpg games akin to WoW), they must employ a heavily distributed and scaleable system. So do they end up using a node system with a messaging fabric behind the scenes?

Sorry for being a bit vague but are there any sort of articles on people discussing the overall architecture for these style games?

\$\endgroup\$
3
  • 1
    \$\begingroup\$ Related: How is load balancing achieved in MMOs? and How to write a network game? \$\endgroup\$ Jul 5, 2011 at 16:32
  • \$\begingroup\$ You can move a lot of complexity to the data-layer for an MMO game by using cloud based auto-sharded engines, I recently published an article on the topic linked here. \$\endgroup\$ Apr 6, 2018 at 23:26
  • \$\begingroup\$ @MadScientist If you feel like expanding your answer to a more complete one (you can leave the link in) so that it's not a link only answer, either re-post an answer or try an edit the one you have and flag for moderator (not sure if that works but it's worth a try). \$\endgroup\$
    – Vaillancourt
    Apr 7, 2018 at 0:01

2 Answers 2

3
\$\begingroup\$

There are MMO code bases available, which might be better than articles? Depends on how you like to investigate a field.

Panda3D, Ryzom, Mangos (warcraft emu), the WorldForge project, and so on. Experimental engines like Smash in erlang. Many older MMOs are built on top of MUD code.

Most core MMO architectures aren't like enterprise setups, the usage pattern is built around a soft realtime simulation and not services.

The supporting bits like logging, authentication, load balancing are pretty much just like enterprise apps and services and some of the end user experience before attaching to the simulation have been done as traditional web services.

\$\endgroup\$
2
  • 2
    \$\begingroup\$ What is MUD Code? \$\endgroup\$ Jul 5, 2011 at 14:35
  • 4
    \$\begingroup\$ @iamcreasy Multi User Dungeon. M.U.D. A MUD is a command line (normally) MMORPG. They used to be played by telneting into a server and then playing from there. \$\endgroup\$
    – Cromulent
    Jul 5, 2011 at 14:43
1
\$\begingroup\$

There are two types of MMO games. There are real-time games, along the lines of Eve and World of Warcraft, then there is everything else. Farmville, Mafiawars, etc. They both dictate totally different backend architectures.

For games like Farmville, your standard line-of-business type architecture will really excel, because the way users interact with the data is very similar and the data can easily be stored in a traditional Relational Database System.

Games that require real-time interaction between hundreds or thousands of players simply cannot be shoehorned into the line-of-business architecture. As @Patrick points out, many of the supporting elements of the game such as logging, authorization and authentication can be handled in a similar fashion to line-of-business applications. The tricky part, is handling "the world." This is where there really is no "right way" it all depends on how many players you expect to have, and what type of resources (programming and hardware) you are willing to throw at it.

I would argue, that you can start with a typical dedicated server setup for an FPS, and optimize from there where you start to see issues. Probably the first thing to implement is a way to have multiple of these "servers" talking to each other. Obviously you'll want to run this on a beefy physical box with plenty of bandwidth. IMO, the reason that many FPS games keep server size small, is because they know people are going to run it on some old P4 they have lying around and they'll do it on a crappy DLS connection, not because the server software cannot keep track of hundreds of players. Though I'd bet that typical "level size" is also a reason to keep the max players lower on FPS games.

The reality is that you will not have the same amount of players that World of Warcraft or Eve have overnight, and if you ever do approach those numbers where your architecture startes to show its weaknesses, I always say, that is a great problem to have because it means you're raking in the cash.

\$\endgroup\$
2
  • \$\begingroup\$ This project I believe would be more real-time, but may have mini web applications linking off this, to make use of some of the data. One of the main things that interests me is how everything internally communicates. Is it common practise to have some shared messaging system to relay messages between nodes? as I assume you want to be able to deploy/destroy instances really quickly, so having a generic messaging bus they all listen to then you could roll out as many Worker nodes as you want for doing the resource intensive stuff, and just have the front facing servers to relay the requests. \$\endgroup\$ Jul 7, 2011 at 8:43
  • \$\begingroup\$ Yes, some type of message system is required for serving the world with mroe than one node; however, at some point, the "world" must be serialized to disk in the event of a system crash. The frequency of this can vary, but it is off this database that I would build front-end facing web apps. \$\endgroup\$
    – Nate
    Jul 7, 2011 at 14:43

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .