If money was no object, how many slots could you fit on a server? I haven't seen a sever larger than 125, but if a millionaire got addicted to this game and wanted to host an epic server, what is the most players he could comfortably fit with very little lag at one time before logistical issues got in the way? What kind of glitches or problems would occur when your push this limit?
Given that the game is single threaded, whatever you could manage on a top end CPU core would be your theoretical upper limit. At least with the vanilla game anyway. I could see using a bit of modding and magic to allow multiple instances of the game server to access the same set of save data allowing each one to serve people in different parts of the world, but preventing conflicts and keeping them in sync would be ... interesting. That and if all the players decided to go to the same chunk you would again hit the processing limit for a single core.
Rollback Post to RevisionRollBack
Tis far better to be a witty fool than a foolish wit.
It would depend mainly on the internet connection of what you were hosting it on. Besides that, you could buy all the hardware needed. Unless there's actually a max connection amount in the server file that we don't know about..
Yeah the way Minecraft is written now it isn't very scalable. I agree with the assessment that rewriting MC in C++ would be the better thing to do with some central advanced memory data structure with caching that autosaves to industrial Static Ram drives. It's has been my experience in programming that given a sufficient enough memory data structure, the program that does the actual work can be scaled quite easily. Imagine a server that could support 10s of 1000s of connected users at the same time. Damn that actually sounds like a fun project. LOL
With the existing version of MC until more server optimizations are made it will always struggle as users are added.
Eh a C++ rewrite isn't going to give -that- much of a boost. The bigger gain would be from re-writing the server to be able to support multiple instances running off the same data source while all still looking like one server from the client side. That would free the game from being dependent on what hardware can be crammed into a single machine.
Rollback Post to RevisionRollBack
Tis far better to be a witty fool than a foolish wit.
Eh a C++ rewrite isn't going to give -that- much of a boost. The bigger gain would be from re-writing the server to be able to support multiple instances running off the same data source while all still looking like one server from the client side. That would free the game from being dependent on what hardware can be crammed into a single machine.
Errr...that's what I said - rewriting it so it is a scalable application. I was merely dreaming about writing a client server application with advanced memory schemes and other bus technologies to use a shared memory structure. The OP did say money was no object. The language type has little to do with it. I choose C++ because that's my bread and butter.
Glad to see I got some people knowledgeable on the subject. So it seems agreed that if the game was rewritten, it could hold at the least 10,000. What is the limits of the game as it is?
The upper limit would likely come from the mean specs (hardware and connection) of the clients. At a certain point, as things saturate, you would have people not seeing other players because their pipe or processor or ram is full.
I think people would agree getting dropped into lava or killed for no apparent reason would constitute a failure. The alternative would be something like Eve Online's slideshow mode, which isn't a much better choice.
Currently the server size might be partly limited by server capabilities. If you assume cost is no issue, the connections and capabilities of clients quickly are the sticking point.
I agree with the thought of a server rewrite. Rewrite it as a threaded processing environment with multiple points of connection to maximize internet throughput, place a load balancer in front to send to the different cards, and you could use an entire server rack to serve thousands, possibly hundreds of thousands.
I haven't taken a look at the code though, so I'm not 100% sure how efficient it is currently written, and what data needs sending.
Maybe I'll start studying the code, and see what I can do. Problem being, making it compatible without official support would always put playing at a standstill until the server can be updated to be compatible with the client.
Well, how difficult would a rewrite be? How long and how much would it cost?
Wouldn't a minecraft server with the population of a small town, spread out for several miles be epic?
Given access to the current code base and Notch, I would guess a team of 4 programmers could get something very close in about a year. 1 of them could be a network and high speed hardware specialist, another as a systems integrator, the other 2 could be hero C++ (or whatever language used, D would be fun) programmers strong in game design. Current pay scales for those skillsets would be about $110,000 salary each. That is ignoring all the support for the programmers: Administration and Quality Assurance mainly. Then there is the hardware needed to test on. That will be about $250,000 - since we are testing with terabit transfer speeds and the hardware needed for that. Setup a business structure and a nice environment with creature comforts. We are talking about 1 million to 1.5 million USD total for the year. This is all an educated guess.
<rant>I don't know the monetary value and economy over in Sweden, but it irks me when people say he has a million dollars and make it sound like Notch is just taking all that bank and frittering away his new found financial freedom. He is not. He is investing into his future with a gamble on his business. Yes, even Minecraft is still a gamble as to it's continued success.</rant>
Well, how difficult would a rewrite be? How long and how much would it cost?
Wouldn't a minecraft server with the population of a small town, spread out for several miles be epic?
Given access to the current code base and Notch, I would guess a team of 4 programmers could get something very close in about a year. 1 of them could be a network and high speed hardware specialist, another as a systems integrator, the other 2 could be hero C++ (or whatever language used, D would be fun) programmers strong in game design. Current pay scales for those skillsets would be about $110,000 salary each. That is ignoring all the support for the programmers: Administration and Quality Assurance mainly. Then there is the hardware needed to test on. That will be about $250,000 - since we are testing with terabit transfer speeds and the hardware needed for that. Setup a business structure and a nice environment with creature comforts. We are talking about 1 million to 1.5 million USD total for the year. This is all an educated guess.
<rant>I don't know the monetary value and economy over in Sweden, but it irks me when people say he has a million dollars and make it sound like Notch is just taking all that bank and frittering away his new found financial freedom. He is not. He is investing into his future with a gamble on his business. Yes, even Minecraft is still a gamble as to it's continued success.</rant>
I think a rewrite is absolutely necessary at some point, or perhaps minecraft 2 could be written from scratch in that code. (You know it's gonna happen, if notch doesn't do it, some company will buy the rights to do it themselves once minecraft is 50 million plus.) If notch were to do this, would it be best to wait until beta is done, release the first complete version while working on a c++ counterpart for the next year.
Basically, is it at all feasible that notch will do this, and if so, at what point?
I think a rewrite is absolutely necessary at some point, or perhaps minecraft 2 could be written from scratch in that code. (You know it's gonna happen, if notch doesn't do it, some company will buy the rights to do it themselves once minecraft is 50 million plus.) If notch were to do this, would it be best to wait until beta is done, release the first complete version while working on a c++ counterpart for the next year.
Basically, is it at all feasible that notch will do this, and if so, at what point?
Since we've long entered into dreaming mode, yes this is quite feasible and you've answered your own question. I like your faith that Minecraft will sell 50 million plus. That's a true fan.
Just to speculate a little further, Notch has mentioned that some of the company is working on their next project/game. What I think is interesting is will this follow the same altered software cycle? Public releasing of a minimally functional Alpha, go through the hard knocks that is Beta, add community features as long as interests are high and he decides to slap the the Gold label on it. Might this next game be more traditional when the public sees it now that he doesn't need the money?
I've been mulling this over in my head for a few weeks now and I think it's possible to hit a bandwidth bottleneck in scaling without a full rewrite.
What I'd do is write or adapt a proxy server to handle the connections from clients and depending on the coordinates of the player pass them to a backend server in charge of that area. You could get as granular as one server per chunk if you had to. The proxy could be a pretty simple state machine, take in a few streams of events, figure out the x/y/z of the event and forward it to n clients and 1 server. Figuring out how to hand off clients to the next server would be fun but it shouldn't be impossible. Since your proxy is talking to unpatched clients you can change the wire protocol between proxy and servers to accommodate it more easily if needed.
The harder part is how to determine what coordinates hit which server and how to balance that with your users, I'd lean towards patching the server to use cassandra to store chunks, cassandra clusters can hit hundreds of thousands of k/s if you can throw enough servers at it. So assuming there are not major false assumptions I'm making you're limited by how many connections your proxy can juggle without melting. Since it's nearly stateless that should be a pretty large number. If you could get multiple proxies to talk to each other (multicast? redis pubsub?) you might get multiple proxies running at once and load balance between them but you're still limited by your interconnect bandwidth.
Probably not something one person is going to do in any reasonable timeframe but should be doable by a community if people are interested. And of course you get to use all the work laid down by all the server mod authors and you're still mostly using the official client and server and not distributing anything.
Finding someone with deep enough pockets to host the thing (or finding a way for it to pay for itself and not getting sued into oblivion by Mojang) is left as an exercise for the reader.
This is exactly what I was thinking in terms of data traffic topography. Java isn't my main language so I didn't know about the Cassandra project - that looks pretty cool. For extreme bandwidth issues on the server side, traffic from the proxy clients to the server could go through racks of backplane computers that multiplex traffic flow through fiber optic links. I've managed to get consistent throughput of over 1 petabit/s in a previous project.
Extreme data throughput issues aside, a major issue is proxy client to Minecraft client on the consumer computer. The handing off of that communication channel could be handled through a control UDP port that each proxy would handle in turn. Essentially a flow control UDP port would establish the new TCP/UDP port and once that is done would shut itself down. The proxy clients on the server side could also talk to each other to exchange the visual information what the MC character can see, such as mobs and other player activity. Interesting that this might prove to be the bottleneck on a proxy client if too many players are on it. That again could be scaled if necessary.
There actually is a proxy already written (no vouching for it's throughput of course) for this portal mod: http://forum.hey0.net/showthread.php?tid=847. And yeah if you could swap out the backend protocol to a UDP based one you should be able to do handoffs without too much pain.
Hell you'd get quite a lot further with scalability by just swapping out the dumb-file backend to a JDBC. Minecraft on Oracle, I'm sure there's a market...
Also, what is the largest server you have seen?
With the existing version of MC until more server optimizations are made it will always struggle as users are added.
Errr...that's what I said - rewriting it so it is a scalable application. I was merely dreaming about writing a client server application with advanced memory schemes and other bus technologies to use a shared memory structure. The OP did say money was no object. The language type has little to do with it. I choose C++ because that's my bread and butter.
400 at once? That sounds insane.
I think people would agree getting dropped into lava or killed for no apparent reason would constitute a failure. The alternative would be something like Eve Online's slideshow mode, which isn't a much better choice.
Currently the server size might be partly limited by server capabilities. If you assume cost is no issue, the connections and capabilities of clients quickly are the sticking point.
I haven't taken a look at the code though, so I'm not 100% sure how efficient it is currently written, and what data needs sending.
Wouldn't a minecraft server with the population of a small town, spread out for several miles be epic?
Given access to the current code base and Notch, I would guess a team of 4 programmers could get something very close in about a year. 1 of them could be a network and high speed hardware specialist, another as a systems integrator, the other 2 could be hero C++ (or whatever language used, D would be fun) programmers strong in game design. Current pay scales for those skillsets would be about $110,000 salary each. That is ignoring all the support for the programmers: Administration and Quality Assurance mainly. Then there is the hardware needed to test on. That will be about $250,000 - since we are testing with terabit transfer speeds and the hardware needed for that. Setup a business structure and a nice environment with creature comforts. We are talking about 1 million to 1.5 million USD total for the year. This is all an educated guess.
<rant>I don't know the monetary value and economy over in Sweden, but it irks me when people say he has a million dollars and make it sound like Notch is just taking all that bank and frittering away his new found financial freedom. He is not. He is investing into his future with a gamble on his business. Yes, even Minecraft is still a gamble as to it's continued success.</rant>
I think a rewrite is absolutely necessary at some point, or perhaps minecraft 2 could be written from scratch in that code. (You know it's gonna happen, if notch doesn't do it, some company will buy the rights to do it themselves once minecraft is 50 million plus.) If notch were to do this, would it be best to wait until beta is done, release the first complete version while working on a c++ counterpart for the next year.
Basically, is it at all feasible that notch will do this, and if so, at what point?
Since we've long entered into dreaming mode, yes this is quite feasible and you've answered your own question. I like your faith that Minecraft will sell 50 million plus. That's a true fan.
Just to speculate a little further, Notch has mentioned that some of the company is working on their next project/game. What I think is interesting is will this follow the same altered software cycle? Public releasing of a minimally functional Alpha, go through the hard knocks that is Beta, add community features as long as interests are high and he decides to slap the the Gold label on it. Might this next game be more traditional when the public sees it now that he doesn't need the money?
What I'd do is write or adapt a proxy server to handle the connections from clients and depending on the coordinates of the player pass them to a backend server in charge of that area. You could get as granular as one server per chunk if you had to. The proxy could be a pretty simple state machine, take in a few streams of events, figure out the x/y/z of the event and forward it to n clients and 1 server. Figuring out how to hand off clients to the next server would be fun but it shouldn't be impossible. Since your proxy is talking to unpatched clients you can change the wire protocol between proxy and servers to accommodate it more easily if needed.
The harder part is how to determine what coordinates hit which server and how to balance that with your users, I'd lean towards patching the server to use cassandra to store chunks, cassandra clusters can hit hundreds of thousands of k/s if you can throw enough servers at it. So assuming there are not major false assumptions I'm making you're limited by how many connections your proxy can juggle without melting. Since it's nearly stateless that should be a pretty large number. If you could get multiple proxies to talk to each other (multicast? redis pubsub?) you might get multiple proxies running at once and load balance between them but you're still limited by your interconnect bandwidth.
Probably not something one person is going to do in any reasonable timeframe but should be doable by a community if people are interested. And of course you get to use all the work laid down by all the server mod authors and you're still mostly using the official client and server and not distributing anything.
Finding someone with deep enough pockets to host the thing (or finding a way for it to pay for itself and not getting sued into oblivion by Mojang) is left as an exercise for the reader.
This is exactly what I was thinking in terms of data traffic topography. Java isn't my main language so I didn't know about the Cassandra project - that looks pretty cool. For extreme bandwidth issues on the server side, traffic from the proxy clients to the server could go through racks of backplane computers that multiplex traffic flow through fiber optic links. I've managed to get consistent throughput of over 1 petabit/s in a previous project.
Extreme data throughput issues aside, a major issue is proxy client to Minecraft client on the consumer computer. The handing off of that communication channel could be handled through a control UDP port that each proxy would handle in turn. Essentially a flow control UDP port would establish the new TCP/UDP port and once that is done would shut itself down. The proxy clients on the server side could also talk to each other to exchange the visual information what the MC character can see, such as mobs and other player activity. Interesting that this might prove to be the bottleneck on a proxy client if too many players are on it. That again could be scaled if necessary.
It's a fun thought project.
Hell you'd get quite a lot further with scalability by just swapping out the dumb-file backend to a JDBC. Minecraft on Oracle, I'm sure there's a market...