Wondering if this would even be possible
#1
Hey didnt want to make a request thread or anything because i am more just wondering if its even possible. Would it even be conceivable to distribute server load across multiple machines? Mineserver mentioned having this capability although i am not sure how true that is as i can find no documentation on the feature or settings to set anything like that up in its config files.

It would definitely be interesting to have the ability to split server load along a cluster of servers. This could also help tackle the latency issues with larger more open servers. By that i mean that most VPS networks are connected together insanely well. So you could have a server in say LA NJ IL Amsterdam places like that and have the servers connected together and their load spread. The latency between the VPS's themselfs would likely be less than 100ms (i have found this to be the case for the VPS's i own they average on 50ms between the 2 farthest) So people could connect to the one closest to them and get a better route to the game helping to reduce their overall latency.
Reply
Thanks given by:
#2
You mean like the thing that bukkit has, that you can walk through a portal and you get send to a different server( many big servers do that )
Reply
Thanks given by:
#3
No i more mean like actually distributing the load of one world over different computers. I dont pretend to know programming but i would assume this could be done by making each different computer hold control over an equal share of the currently generated map with a "master" server. like if you had 5 computers and the map was 1000 chunks each computer would govern over 250 chunks and then the "master" computer would keep track of all the changes and when players switched to another server and such.

Or just something to that effect.
Reply
Thanks given by:
#4
Hi,
depends on what you call "Distributing the load". If you have a multi-world server, then it would be rather trivial to host each world on a separate VPS and have one "manager" VPS which would act as the server to which the players connect; it would then relay each player's communication to the server which runs the appropriate world. However, usually when thinking about "distributing", you want to host one world across multiple servers. Unfortunately this is technically almost impossible, no matter what server software you use. The reasons are several, let me just skim through the list:
- Tick synchronization - there is no reasonable way to synchronize game ticks across the servers; this would break most redstone and quite a lot of other stuff.
- Chunk management - the servers would need to decide which server "owns" which chunk; changes to that chunk would need to be directed to the correct server; which is difficult especially for things like fluid generation
- Entity management - similar to chunk management, but even worse, because entities would have to migrate from server to server when they move.

In a nutshell: take a look at the source code and see how often we use the cCSLock class. Each such usage would mean a need to synchronize several servers. This would produce so much overhead that it would kill and overkill any performance increase that could be gained - each such synchronization means at least one packet travelling both ways between *all* server machines.

Note that the reasons are generic and aren't tied to MCServer, so it means there can be no server software at all doing this; no point searching.

Hmm, it took me so long to write my reply that you've already answered the primary questionTongue
Reply
Thanks given by:
#5
(05-12-2013, 12:30 AM)xoft Wrote: Hmm, it took me so long to write my reply that you've already answered the primary questionTongue

Those things happenBig Grin thanks for responding! good to know i figured something would make that more or less impossible, I like the fist idea you mentioned tho having the manager VPS, afaik the current bukkit plugins that do multiworld with multipul servers simply move the players to that server instead of just relaying data it would be nice to have that. How possible would it be for the servers to behave sort of like a BGP network? making sure the player is communicating via the best possible route given the options available?
Reply
Thanks given by:
#6
I don't think the bukkit plugins move players to a different server, there's no support for that in the protocol (unless they had a corresponding counterpart plugin in the client that would make the switch, of course).

I believe the player already connects in the best possible route - that's what the routing tables are for; the player says "connect to IP A" and that's it. There's no way in TCP/IP to say "connect to IP A through router B and then router C"; only the router config does that.

Easy to see - grab some advanced networking tool - wireshark or maybe even netstat would do; connect to such a server, note the connection IP, then move to a different world, see if the IP changes. I'd be very surprised if it did.
Reply
Thanks given by:
#7
(05-12-2013, 12:42 AM)xoft Wrote: I don't think the bukkit plugins move players to a different server[..]

Well it is possible somehow. This server: mc.mcorigins.com teleports you to different servers for almost every Minigame.
Reply
Thanks given by:
#8
Ah i could have sworn they switched. That is unfortunate it would be nice to be able to have a mesh network and let people connect to any server and have the server determin which server they should relay information through. I do this on my VPS's for my domains with vpn's and BGP as well as a few other things but i suppose it makes sense that an application like minecraft would have a damn hard time even being coded to do something like that let alone the server.

I suppose it would be possible to have people inside a network similar to mine and have them run their games while on that network since the network transparently routes all traffic within the network in the best manner possible as determined by the routes and protocols. Anyway im rambling thanks for the answers.
Reply
Thanks given by:




Users browsing this thread: 1 Guest(s)