Glader wrote:Well non-time sensitive things like loot and drops can be high latency actions that all other nodes can agree on first. However, issues in agreeing on damage players took or damage monsters took is significantly more difficult because high latency there is unacceptable PLUS the game world for every other players isn't going to look the same for everyone. Plus you'll need to implement a physics/world rewind mechanic so that when people receive this information they can TRY, emphasis on the try, to rewind to the state the world was seen in by the sender. Since latency between request and receiving on other nodes will be anywhere between 200-1000ms it's going to be difficult or impossible to deal with.
If consensus is too slow, then you need to have a master, but to have a master in a distributed system, that means the master can change at any time. So you need a master plus a couple of slaves, each of which keeps tightly synced with the master and can immediately take over (all clients with connections to the master for a given object must also have connections to the slaves).
One thing to keep in mind - players cannot affect the game world more than about 50 yards away from themeselves. World PvP is the worst case scenario, for player density in a small area.
However, if we imagine a master server PER OBJECT, or something like that, then that scenario I think doesn't really matter - what you actually care about instead are situations where a single player has a very large number of objects nearby, since he'll need a master server connection for each one.
So what you can try to do is keep physically proximate objects on the same server, for latency - but then you need a more capable server, if there are a lot of objects. However, it might be possible to have consensus ina timely manner between a small number of servers, and if so, you could distribute the load then over a set of master servers.
Blah blah etc talking off the top of my head - I've only ever looked at the server source code to figure out how it was rendering the OpenGL for a scene =-)