In Java Posse episode #188, the Posse basically retreated from an
earlier report regarding Twitter service outages and scaling problems
being due to Ruby on Rails.
In the end this was chalked up to the Internet rumour mill. Evidently
the Twitter PR machine is trying to circulate the notion that Ruby on
Rails doesn't really play a substantial role in their data centre
architecture and all this was overblown and insubstantial.
Well, I suspect this is just the typical corporate attempt to manage
bad news and keep investors calm about technical competence matters in
respect to the Twitter technical management. (Talk about a social
network that has slim opportunity to monetize its user base -
regardless of the site's popularity. No doubt Twitter has a very
delicate dance with investors.)
Now consider recent Internet headlines in juxtaposition to this
interview from about a year ago (where I've excerpted one of the
relevant sections in regard to today's events):
5 Question Interview with Twitter Developer Alex Payne
http://www.radicalbehavior.com/5-question-interview-with-twitter-developer-alex-payne/
[Question] How has Ruby on Rails been holding up to the increased
load?
[Alex Payne] By various metrics Twitter is the biggest Rails site on
the net right now. Running on Rails has forced us to deal with scaling
issues - issues that any growing site eventually contends with - far
sooner than I think we would on another framework.
The common wisdom in the Rails community at this time is that scaling
Rails is a matter of cost: just throw more CPUs at it. The problem is
that more instances of Rails (running as part of a Mongrel cluster, in
our case) means more requests to your database. At this point in time
there’s no facility in Rails to talk to more than one database at a
time. The solutions to this are caching the hell out of everything and
setting up multiple read-only slave databases, neither of which are
quick fixes to implement. So it’s not just cost, it’s time, and time
is that much more precious when people can['t] reach your site.
None of these scaling approaches are as fun and easy as developing for
Rails. All the convenience methods and syntactical sugar that makes
Rails such a pleasure for coders ends up being absolutely punishing,
performance-wise. Once you hit a certain threshold of traffic, either
you need to strip out all the costly neat stuff that Rails does for
you (RJS, ActiveRecord, ActiveSupport, etc.) or move the slow parts of
your application out of Rails, or both.
It’s also worth mentioning that there shouldn’t be doubt in anybody’s
mind at this point that Ruby itself is slow. It’s great that people
are hard at work on faster implementations of the language, but right
now, it’s tough. If you’re looking to deploy a big web application and
you’re language-agnostic, realize that the same operation in Ruby will
take less time in Python. All of us working on Twitter are big Ruby
fans, but I think it’s worth being frank that this isn’t one of those
relativistic language issues. Ruby is slow.