Scaling the Synchronous Web
Meebo: online instant messaging. Scaling challenges: after one year went from 3 users to 65 million (?users or page hits, unclear) daily over course of one year. Has to be snappy, real-time and accurate.
Comet protocol: overlay handshake over http. Can only have two XHR connections open at once.
Site is one page only, typical user session is two hours. Have to be very careful about page errors.
Approaches to scaling problems: simpler is better, know your bottlenecks, quick fix or home run, use better abstractions.
Keeping simple: released on day 1 with very few features. Added features in response to user feedback. build quickly and inexpensively as possible. Keep your worry list small: only solve the problems you actually have. Save time for other ideas in case this doesn't work out. Used one gaim process for each user (simpler). Makes problem identification easier.
Cowboy scaling: shoot from the hip. Better: make smallest possible change that has the biggest effect. Use as data/tools driven approach as possible.
Know your bottlenecks - monitoring good, but don't overdo
quick fix or homerun? need some quick fixes to buy time (e.g.
kill -9 pid). Add more boxes. Look at risk/reward ratio. Need either a quick fix, or a complete solution that has a big impact. Avoid anything in the middle. Move from apache to lighttpd gave a 3x improvement = quick fix. Homerun was to remove the CGI and build a server plugin module (mod_beebo).
Refactored core architecture when iPhone launched. Added new abstractions. This enabled new products, e.g. FireFox extension.
200 million messages per day. 54K kiss emoticons per day. 35 million unique views per month.