Heroku is a scalable cloud application that allow users to deploy and scale powerful apps. It is completely free until your app reaches a certain amount of traffic then you are charged based on how much traffic is occurring. A user can create a web app then push it to his Heroku locker using git. Heroku then manages the scaling and all the deployment. It even gives you a Heroku web address. One of the major drawbacks to the app is that not all languages are support. The languages that are supported are: Ruby, Node.js, Clojure, Java, Python, and Scala. Also, Heroku can use custom databases, but the default one isn't all too great.
Heroku has many great pros. If you are a budding business looking for web app hosting, it is completely free. At least until you reach a certain amount of traffic. But, if your web app is generating traffic, then surely it is making money as well. Also It is free to people who just want to learn to code and make apps. Also a major pro, is that you can use git to push your app into deployment. This is extremely nice because so many companies now days are using github to store their projects. Having everything use git is extremely convenient.
Heroku has some big competition. Their main competition is OpenShift by red hat. It basically offers the same exact service. I know that Heroku has been around longer that OpenShift and i believe their pricing is comparable. Also Amazon's and Verizon's cloud servers are a major competition. Heroku, however, caters a little bit more towards the smaller app developer rather than the large scale company like Amazon Verizon.
How It works?
A developer can create an app. If he doesn't have a place to deploy it he can go to Heroku and create and account. Then he stores his project as a git and pushes the git to Heroku. Magically, makes that app functional and gives him a Heroku address that he can then forward his domain name too.