<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-1257969457375562525.post4486507308059831559..comments</id><updated>2009-10-08T08:36:06.402-07:00</updated><category term='rubyconf'/><category term='ruby'/><category term='reia peg'/><category term='speed'/><category term='scala'/><category term='birthday'/><category term='clojure'/><category term='erlang'/><category term='ubuntu linux jackalope'/><category term='revactor'/><category term='eventmachine'/><category term='smalltalk'/><category term='perl'/><category term='peridot'/><category term='oop'/><category term='youtube'/><category term='parsing'/><category term='software transactional memory'/><category term='reia'/><category term='rock band'/><category term='jvm'/><category term='concurrency'/><category term='distributed computing'/><category term='state'/><category term='electronics'/><category term='scroobius pip'/><category term='object oriented programming'/><category term='destructive assignment'/><category term='rihanna'/><category term='beatles'/><category term='rev'/><category term='python'/><category term='new media'/><category term='actor model'/><category term='viacom'/><category term='unix'/><category term='identity'/><category term='twitter'/><category term='celluloid'/><category term='erlang factory'/><category term='indentation'/><category term='fair use'/><category term='async'/><category term='repetitive generic music'/><category term='json'/><category term='hipe'/><title type='text'>Comments on Unlimited Novelty: Twitter: blaming Ruby for their mistakes?</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.unlimitednovelty.com/feeds/4486507308059831559/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default?start-index=26&amp;max-results=25'/><author><name>Tony</name><uri>http://www.blogger.com/profile/05698660503129206682</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-3331800412480670951</id><published>2009-10-08T08:36:06.402-07:00</published><updated>2009-10-08T08:36:06.402-07:00</updated><title type='text'>It&amp;#39;s a fact that RoR/Ruby is slower than Scala...</title><content type='html'>It&amp;#39;s a fact that RoR/Ruby is slower than Scala, why kill the messenger for the message? It&amp;#39;s pretty humorous how all the RoR hypesters are now jumping off a sinking ship.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/3331800412480670951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/3331800412480670951'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1255016166402#c3331800412480670951' title=''/><author><name>asanjuan</name><uri>http://www.blogger.com/profile/00166967036527365335</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1554573038'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-8111382534840122698</id><published>2009-06-11T11:54:02.493-07:00</published><updated>2009-06-11T11:54:02.493-07:00</updated><title type='text'>FWIW, I&amp;#39;d like to know how ActiveMQ did not me...</title><content type='html'>FWIW, I&amp;#39;d like to know how ActiveMQ did not meet the needs of Twitter so that we can use that information to improve ActiveMQ. There has been no discussion of configurations or topologies or use cases so I&amp;#39;m not even sure where to begin. &lt;br /&gt;&lt;br /&gt;FYI, ActiveMQ was born out of the Apache Geronimo project but actually began life at the Codehaus. The first releases of ActiveMQ began appearing back around 2003 or 2004. It was only later in 2005 that we moved it to the Apache Software Foundation. &lt;br /&gt;&lt;br /&gt;There are some comments about RabbitMQ from Alexis regarding the page-to-disk feature so I can address that. ActiveMQ already has this feature so that messages (and even references) are not held in memory (see message cursors here: http://bit.ly/10u5WJ). &lt;br /&gt;&lt;br /&gt;The additional comments from Alexis are exactly correct. Building a messaging system that will suit any use case, running on any number of systems, using any topology with all the necessary features is a difficult task and certainly takes time to perfect. &lt;br /&gt;&lt;br /&gt;There was also a comment from Alex Payne that experts were contacted. Was anyone from the ActiveMQ community contacted? &lt;br /&gt;&lt;br /&gt;Since the research has already been done, please let us know why ActiveMQ did not work for Twitter so that we can improve it.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/8111382534840122698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/8111382534840122698'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1244746442493#c8111382534840122698' title=''/><author><name>Bruce Snyder</name><uri>http://www.blogger.com/profile/18285794923769241032</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_pSHP7VYSIjE/Sb_xGZgdvaI/AAAAAAAAAPE/oKnZrAskhVc/S220/Photo+29.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1096147772'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-8192260598314822401</id><published>2009-06-10T10:57:35.867-07:00</published><updated>2009-06-10T10:57:35.867-07:00</updated><title type='text'>Apache ActiveMQ is highly configurable - you can a...</title><content type='html'>Apache ActiveMQ is highly configurable - you can always make it scale or perform better - depending on your use case: see &lt;a href="http://rajdavies.blogspot.com/2009/05/scaling-activemq.html" rel="nofollow"&gt;Scaling ActiveMQ&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/8192260598314822401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/8192260598314822401'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1244656655867#c8192260598314822401' title=''/><author><name>Rob Davies</name><uri>http://www.blogger.com/profile/08525735841110843594</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://3.bp.blogspot.com/_qoa-TGOf1Jw/Shw9578VBAI/AAAAAAAAAHo/uwdAOu2diVM/S220/me.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1976278399'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-1447683861996701283</id><published>2009-05-01T05:12:00.000-07:00</published><updated>2009-05-01T05:12:00.000-07:00</updated><title type='text'>So Twitter is awesome for Taking traffic to your w...</title><content type='html'>So Twitter is awesome for Taking traffic to your website . It is very&lt;br /&gt;simple to setup and it's a fun positive way to keep in contact with&lt;br /&gt;people. To get more followers on twitter check out this amazing&lt;br /&gt;tool, &lt;A HREF="http://cb3fa4x6-40len95yhtx4f5211.hop.clickbank.net/" REL="nofollow"&gt;Twitter Traffic Machine&lt;/A&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/1447683861996701283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/1447683861996701283'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1241179920000#c1447683861996701283' title=''/><author><name>Twitter</name><uri>http://www.blogger.com/profile/08390460288154083316</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-265735105'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-414456388564148545</id><published>2009-04-08T09:32:00.000-07:00</published><updated>2009-04-08T09:32:00.000-07:00</updated><title type='text'>"Any messaging server where IO doesn't dominate to...</title><content type='html'>"Any messaging server where IO doesn't dominate to the point where language choice is irrelevant is badly written." -- Vidar&lt;BR/&gt;&lt;BR/&gt;"For every complex problem there is an answer that is clear, simple, and wrong." -- H. L. Mencken &lt;BR/&gt;&lt;BR/&gt;:)&lt;BR/&gt;&lt;BR/&gt;But seriously, building a scalable architecture for something as complex as a messaging server involves more than just "throwing cores at it until it's I/O bound". :) The &lt;B&gt;&lt;I&gt;optimum&lt;/I&gt;&lt;/B&gt; case, which you will never achieve except "on the average", is for the processor and I/O utilizations to be approximately equal and for the number of "users" to be at a point known in queuing theory as "N*" &lt;BR/&gt;&lt;BR/&gt;This is called "asymptotic bounds analysis" (ABA) and can be found in lots of places, but a good start is&lt;BR/&gt;&lt;BR/&gt;http://www.cs.washington.edu/homes/lazowska/qsp/Images/Chap_05.pdf&lt;BR/&gt;&lt;BR/&gt;HTH :)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/414456388564148545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/414456388564148545'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239208320000#c414456388564148545' title=''/><author><name>Ed Borasky</name><uri>http://www.blogger.com/profile/03981870936822944690</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='24' src='http://s3.amazonaws.com/twitter_production/profile_images/22150932/LordOfTheFiles_mini.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-272355340'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-2229805512178442005</id><published>2009-04-08T09:19:00.000-07:00</published><updated>2009-04-08T09:19:00.000-07:00</updated><title type='text'>Any messaging server where IO doesn't dominate to ...</title><content type='html'>Any messaging server where IO doesn't dominate to the point where language choice is irrelevant is badly written. &lt;BR/&gt;&lt;BR/&gt;Writing one in Ruby is fairly simple. I wrote a Ruby Stomp server for inhouse use years ago, and it was trivial to optimize it to the point where the time spent in my Ruby code was less than 10% of the total time spent - the rest of the time was spent in the kernel handling IO syscalls.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/2229805512178442005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/2229805512178442005'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239207540000#c2229805512178442005' title=''/><author><name>Vidar</name><uri>http://www.blogger.com/profile/09746826896286930650</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-998445615'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-3926372889286787466</id><published>2009-04-08T07:59:00.000-07:00</published><updated>2009-04-08T07:59:00.000-07:00</updated><title type='text'>Very interesting conversation.  I work on ActiveMe...</title><content type='html'>Very interesting conversation.  I work on ActiveMessaging, and have used most of the brokers mentioned above.  &lt;BR/&gt;&lt;BR/&gt;I'll throw out one more - there is the reliable messaging gem that is lovely for development - persists to disk, very lightweight, and trivial to install and use.  I don't think I would begin to recommend for high demand production, as I haven't tested it for such, but for smaller projects and development, I am a big fan.&lt;BR/&gt;&lt;BR/&gt;I know from several other large applications that ActiveMQ is troubled at load, and am not surprised it fell over.&lt;BR/&gt;&lt;BR/&gt;Stomp is not a perfect protocol, such as lacking a good way to rollback message receipt, but there are more than a few impls out there in python, ruby, and java via rabbit and activemq.  I always found it disappointing that twitter didn't use the protocol if not the impls out there, as it seems a good fit (short text messages are stomp's bread and butter).&lt;BR/&gt;&lt;BR/&gt;I do understand that twitter is a messaging app at core, so it makes sense to invest in building something, I only wish that they had adopted a messaging spec/protocol such as amqp or stomp for their impl.  &lt;BR/&gt;&lt;BR/&gt;Personally, I have high hopes for RabbitMQ/amqp, and that is the next broker/protocol I'll be integrating with ActiveMessaging.&lt;BR/&gt;&lt;BR/&gt;-Andrew Kuklewicz</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/3926372889286787466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/3926372889286787466'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239202740000#c3926372889286787466' title=''/><author><name>kookster</name><uri>http://www.blogger.com/profile/02981489803973809446</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-226326299'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-492416956287095767</id><published>2009-04-08T06:03:00.000-07:00</published><updated>2009-04-08T06:03:00.000-07:00</updated><title type='text'>why would twitter want to redistribute Berkeley DB...</title><content type='html'>why would twitter want to redistribute Berkeley DB itself?&lt;BR/&gt;&lt;BR/&gt;It's perfectly legal to distribute source code that links against it, and even that doesn't seem to be a real concern for an internal product.&lt;BR/&gt;&lt;BR/&gt;The claim that BDB costs money does not really apply in this situation unless they want to sell a product that is prebuilt with it, the way I understand the licensing issues anwyay.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/492416956287095767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/492416956287095767'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239195780000#c492416956287095767' title=''/><author><name>nothingmuch</name><uri>http://www.blogger.com/profile/03975438115490089158</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1254764397'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-5528896723094557183</id><published>2009-04-08T05:58:00.000-07:00</published><updated>2009-04-08T05:58:00.000-07:00</updated><title type='text'></title><content type='html'>This comment has been removed by the author.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/5528896723094557183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/5528896723094557183'/><author><name>nothingmuch</name><uri>http://www.blogger.com/profile/03975438115490089158</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.contentRemoved' value='true'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1254764397'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-3819318723241402173</id><published>2009-04-07T09:29:00.000-07:00</published><updated>2009-04-07T09:29:00.000-07:00</updated><title type='text'>Twitter is a successful company, therefore, whatev...</title><content type='html'>Twitter is a successful company, therefore, whatever it does, must be 'correct'. If your company is successful then whatever it does is 'correct' even if it is completely different from Twitter.&lt;BR/&gt;No tongue in cheek intended. Going toward Scala must be a good thing, otherwise they wouldn't do it.&lt;BR/&gt;Results are everything.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/3819318723241402173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/3819318723241402173'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239121740000#c3819318723241402173' title=''/><author><name>ted</name><uri>http://www.blogger.com/profile/00519834569476230303</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-2066433678'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-5681061838154873012</id><published>2009-04-06T20:24:00.000-07:00</published><updated>2009-04-06T20:24:00.000-07:00</updated><title type='text'>One thing I really feel I should say:&lt;br&gt;&lt;br&gt;For t...</title><content type='html'>One thing I really feel I should say:&lt;BR/&gt;&lt;BR/&gt;For the purposes of my job, we do not need a stateful message queue.  We run an automation system which keeps all state in a database.  Most of our system is effectively stateless, including our message queues.  If our message queues crash, our system recovers from the state in the database.&lt;BR/&gt;&lt;BR/&gt;Twitter, who is running a messaging system, apparently needs to persist state across their entire system.  I don't know if the system could be architected in a more stateless manner, but I'll give them the benefit of the doubt and assume they have tried to make their system less stateful.  This means all their queues need to be disk logged.  The performance tests we performed which I anecdotally cited did not ever use a disk logged message queue intentionally, but in the case of Starling we were as this appears to be the only option Starling provides.&lt;BR/&gt;&lt;BR/&gt;I'm afraid this is an apples-to-oranges comparison and I may be unduly sullying Starling.&lt;BR/&gt;&lt;BR/&gt;That said we were testing a persistent configuration of Ruby Stompserver, which despite being written in Ruby was able to outperform Starling (at the level of ~100 readers/writers)&lt;BR/&gt;&lt;BR/&gt;In Twitter's case it sounds as if they were running a rather large "flock of Starlings" to handle the load.  This works, but in our system we run one queue per server.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/5681061838154873012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/5681061838154873012'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239074640000#c5681061838154873012' title=''/><author><name>Tony</name><uri>http://www.blogger.com/profile/05698660503129206682</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-443037518'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-6952108877978734952</id><published>2009-04-06T19:44:00.000-07:00</published><updated>2009-04-06T19:44:00.000-07:00</updated><title type='text'>nothingmuch said...&lt;br&gt;"I don't want to pay for Or...</title><content type='html'>nothingmuch said...&lt;BR/&gt;"I don't want to pay for Oracle BerkeleyDB either, that's why I use it without giving them money. It is opensource, you know =P"&lt;BR/&gt;&lt;BR/&gt;It's under a copyleft license which prevents its redistribution along with your software unless you distributed your source or pay them a (very large last time I heard) fee.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/6952108877978734952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/6952108877978734952'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239072240000#c6952108877978734952' title=''/><author><name>Ryan</name><uri>http://www.blogger.com/profile/01610834298928635488</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-403219083'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-7777692406659774040</id><published>2009-04-06T16:36:00.000-07:00</published><updated>2009-04-06T16:36:00.000-07:00</updated><title type='text'>I don't want to pay for Oracle BerkeleyDB either, ...</title><content type='html'>I don't want to pay for Oracle BerkeleyDB either, that's why I use it without giving them money. It is opensource, you know =P</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/7777692406659774040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/7777692406659774040'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239060960000#c7777692406659774040' title=''/><author><name>nothingmuch</name><uri>http://www.blogger.com/profile/03975438115490089158</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1254764397'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-3147913294755103654</id><published>2009-04-06T15:53:00.000-07:00</published><updated>2009-04-06T15:53:00.000-07:00</updated><title type='text'>"EventMachine didn't exist or were so immature tha...</title><content type='html'>"EventMachine didn't exist or were so immature that they were  essentially useless."&lt;BR/&gt;&lt;BR/&gt;That is most certainly not the case.  I've been using EventMachine since 2006, and while I am not a fan of the API (hence writing Rev), it was most certainly stable and mature back then.&lt;BR/&gt;&lt;BR/&gt;The EventMachine-based Ruby StompServer was released in late 2006 and outperforms (non-Evented) Starling.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/3147913294755103654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/3147913294755103654'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239058380000#c3147913294755103654' title=''/><author><name>Tony</name><uri>http://www.blogger.com/profile/05698660503129206682</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-443037518'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-6049392438325547103</id><published>2009-04-06T11:35:00.000-07:00</published><updated>2009-04-06T11:35:00.000-07:00</updated><title type='text'>Tony: as the guy who wrote Starling, I'll be nice ...</title><content type='html'>Tony: as the guy who wrote Starling, I'll be nice and simply say that you haven't done your research. Your Picard there is hitting his head over the stupidity of the internal combustion engine.&lt;BR/&gt;&lt;BR/&gt;Starling was written over two years ago (it took a long time to release). It was written in about a day and a half. At the time, no memcache-based queue servers existed, RabbitMQ required knowledge of erlang, and rev and EventMachine didn't exist or were so immature that they were essentially useless. ActiveMQ didn't have Ruby client libraries, and Spread, well. Anyhow.&lt;BR/&gt;&lt;BR/&gt;If you do the math, for the number of queue operations Twitter was doing *two years ago*, Starling is plenty fast enough, because each queue action took several orders of magnitude longer than the queuing / de-queueing itself.&lt;BR/&gt;&lt;BR/&gt;Moreover, you might try turning off the fsync() that is present in the default Starling distribution, which makes it easily four times slower than normal operation. And then you might compare apples to apples, and ensure that your queues are doing the same thing.&lt;BR/&gt;&lt;BR/&gt;And to top it all off, in the README for Starling I wrote:&lt;BR/&gt;&lt;BR/&gt;"Starling is "slow" as far as messaging systems are concerned. In practice, it's fast enough."&lt;BR/&gt;&lt;BR/&gt;It was a case of worse-is-better, and frankly, its existence has been an important part of discussions around message queue design from a usability standpoint. Prior to Starling, queuing was HARD for small organizations, and the agenda was set by JMS and "the enterprise" - oh, there's Picard again.&lt;BR/&gt;&lt;BR/&gt;I'm not going to defend Starling as a great example of high performance and resilient message queue or networking software design, and I tend to recommend RabbitMQ or Kestrel to people looking for a simple queue.&lt;BR/&gt;&lt;BR/&gt;In the future, as Alex suggests, please feel free to email developers of software before making many unsubstantiated and incorrect claims. My email address is and has always been in the Starling source code.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/6049392438325547103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/6049392438325547103'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239042900000#c6049392438325547103' title=''/><author><name>Blaine</name><uri>http://www.blogger.com/profile/12260514541117400711</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1257523730'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-2209983955578138612</id><published>2009-04-06T09:56:00.000-07:00</published><updated>2009-04-06T09:56:00.000-07:00</updated><title type='text'>Bob: part of research, for us, was considering cos...</title><content type='html'>Bob: part of research, for us, was considering cost and integration time. See Nick's comments above for why Kestrel ended up being much easier to test than other complete-rewrite solutions. We did appreciate your suggestion.&lt;BR/&gt;&lt;BR/&gt;Glenn: if you search around for what people make on technical books, you'll see that I don't have much to gain from book sales. I'm putting a lot more time into my half of the book than I'll ever make back. But it's well worth it for what I'm learning in the process.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/2209983955578138612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/2209983955578138612'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239036960000#c2209983955578138612' title=''/><author><name>Alex Payne</name><uri>http://www.blogger.com/profile/04911568994014997196</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp3.blogger.com/_anXNeL7R9SI/R2mHhSc3agI/AAAAAAAAAEI/E89__HTEVsE/S220/al3x.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1247594245'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-744708569521968359</id><published>2009-04-06T09:14:00.000-07:00</published><updated>2009-04-06T09:14:00.000-07:00</updated><title type='text'>"Glenn" has to muddy the waters with his statement...</title><content type='html'>"Glenn" has to muddy the waters with his statement about the twitter folks not being all that honest since one of them is writing a scala book.&lt;BR/&gt;&lt;BR/&gt;Give me a break dude, and go off with your tabloid comments elsewhere. Just when folks start to have a reasonable discussion ... &lt;BR/&gt;&lt;BR/&gt;-jpb</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/744708569521968359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/744708569521968359'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239034440000#c744708569521968359' title=''/><author><name>johny boyd</name><uri>http://www.blogger.com/profile/18330891878540954000</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1862755499'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-4325706065334139312</id><published>2009-04-06T08:03:00.000-07:00</published><updated>2009-04-06T08:03:00.000-07:00</updated><title type='text'>Maybe I am cynical, but In the interest of transpa...</title><content type='html'>Maybe I am cynical, but In the interest of transparency please also note that Alex may also be pimping his own book about Scala which *may* in part help us understand why he is being more vocal in re-opening the debate on 'Ruby v. Scala'.&lt;BR/&gt;&lt;BR/&gt;I am not in any way saying his arguments and experiences are not well thought out (any programmer worth his salt knows there is no silver bullet language), and I won't take a position on Ruby vs. Scala since I have only used one of them.  &lt;BR/&gt;&lt;BR/&gt;He does though in fact appear to have a vested interest in this language based religious war (above and beyond his Twitter affiliation) which has proven over several years to provide excellent link-bait...&lt;BR/&gt;&lt;BR/&gt;http://oreilly.com/catalog/9780596157746/&lt;BR/&gt;&lt;BR/&gt;I'm just saying...</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/4325706065334139312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/4325706065334139312'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239030180000#c4325706065334139312' title=''/><author><name>Glenn Rempe</name><uri>http://www.blogger.com/profile/07790608533350362444</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1475862180'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-243127043268194602</id><published>2009-04-06T07:25:00.000-07:00</published><updated>2009-04-06T07:25:00.000-07:00</updated><title type='text'>@alex&amp;gt; I research open source and commercial so...</title><content type='html'>@alex&amp;gt; I research open source and commercial solutions before cutting a new path.&lt;BR/&gt;&lt;BR/&gt;I recommended 1.5 million message/second Tervela box through numerous channels, and I don&amp;#39;t have any evidence that it was ever considered. &lt;BR/&gt;&lt;BR/&gt;http://www.tervela.com/tmx</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/243127043268194602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/243127043268194602'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239027900000#c243127043268194602' title=''/><author><name>bob pasker</name><uri>http://www.blogger.com/profile/11481246333051909304</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-2037220215'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-5467137973540063152</id><published>2009-04-06T06:45:00.000-07:00</published><updated>2009-04-06T06:45:00.000-07:00</updated><title type='text'>Looks like the folks over at SecondLife did an eva...</title><content type='html'>Looks like the folks over at SecondLife did an evaluation of several message queues and posted their results. Check it out here:&lt;BR/&gt;&lt;BR/&gt;http://tinyurl.com/c8x6z5</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/5467137973540063152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/5467137973540063152'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1239025500000#c5467137973540063152' title=''/><author><name>cremes</name><uri>http://www.blogger.com/profile/13408444777985904028</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1718879270'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-5705232150439487357</id><published>2009-04-05T20:53:00.000-07:00</published><updated>2009-04-05T20:53:00.000-07:00</updated><title type='text'>Hello, Alexis here from the RabbitMQ team.  I am t...</title><content type='html'>Hello, Alexis here from the RabbitMQ team.  I am the guy who visited the Twitter offices, that al3x mentioned in his comment above.&lt;BR/&gt;&lt;BR/&gt;First off I would like to second the statement made by some of the Twitter guys above that they do not have an 'NIH' mindset.  While some individuals in their team like to code new stuff, which can become a form of NIH, it is true that *as a team* they approach problems systematically.&lt;BR/&gt;&lt;BR/&gt;Secondly, I know something about what the Twitter team do with messaging, and what they don't use messaging for.  And I have just read a large number of blog posts and comments about Scala, messaging, Twitter (and Alex's book!). People are making massive assumptions about how Twitter do and don't use messaging.  Most of these assumptions are completely wrong.  Give these guys a break.  They are trying to make improvements in a running system which is scrutinised every minute of every day, for a single sign of failure.  This would drive anyone to drink, madness, or worse yet, functional languages ;-)&lt;BR/&gt;&lt;BR/&gt;The choice of language is secondary to the design of any messaging system.  RabbitMQ is written in erlang/OTP which like Scala can use a share-nothing model.  But this is no guarantee that your messaging system will work well in every possible scenario that any customer could ever use.  This is why writing good messaging systems is hard, and in the case of RabbitMQ it leads to our being careful to add major features slowly, because we don't want the product to be compromised by bad designs that are hard to remove later.  We have to do things this way because we have a lot of (mostly happy) users.&lt;BR/&gt;&lt;BR/&gt;Now, quite a few of those users have asked us to add a feature called 'page to disk'.  We are adding this feature now.  'Page to disk' means that when messages are persistent, they do *not* get held in memory at the same time.  Note that in the current version of RabbitMQ, if a message is persisted, then a copy is held in memory as well.  One of the RabbitMQ team recently blogged about this here: http://www.lshift.net/blog/2009/04/02/cranial-surgery-giving-rabbit-more-memory  (please note that the messages are few but large in order to test the overflow properties of the system)&lt;BR/&gt;&lt;BR/&gt;The scenario in which page-to-disk is needed is as follows:&lt;BR/&gt;&lt;BR/&gt;1. You have relatively slow consumers with durable subscriptions.  E.g. they disappear for days at a time.&lt;BR/&gt;&lt;BR/&gt;2. You have to keep all messages that they have not seen yet and cannot flush them on a timeout basis.&lt;BR/&gt;&lt;BR/&gt;3. You have enough producers and data that this fills up the memory of your broker.&lt;BR/&gt;&lt;BR/&gt;4. You cannot, or don't want to, run the broker on multiple machines, e.g. using RabbitMQ clusters. &lt;BR/&gt;&lt;BR/&gt;Since it is not my place to speak about what Twitter actually does under the hood, I shall leave it to readers to figure out when, if at all, these criteria apply to the several ways that Twitter might or might not use messaging.&lt;BR/&gt;&lt;BR/&gt;It's quite easy to write a messaging system that manages balanced transient flows where ingress and egress are similar.  Writing messaging systems that work under any combination of flows, on any number of machines, and in multiple different reliability scenarios ... is a more interesting problem.  Page-to-disk is a way to make RabbitMQ better and address more scenarios.&lt;BR/&gt;&lt;BR/&gt;If you are reading this and have other ways to improve the broker, please send us information via the mailing list or privately to info at rabbitmq.com, and please be as detailed and concrete as possible.&lt;BR/&gt;&lt;BR/&gt;If you are in SF and want to know more about how you can build a twitter type system using RabbitMQ, we shall be talking about it, a little bit, this Wednesday evening: http://www.bayfp.org/blog/2009/03/25/next-meeting-rabbitmq-wednesday-april-8th-730pm/ (with beers afterwards).  We'll just be talking about *messaging* in various scenarios.&lt;BR/&gt;&lt;BR/&gt;I'd like to finish by asking everyone to check out Harper Reed's most excellent new project: http://www.awesomeupdater.com/&lt;BR/&gt;&lt;BR/&gt;Cheers,&lt;BR/&gt;&lt;BR/&gt;alexis&lt;BR/&gt;&lt;BR/&gt;PS: to one person who shall remain nameless, thanks for a completely fatuous tweet.  I'll buy you a beer next week if you come to the talk on Wednesday :-)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/5705232150439487357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/5705232150439487357'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1238989980000#c5705232150439487357' title=''/><author><name>alexis</name><uri>http://www.blogger.com/profile/12281522589184676541</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1053940848'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-1464086463212267110</id><published>2009-04-05T19:31:00.000-07:00</published><updated>2009-04-05T19:31:00.000-07:00</updated><title type='text'>So what I get from these comments from the Twitter...</title><content type='html'>So what I get from these comments from the Twitter guys is that Starling sucked and was subsequently replaced by a new Scala messaging system.  &lt;BR/&gt;&lt;BR/&gt;In other words Ruby wasn't the problem, it was Starling (Which as the Twitter guys said was a good messaging system when written but just couldn't handle the increased load in the long run).</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/1464086463212267110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/1464086463212267110'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1238985060000#c1464086463212267110' title=''/><author><name>Paul</name><uri>http://www.blogger.com/profile/08551061762442772205</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-98058669'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-1572684226067369881</id><published>2009-04-05T17:40:00.000-07:00</published><updated>2009-04-05T17:40:00.000-07:00</updated><title type='text'>RE: forking or improving an existing open source p...</title><content type='html'>RE: forking or improving an existing open source project and integrating it with your systems...&lt;BR/&gt;&lt;BR/&gt;Asked and answered. Thanks for your transparency.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/1572684226067369881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/1572684226067369881'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1238978400000#c1572684226067369881' title=''/><author><name>cremes</name><uri>http://www.blogger.com/profile/13408444777985904028</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1718879270'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-3450372101668505683</id><published>2009-04-05T17:02:00.000-07:00</published><updated>2009-04-05T17:02:00.000-07:00</updated><title type='text'>Wow, thanks.  That was quite a satisfactory respon...</title><content type='html'>Wow, thanks.  That was quite a satisfactory response.  I'll post a followup blog here in a bit.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/3450372101668505683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/3450372101668505683'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1238976120000#c3450372101668505683' title=''/><author><name>Tony</name><uri>http://www.blogger.com/profile/05698660503129206682</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-443037518'/></entry><entry><id>tag:blogger.com,1999:blog-1257969457375562525.post-1326683907169793949</id><published>2009-04-05T16:54:00.000-07:00</published><updated>2009-04-05T16:54:00.000-07:00</updated><title type='text'>Tony,&lt;br&gt;&lt;br&gt;Hoo boy. First of all, I hope you've ...</title><content type='html'>Tony,&lt;BR/&gt;&lt;BR/&gt;Hoo boy. First of all, I hope you've had a chance to read my general reply to the articles about my Web 2.0 Expo talk [1] and this response to a vocal member of the Ruby community [2]. I sound like a pretty unreasonable guy filtered through the tech press and Reddit comments, but I hope less so in my own words.&lt;BR/&gt;&lt;BR/&gt;Secondly, the quote at the top of your post is from my coworker, Steve Jenson, who's been participating in the discussion on this post.&lt;BR/&gt;&lt;BR/&gt;On JRuby: as Steve said, we can't actually boot our main Rails app on JRuby. That's a blocker. Incidentally, if you know of anyone who has a large JRuby deployment, we'd be interested in that first-hand experience. If you don't, it might be a little early to say it would solve all our problems.&lt;BR/&gt;&lt;BR/&gt;It's also incorrect to say that the way JRuby and Scala make use of the JVM is exactly the same. Much like our other decisions haven't been arbitrary, our decision to use Scala over other JVM-hosted languages was based on investigation.&lt;BR/&gt;&lt;BR/&gt;On our culture: if you'd like to know about how we write code, or how our code has evolved over time, just ask us. We're all on Twitter, of course, but most of the engineers also have blogs and publish their email addresses. There's no need to speculate. Just ask. There's not a "raging debate" internally because we make our engineering decisions like engineers: we experiment, and base our decisions on the results of those experiments.&lt;BR/&gt;&lt;BR/&gt;It's definitely true that Starling and Evented Starling are relatively immature queuing systems. I was eager to get them out of our stack. So, as Steve said, we put all the MQ's you think we'd try through their paces not too long ago, and we knocked one after another over in straightforward benchmarks. Some, like RabbitMQ, just up and died. Others chugged on, but slowly. Where we ran into issues, we contacted experts and applied best practices, but in the end, we found that Kestrel fit our particular use cases better and more reliably. This was not the hypothesis we had going into those benchmarks, but it's what the data bore out.&lt;BR/&gt;&lt;BR/&gt;We get a lot of speculation to the tune of "why haven't those idiots tried x, it's so obvious!" Generally, we have tried x, as well as y and z. Funnily enough, I was actually pushing to get us on RabbitMQ, but our benchmarks showed that it just wouldn't work for us, which is a shame, because it advertises some sexy features.&lt;BR/&gt;&lt;BR/&gt;Personally, I'm extremely NIH-averse; I research open source and commercial solutions before cutting a new path. In the case of our MQ, one of our engineers actually wrote Kestrel in his free time, so it was bit more like we adopted an existing open source project than rolled our own. Pretty much the last thing we want to be doing is focusing on problems outside our domain. As it so happens, though, moving messages around quickly is our business. I don't think it's crazy-go-nuts that we've spent some time on an MQ.&lt;BR/&gt;&lt;BR/&gt;I hope my colleagues and I have been able to answer some of your questions. As I said, in the future, please consider emailing us so we can share our experience. Then, we can have a public discussion about facts, not speculation. Perhaps, as commenter sethladd suggested, the onus is on us to produce a whitepaper or presentation about our findings so as to stave off such speculation. Time constraints are the main reason why we haven't done so.&lt;BR/&gt;&lt;BR/&gt;[1] http://al3x.net/2009/04/04/reasoned-technical-discussion.html&lt;BR/&gt;[2] http://blog.obiefernandez.com/content/2009/04/my-reasoned-response-about-scala-at-twitter.html#IDComment18212539</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/1326683907169793949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1257969457375562525/4486507308059831559/comments/default/1326683907169793949'/><link rel='alternate' type='text/html' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html?showComment=1238975640000#c1326683907169793949' title=''/><author><name>Alex Payne</name><uri>http://www.blogger.com/profile/04911568994014997196</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp3.blogger.com/_anXNeL7R9SI/R2mHhSc3agI/AAAAAAAAAEI/E89__HTEVsE/S220/al3x.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-for-their-mistakes.html' ref='tag:blogger.com,1999:blog-1257969457375562525.post-4486507308059831559' source='http://www.blogger.com/feeds/1257969457375562525/posts/default/4486507308059831559' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1247594245'/></entry></feed>
