Handling over 300 million events per day, in real time, on a budget
playtomic.com
playtomic.com
http://plentyoffish.wordpress.com/2006/06/10/microsoft-aspne...
You never really hear stories about how to make it scale because so long as you don't go out of your way to shoot yourself in the foot, it just sorta scales on its own without you thinking about it. Every piece of the stack is crazy fast, and they're all built by one organization to work together.
In that light, it's not all that surprising that it works so well. You see a lot of bias against MS in tech circles, but this is one thing that they're actually pretty good at.
I'll have to go through your article with a fine toothed comb - but that's really quite a feat.
It's not really fair to say 'I' anymore as we ramp things up on the business side of it and formalize everything.
I use MongoDB for a few components - user-created levels and leaderboards are the biggest parts. The big advantage is I can let developers attach custom data to scores/levels without having to even think about it - it slides right in just like any other property, and it's just effortless. The other big advantage is price - they're a lot cheaper than getting another server.
The leaderboards is the biggest one running at a total of almost 10 gigabytes because of the indexing.
I use MongoHQ because there's a learning curve with MongoDB that I never have time to explore properly, originally I ran it myself and even got it sharded and replicated, but when it falls over (and it did) you really need to know a lot more than I do about it. Those guys are awesome and I plan on building more on their service.
I use the Samus C# library for it, I noticed recently there's an official one now but it didn't exist when I started using it. One of these days I will upgrade to that.
Here's the leaderboard database stats. Mostly it's just lots of reads, and only if whichever server doesn't have the requested data in-memory already.
btree accesses 0.47 /sec
btree miss ratio 0.2%
global lock ratio 0.1%
indexes 8
objects 24,222,154
op deletes 0.00 /sec
op get mores 0.73 /sec
op inserts 0.57 /sec
op queries 4.02 /sec
op updates 0.02 /sec
all ops 0.02 /sec
size of data 3.3 GB
size of index 6 GB
size of storage 3.7 GB
uptime 4 days
connections 128