News for hackers. Stuff that matters.
Re:A Detailed Five Step Twitter Scaling Plan by Retric on Wednesday May 21, 2008 @11:59AM (#196143)
How about:

1) It's not just a DB problem.

Re:A Detailed Five Step Twitter Scaling Plan by antidaily on Wednesday May 21, 2008 @12:07PM (#196155)
exactly.
Re:A Detailed Five Step Twitter Scaling Plan by hank777 on Wednesday May 21, 2008 @12:44PM (#196193)
Uh... yes it is. All scaling problems are database problems. ALL of them. They can be solved by different strategies such as caching, distributed design, etc. But at the end of the day the problem is always that you cant get to the data fast enough. That is a database problem.
Re:A Detailed Five Step Twitter Scaling Plan by ericb on Wednesday May 21, 2008 @01:09PM (#196237)
Most scaling problems are database problems. Not all.

For example, I load tested my last rails app (load testing is my background-I have consulted for major pharma, tax, and other companies) and on a wimpy inherited server, processor maxed out first for the rails processes. I popped in a second CPU, then was able to get to the point where we could support 200 concurrent users, which was all we needed at the time.

I have seen limitations on bandwidth, firewall problems, load balancer misconfiguration, poorly written queries, memory usage,processor usage, thread deadlocks, and licensing limits (max database connections on a trial license) all be bottlenecks. At the larger scale, yes, database is more often the problem, but it's not clear twitter should be using a database in the way they are, anyway. Your statement goes too far.

Re:A Detailed Five Step Twitter Scaling Plan by hank777 on Wednesday May 21, 2008 @02:13PM (#196348)
Yeah, certainly at the small scale there can be a myriad of reasons why a system doesn't perform. At a large scale its hard to imagine real world scenarios where storage has not been the bottleneck. Regarding whether twitter should be using a database, unless they dont want to store there data they need a "database". Does that mean sql? No. It just means storage. As paul Graham has demonstrated a file system can be a great database. But it still a database.
Re:A Detailed Five Step Twitter Scaling Plan by Retric on Thursday May 22, 2008 @02:07PM (#197365)
Think about a MMO with 100 users in 1 room, the number of relationstips in that room is (n-1)^2. Add 100 more users walking around and you now need to send 4x as many location updates. You will quickly run out of bandwidth long before storing that much information is a problem.

Now consider a voting system you have 1,000 items and 1,000 users and you want to show how much people like them like each item? How well does that work when there are 100,000 users and 100,000 items?

Re:A Detailed Five Step Twitter Scaling Plan by sanswork on Wednesday May 21, 2008 @01:01PM (#196226)
Unless it's a problem with a bad algorithm slowing down the processing of the data.

So not all scaling problems are database problems.

Re:A Detailed Five Step Twitter Scaling Plan by edw519 on Wednesday May 21, 2008 @01:02PM (#196228)
"All scaling problems are database problems."

This is an argument in semantics.

You suggest storing all users physical addresses in memory across multiple machines. You also advocate "shard splitting" a la B-tree indexes which split when the node's population reaches 2n. OK, so when a split occurs, how do you maintain that massive table in memory. Do you lock it? Do you examine your existing queue of requests (which may soon point to the wrong node)? How do you handle new queue requests during "shard split maintenance"?

Calling these "database problems" is waving your hands. Why not just call them "computer problems"?

Re:A Detailed Five Step Twitter Scaling Plan by hank777 on Wednesday May 21, 2008 @01:13PM (#196242)
Well ok. I dont have to call them database problems, but I object to someone saying they are not database problems. I agree it is a bit of semantics and I would not have brought it up if he hadnt. Although I have to say I consider this work (and the good questions you ask) to be in the database domain.

Regarding when shard split how you maintain the table, the easy answer is Terracotta. It is amazing for this and handles all that kind of stuff totally in the background. If you didnt have terracotta it would be a harder problem indeed. It handles locking and all of that magic for you. I highly recommend it. Regarding how you handle queue requests while the split is going on, what happens is that while the split is happening, the original shard continues to respond, but all new updates are sent to the old shard and the new one that is being created in the split, so during a split there is addition messaging going on. Once its done, the original shards range of users is cut back, but actually it is still storing all the old data. At that point you can delete the data that has been moved to the new shard - though this is not necessary.

Re:A Detailed Five Step Twitter Scaling Plan by edw519 on Wednesday May 21, 2008 @01:17PM (#196258)
"and all of that magic"

Right. Just because we didn't write it doesn't mean it's magic.

There is still a lot of work to be done. It can get very complicated for high velocity apps. And it takes time.

So you're right. Bigger minds than the two of us are probably struggling with this (and lots of other stuff) as we write.

Re:A Detailed Five Step Twitter Scaling Plan by hank777 on Wednesday May 21, 2008 @01:25PM (#196269)
I dont understand. I am saying that Terracotta, which is an open source product, handles the in memory table and synching stuff I was talking about and that you asked about. Its like you dont have to write a C compiler and you dont need to write linux because someone has done the heavy lifting for us. So as far as that specific issue my point was just that the solution is available in an excellent well tested product that lots of folks are using. By the way, I am actually working on exactly these sets of issues -- not to say there are not bigger minds than mine working on high velocity apps, but it is what I spend most of my time on.
Re:A Detailed Five Step Twitter Scaling Plan by Retric on Thursday May 22, 2008 @09:41AM (#197110)
When you talk about such an app it's a good idea to have some basic numbers in mind like .5 second average time to respond to an incoming message and 5seconds worst case. (Picked from thin air but I tend to stick with 1x average 3-10x worst case.)

Now as you scale to 50 or so servers they will start to fail with some regularity and you can't reboot and or rebuild in five seconds so we need to have redundant systems ready. Splitting a shard probably takes longer than five seconds so you need to be proactive about such things. So we need an active rebalancing between shard so they can quickly pass around their load and fast failover incase things fail. These are DB problems but they are only problems because they system need to keep responding quickly as parts of the DB fail.

But this is still DB centric how do you load balance incoming and outgoing requests? (Routing each existing user to the same system every time and letting each system lock data when they want to change their password etc.) How do we recover from data corruption? How do we notice an outgoing or incoming mail server is down? You also have n^2 number of connections between systems as you grow can we keep that many sockets open? (More of an issue is we are segregating the network.) Etc.

PS: These are not hard problems by themselves but they are linked. And there are a lot more where they came from.

Re:A Detailed Five Step Twitter Scaling Plan by nostrademons on Wednesday May 21, 2008 @12:59PM (#196223)
Including systems that don't use databases, or are you defining a database loosely as "anything that stores data"?
Re:A Detailed Five Step Twitter Scaling Plan by hank777 on Wednesday May 21, 2008 @01:06PM (#196234)
Yes, I am defining database as "anything that stores data" It does not have to be SQL for me to consider it a database problem. And in fact my solution is well above the sql level.
Re:A Detailed Five Step Twitter Scaling Plan by Excedrin on Wednesday May 21, 2008 @10:58PM (#196827)
Did you mean 100M users per box?