IMO: They are dealing with a tiny amount of bandwidth say there are 30million 1kb text messages a day that's 900 gb / month which is well easy for a single core CPU to handle.
Personally I would go with:
User Adam sends message to Bob:
1) Adam sends message to Twitter service. "Bob>Hi."
2) Twitter check to see if Bob knows Adam.
3) Twitter sends "Adam>Hi." to Bob.
(With optimal storage so Bob and Adam can see their old conversations)
Your system let's random spammers people find out people's address which IMO is bad.
PS: Or Adam could send a message to "All>I like this soup." and Twitter then sends the message to everyone that cares about Adam including Bob.
Edit: It looks like Twitter is sending around 2million Tweets a day.
You're thinking too qualitatively; imagine the spikes they get... Also most apps are I/O restricted, not CPU...
Also, all these proposed messaging architectures are somewhat flawed. Twitter isn't really "sending" messages to other people. It's more like a person's message history is bound to their account, and appropriate privileges are applied. Then, when people try to "read," privileges are obeyed and information is produced...
Am I the only one who believes the solution to Twitter does not involve a massive distributed system? Twitter is inherently centralized... people don't see that.
Ok I can't edit the old post but they are basically just reinventing mailing lists. Anyway, poling is fine if it's initiated by a user action or it's a vary limited number of systems but if you have a few million users you can't uses it per user. As to reading old log's that's a trivially parallizable problem see database replication for some hints. So you separate the active messaging that automatically adds new Tweets to a user’s cell phone from the way users read old messages with the webpage and your home free.
PS: Text is cheep EX: Slashdot is running off of ~4 computers. And bandwidth is not a scaling issue until you need a single system to handle more than ~1GB of bandwidth per second. (Saturating an OC-3 line costs a lot of money but you don't need to change your architecture to do so.)
Personally I would go with:
User Adam sends message to Bob: 1) Adam sends message to Twitter service. "Bob>Hi." 2) Twitter check to see if Bob knows Adam. 3) Twitter sends "Adam>Hi." to Bob.
(With optimal storage so Bob and Adam can see their old conversations)
Your system let's random spammers people find out people's address which IMO is bad.
PS: Or Adam could send a message to "All>I like this soup." and Twitter then sends the message to everyone that cares about Adam including Bob.
Edit: It looks like Twitter is sending around 2million Tweets a day.