Low pain massively multiplayer systems: Peer review requested

Joel Reymont <>
Mon Sep 26 09:18:15 CEST 2005

On Sep 25, 2005, at 10:54 PM, Martin Bjorklund wrote:

>   o  In the second sentence, you say that you achive "unlimited
>      scalability".   When I read such a claim I get suspicious...

Well, I mean that you can just throw hardware at the problem.

>   o  In the scalability chapter, a picture of the architecture might
>      help.  Such as this (if I got it right):
>      Tier 3: mnesia masters    M0 --- M1 --- ... --- Mm
>      Tier 2: game servers   G0 --- G1 ---         ...    ---  Gn
>      Tier 1: gateways     X0 ---  X1 --- ...                  ---   Xp
>      I would also like to see a discussion about the numbers m, n and
>      p above, and how the nodes in the layers communicate.  Also how
>      mnesia is used in the different layers.

Nodes communicate using ... regular Erlang internode communications.  
I envision only having a couple of Mnesia masters, tailored for fast  
writes (RAID?) and a few gateways. Gateways don't do a lot of work  
and connections to them are very short-lived (less than a second?).  
The rest can be game servers.

Mnesia really does not need to be used on the gateways but I use  
Mnesia for configuration data. Now, gateways don't use any  
configuration data and pick out game servers with a pg2 call, so  
gateways still don't need to use Mnesia.

I suppose you could pass the name of the node make a connection with  
to the gateway "startup" function, then the effect should be the same  
as with giving extra_db_nodes to Mnesia.

>      NOTE:  At nortel we have (had, I'm not at nortel anymore...) a
>      similar high-level architecture, where we have up to 4 "master"
>      nodes, which are fully-connected distrib. erlang nodes, with
>      disk-copy mnesia.  Then we have up to 252 "slaves" which are NOT
>      part of the distrib. erlang net, but talk (erlang terms) over a
>      socket to the masters.

This could be a good idea going forward, yes.

>      I'd like to see a discussion about this as well.   It looks like
>      all your nodes ar part of the same distrib. erlang networks -
>      this may have scalability issues.

I think that putting all the nodes on a Gigabit LAN might speed  
things up. You disagree?

>      How do you handle partitioned netowrks?

I'm not. What are the conditions under which Mnesia partitions?

>   o  Which parts of the run-time state is kept in mnesia?  RAM/disk?

Game and player info is kept in memory and disk. I don't have any  
disc_only tables. My idea is to run through a game and then save the  
results and ship bulky items such as hand histories to a relational db.

>   o  Have you done any tests with many nodes, lots of ongoing games,
>      and e.g. pulled a network cable somewhere?

I simulate a  number of conditions but mostly on my laptop. I have  
tested lots of ongoing games but not with many nodes.



More information about the erlang-questions mailing list