Old schoolIt may sound odd to call a deployment strategy ‘old school’, but the idea of serving your app to users using hardware that you own is rarely seen in vast majority of web apps on the Internet today. Managing your own physical servers (or paying a data center / co-lo site to do so) can be challenging. You have to worry about hardware failures, physical security, and numerous other headaches. But, for some apps it’s still the best way to go.
There are a couple of different types apps and situations where the old school approach makes sense. An app that leverages hardware directly (e.g. uses GPUs to do complex math) will almost certainly have to run servers that are custom built and maintained. More commonly, if you already have servers and a data center that you control (e.g. within the IT department at a larger company) it can quite often be cheaper to leverage the existing infrastructure than pay someone else to do the hosting for you.
The cloudIf specialized hardware isn’t needed for your app and you don’t already have a data center at your disposal, then the next tier in hosting options is managed services. This includes everything from dedicated large servers to small virtual systems (VPSs). These types of managed instances are by far the most popular hosting solution in use and there is a commensurate number of providers as a result. The most popular providers are Amazon EC2 and Rackspace, but there are many more.
Managed instances give you full administrative access to your server. They typically come with an operating system preinstalled but you'll be responsible for everything else from setting up your application (including services like web or database servers) to making sure that the latest security updates are installed.
This type of hosting comes with a lot of advantages. First of all, you have full control of your server, but you don’t need to worry about things like physical security or hardware problems (those are handled by the hosting company). Another benefit is that you simply figure out how much horsepower you need and everything will be set up for you (dedicated instances typically have some startup costs and/or time commitments, but VPS instances can typically be setup or shutdown in minutes); there's no need to shop for hardware or compare brands.
The drawback of managed instances is that you still need to think about your server hardware at least on some level. You have to plan out which instances in your system will be used as web servers vs. database servers vs. load balancers and you have to make sure to get the right sized systems to support that (and size includes everything from processor to RAM to disk space). This type of hosting can also be expensive when you’re just starting out (typically around $30/mo per instance on the lower end). The last issue is that you need to stay on top of software updates and security. Since you’re the system administrator, you have that responsibility.
Platform as a serviceIf you don’t want to or are less able to handle the devops (system administration of servers for web apps) side of deploying an app, then the next tier that’s available are what are known as platforms as a service (PaaS). In the Ruby on Rails world, Heroku is the best known PaaS but there are quite a few other options. For other stacks such as Python, PHP, and Java, Google App Engine has a very similar approach to Heroku’s. There are lots of competitors with big names in the PaaS space: Amazon’s Elastic Beanstalk, Oracle Cloud Platform, and Rackspace Cloud plus a host of others.
The biggest advantage of using a PaaS is that you don’t have to worry about managing your app servers. Almost all of the PaaS providers will keep the systems up-to-date and as your user base grows, it’s a simple matter of changing some configuration or payment plan options in the PaaS. Deployment is usually as easy as pushing your code to the cloud. Database servers are typically included for a fee with almost no setup required. Most PaaS providers also partner with other services to offer everything from exception handling to image processing (see Heroku’s Add-Ons list for an idea of what’s available).
Using a PaaS is not without its downsides. First of all you have to conform to the stack you’re deploying to; you have to make sure your app is configured to run on the platform. Also, most PaaS’s don’t have filesystems that you can easily access or save to so any kind of storage or other file-level interactions will need to be handled by something like Amazon’s S3 or similar services.
For many app developers, the advantages of a PaaS outweigh the disadvantages. When building Ruby on Rails apps at Worry Free Labs, we almost always recommend hosting it on Heroku and we’ve had virtually no occasions where features we needed couldn’t be supported directly on the platform or by a partner add-on. PaaS service starts affordably and scales easily so it’s a great choice for startups.
Backend as a service
With the explosion of smartphone apps, a new type of service provider has popped up: the backend as a service (BaaS). BaaS providers started as a way to simply persist data into the cloud so that if upgraded your device or wanted to share some data with other users, you have an easy way to do it without custom-building an API and the associated servers. There are a large number of BaaS providers (many of them specializing in specific use cases) but Parse, Stackmob, Kinvey, and Firebase are some of the big ones. Many even allow you to do a basic degree of server-side processing so that you can build a truly smart API for your app.
When you build this type of app, since only static files need to be served to users, an entire app can be hosted on Amazon S3 or any other CDN service for very low cost and you never have to worry about infrastructure. The BaaS handles all of the data storage and you can focus on your users’ experience.