Low pain massively multiplayer systems: Peer review requested
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