When it comes to providing PaaS hosting solutions for Ruby development, Heroku and Engine Yard are the de facto leaders. And they both utilize Amazon’s EC2 as a hardware base. However, they also take different paths to get there – Heroku offers isolated slices of EC2 instances, called dynos, that offer very limited access to the underlying infrastructure. Engine Yard offers a curious PaaS-IaaS hybrid; you have much more access to the underlying VM, you get a full EC2 VM to work with, but at the same time you also get an ready-made environment for application development. Let’s peek under the hoods of both solutions.
What They Are
Heroku is a PaaS solution owned by Salesforce and hosted on Amazon’s EC2 IaaS cloud hardware. It was originally created solely for Ruby development, but now also includes support for a plethora of other languages and environments - Java, Node.js, Scala, Clojure, Python and PHP. Unlike Engine Yard, you don’t get any access to the VM, so Heroku is really aimed at developers who don’t want to tinker with hardware setup and are just looking for a to-go development environment. Heroku offers a totally free entry-level dyno, although it has very little capability (512MB memory, 10MB storage).
Engine Yard offers a PaaS solution supporting Ruby on Rails, PHP and Node.js environments, and also any other languages you want to install (and support) yourself. Like Heroku, it was also originally hosted exclusively on Amazon’s EC2 platform. But in 2013 they also begun offering cloud instances hosted on Windows Azure. Engine Yard adds a 20% surcharge on all EC2 instances, making it quite a bit more expensive than Heroku. The company is also partly owned by Oracle and Amazon via small minority stakes.
The point of mentioning who owns these companies is because many clients, especially small developers and other IT professionals, get concerned when hitherto small, focused cloud providers are acquired by giants such as Oracle and Salesforce. This is because:
- These technology behemoths sometimes bring a very different philosophy to their new acquisitions to make them fit into their larger corporate strategies. An acquisition by Microsoft could result in more focus on .NET environments at the expense of other frameworks and languages. An acquisition by Oracle may mean less support for Microsoft SQL Server database and more support for Oracle’s own database offering, because Oracle sees Microsoft as a major competitor.
- The acquiring company could jack up prices to hasten the return on their investment.
- Large tech companies are historically not supporters of the open-source movement. After all, they did not earn their multi-billion dollar valuations by giving away stuff for free, so they turn up their noses at most things open-source. Oracle, despite its Java and Linux support, is especially notorious in this regard. So these small companies may find that their new adoptive parent is not so eager to continue giving away for free the source code for whichever open-source app or platform they have developed; the textbook example of this was when Oracle acquired Sun Microsystems and tried to micro-manage the open-source Hudson continuous-integration product . However, this situation is now changing; many of the giants are at least taking baby steps towards embracing the open-source and freemium models by offering free albeit very limited-functionality versions of some of their software apps.
Either way it is usually the customer who suffers, and more so small businesses for whom costs are a major issue, moving to another platform is a major pain, or whose entire business may be heavily hinged on their cloud provider’s environment. Any change to that environment means a major disruption to the customer’s operations. Hence their wariness when they hear about acquisition of their cloud provider by one of the big boys.
Engine Yard offers an option for automatically scaling up by firing up new instances (plus it also offers free monitoring for all instances). This is good for handling surges in web traffic or the database, but it of course comes with an attendant increase in price. It also offers automatic backups and a small number of add-ons for 3rd-party integration, such as Magento for ecommerce and SendGrid for emails. Database integration is simple – PostgreSQL and MySQL are standard. The documentation is very comprehensive and includes dashboards, video tutorials and other visual aids. Engine Yard also offers more access to the underlying VM than Heroku – this allows more customization but also requires more sysadmin skills and time if you choose to go that route. Engine Yard offers a free 500-hour trial.
Heroku is easy to get started on; just install the toolkit. Documentation is simple and easy to understand but not as good as Engine Yard’s. Support for 3rd-party tools is even better than Engine Yard’s. And unlike Engine Yard but in keeping with their whole “ready-made development environment” ethos, Heroku offers neither automatic scaling of your instances (dynos) nor free SSH login to your servers (SSH login is an outrageous $20/month extra).
Both use Amazon’s EC2 as a hardware base. So performance, stability and outages are mostly Amazon-dependent. Engine Yard also offers an Azure alternative, and considering Amazon’s high-profile outages and service slowdowns, this is a significant advantage over Heroku. Also, customers who are physically close to an Azure datacenter but not an Amazon one can use the former and notice a significant performance improvement. It‘s all about offering one’s customers more choices, and Engine Yard wins here hands-down.
Pricing & Support
Engine Yard is worryingly expensive – it is not unusual to spend $200 on a single small server with very low traffic. For example a monthly usage of a ‘medium’ instance costs $177, including conservative estimates for storage and bandwidth. Support is offered in tiers – Standard, Premium ($150 per month) and Fully managed ($1000 per month) and is also just as expensive (see more). On the flipside, customer reviews and anecdotal evidence on the blogosphere all say that Engine Yard tech support is truly excellent – they know their stuff and quickly and efficiently sort out customer problems. They have even sponsored fulltime Rails and JRuby contributors on the community forums!
On the surface, Heroku seems much cheaper than Engine Yard - about $0.1 per dyno-hour compared to Engine Yard’s $0.22 per instance-hour. However, Heroku’s dynos do not include the database cost – these are quite expensive and it seems Heroku is gouging customers here (expect to start from about $350 to get the acceptable performance of 1.7GB RAM). Also, it is difficult to gauge the exact database specs you’re getting because unlike an Engine Yard instance which maps one-to-one directly to an Amazon instance, a Heroku dyno is really only an Amazon-instance slice. See more pricing details here. Support is adequate, but not as good compared to the gold standard that is Engine Yard support. Support is also tiered and is even more horribly expensive than Engine Yard: Standard support is free, Premium tier costs $1000/month, Technical Account Manager (full support) costs $2,000/month.
At the end of the day, a choice between Heroku vs. Engine Yard should be dictated first by your needs. Do you require a development environment all set up, where you don’t want (or don’t have the skills) to get your hands dirty with machine setup with sysadmin work. Then Heroku is more preferable. Or do you want more control over your setup, don’t mind paying a bit more per month, and perhaps are running larger production environments as opposed to a small development setup? Then Engine Yard may be just the thing for you.
The comparison table below will also help in your decision. However, it does not include pricing information as it is difficult to do an apples-to-apples comparison of the two solutions. For pricing details visit the respective pricing pages: https://www.heroku.com/pricing and https://www.engineyard.com/pricing-aws-paas.
Ruby, JRuby, PHP, Node.js (and any languages you choose to install yourself)
Ruby, Java, Python, Node.js, Scala, Clojure
Amazon EC2, Microsoft Azure
PostgreSQL (more DB’s and even NoSQL DB’s installable via 3rd-party addons)
1.7 GB memory, 160GB storage (maps to an Amazon instance)
512MB memory, 1MB storage (1 dyno, which is a slice of Amazon instance)
|3rd Party Tools||
Excellent (60+ tools)
Excellent (includes videos, dashboards
|Monitoring & Instance Control||
Automated monitoring, Fine-grained instance control
Manual monitoring, Very limited instance control
Web GUI, command-line and SSH
Command-line only, SSH is optional extra