Since most of the time an application’s bottleneck is found in the db SQL code and given that ActiveRecord adds an abstract layer which in itself degrades performance, it would seem that there is little use in scaling the application server. What is the point of adding more dynos if the least common denominator in terms of performance turns out to be the db anyway?
Here is a blog post from heroku:
http://adam.heroku.com/past/2009/7/6/sql_databases_dont_scale/
You need to be able to scale all parts of the web app to make it truly elastic. The real benefit with Heroku comes from the system they wrote around AWS, so for example, if an instance were to be killed, it is quickly replaced, keeping your app online.
Furthermore, when you reach a certain size, load balancing becomes essential for uptime, heroku abstracts this all away from the user and just makes this happen- which is just as well, because system admin is a skill in itself.
SQL databases can be scaled by use of replication. It’s works very well and is robust.
What makes each application scale is specific to the application; if you have a lot of ‘uncacheable’ html pages, you will have to have a large number of dynos at the front to process that, equally if you can cache a lot, then maybe the balance will be at the database level. It’s unique to your situation.