When Zynga launches a new game, they can get over 1M new DAILY players on that game within the first week. [1]
For their games, it seems that 7% of daily players are online at any given time. [2]
So within the first week of launch, you have, about 100,000 people playing, simultaneously.
Let's say the client is sending 5 requests per second to the game server. And let's say that this week, all 1000 servers went to the new game.
Now, of course that's just an AVERAGE across the day. In reality, there will be a cresting factor, like any distributed system, and sometimes the load will spike, say, 8x.
Is it ridiculous for a single server to process 500 requests per second on average and 4000 requests per second peak? That seems pretty standard by my book.
[1] http://techcrunch.com/2010/06/14/pincus-frontierville/ [2] http://techcrunch.com/2010/08/17/zynga-launches-first-locali...
PS: The key to pulling this off is running the same simulation on the client using the same random seed. User clicks attack blob with fork. > Client says: attacked blob at (timestamp, with fork) > Server says: blob took X damage at (timestamp) random seed at (value) > Client shows: A long string of actions that adds up to that value and or requests a new game state if something does not add up.
You mean per minute, right? Either that or I'm way worse at SCII than I thought.
My original point was less about the actual numbers, and more about the exercise of estimating server load, instead of just blindly declaring that they must have crappy code.
That being said, launching 1000 nodes for non-batch jobs is still pretty remarkable.
Also keep in mind interactive multiplayer games with persistent state are different beasts compared to usual web applications. Games are very write heavy and do not cache well.
Really this probably means that one week they added 1,000 but the actual average number is much lower.
Makes for a good talking point worded that way!
http://gigaom.com/2010/06/08/how-zynga-survived-farmville/
Zynga uses Apache PHP on the front end, memcached for active user play and MySQL on the back end. It uses memcached to store key value pairs to deal with active user play during sessions and then later writes it to disk.
Or would a node fail rare enough for the data loss to not matter much?