Heroku, a Salesforce company, is an established platform as a service (PaaS) with a process model designed to fit a wide range of distributed applications, which allows for quick deployments. Heroku is not trying to be the provider of all services in the PaaS arena, and this is likely an advantage. Rather than competing with third-party providers by offering their own version of services, Heroku is focusing on core processing and data management while allowing third party vendors to easily offer additional services to Heroku developers.
Heroku was one of the earliest PaaS providers and continues to be almost synonymous with PaaS. The Heroku platform provides abstract computing environments called dynos, which are virtualized Unix-style containers that run processes in isolated environments. Dynos are broadly typed as either web dynos or worker dynos; the former respond to HTTP requests and the latter to task requests in a queue.
Heroku started as a platform for Ruby developers, but has since expanded its language support to include Python, Java, Scala, Cloture and Node.js. While Heroku gives you options with regards to programming languages and application frameworks, it works best for applications that fit well into the Twelve Factor App methodology. This methodology grew out of Heroku designers' experiences so it is in some ways a set of best practices for developing applications for Heroku. At the same time, the principles are general enough to be applicable to the kinds of distributed systems underlying many web applications in general.
Heroku pricing is based on the number and size of dynos deployed, the size of the Postgres database, and add-ons used. Dynos are available in two sizes: 1x, which includes 512MB RAM and 1x CPU share for $25 a month, and 2x, which includes 1024MB RAM and 2x CPU share for $50 a month. Add-on pricing varies by product, but the "pay for what you use" model with multiple tiers is typical. For example, charges for the Redis Cloud add-on range from free for 30MB, 30 database connections to one database, to $3,500/month for 50GB with unlimited databases and unlimited connections.
Applications in Heroku are a combination of source code and dependencies, such as packages, modules and libraries that must be available in the runtime environment. Dependencies are described in language specific, declarative formats. For example, Java specifies dependencies in pom.xml files, Ruby uses gemfiles, and Python applications define dependencies in requirements.txt files.
If your application depends on a commonly used framework, like Django or Ruby on Rails, Heroku can determine how to run it. In other cases, you'll have to specify the processes that should be run by listing commands in a process file. The process file lists the command-line to invoke your process, as well as an indication of the process type, such as a web process or a queue-based process. Heroku is well integrated with Git, so a single command can push your application to the remote Heroku repository.
Applications that require persistent storage have access to Heroku Postgres. Your Postgres databases in Heroku are accessible from any Postgres client, whether it is in the cloud or on your local device. Heroku also provides a handy connection string utility to generate language specific connection strings to your database. A couple of especially useful features are the fork and follow commands. The fork command clones a database and allows developers to test changes to database code without risking unwanted changes to data used by others. The follow command is more useful in production since it creates read-only replicas of a database. This is especially helpful for analyzing data and running large batch queries without degrading performance of transaction processing parts in the application.
The Postgres environment includes redo logs which maintain information on all transactions. The redo logs are copied to multiple data centers so that in the event of a hardware failure, the state of the database could be reconstructed.
The Heroku platform includes process management and database services, but that is not always enough. Third party applications, called add-ons, are also available as services within the Heroku platform. The types of add-ons range from data stores and search services to support for mobile devices and SMS messaging. If the relational Postgres database is not a good fit for your persistent data storage needs, you have the option of using Amazon RDS, which offers Oracle, Microsoft SQL Server, and MySQL versions; a couple of MongoDB services; Neo4j, a graph database; as well as three different Redis providers.
The Heroku addon marketplace currently lists nine search services including Solr search services, four log management services, nine queue services, 10 analytics offerings along with other types of components.
We didn't see many shortcomings in Heroku's service offering.