Over the past few years, we've talked quite a lot about "the cloud," the difference between public and private clouds, and decisions CXOs make when growing or consolidating data centers. But we haven't spend nearly as much time on the small business equivalent, the lone server.
Today, smaller companies that want to set up a Web site, manage their own email flow, install sharing tools like OwnCloud, or otherwise run Internet-facing server-based software have a number of choices ranging from setting up machines on-premises to using outside service providers.
When I started ZATZ back in 1997, we didn't have that choice. If we wanted to run a relatively high-traffic Web server, we had to run it in-house. That meant we had to buy hardware and pay for dedicated Internet feeds with fixed IP addresses. Back then, especially for a self-funded startup, that was both mondo expensive and extremely time-consuming.
While hardware and bandwidth costs have gone down in the intervening years, hosting servers on site still requires you have at least one dedicated IP address and enough allocated bandwidth to handle the up and down traffic from the Internet. For most smaller companies, this isn't worth the hassle. In fact, way back in 2005, I moved the ZATZ servers into the cloud, co-locating them at a friendly ISP.
When you start looking at Internet hosting services, the main offering is Web serving. ISPs and hosting providers will provide you with services that allow you to build out one or more Web sites and serve pages to an audience. While you might also be looking for mail server hosting and mailing list management, those services are probably better run through specialty providers: Gmail and Office 365 for email and a mailing list service provider for list management. A couple of years ago, I wrote about the lock-in problem of email newsletter management.
All of that brings us back to the discussion of hosting. If you want to run a Web site (or more than one -- I operate about 10), you'll want to choose between hosting the site yourself on a machine in your home or office, using a traditional shared hosting provider, using what's called a "virtual private server," building on a cloud service like Amazon's AWS, or renting a dedicated server.
The range in prices is quite considerable. You can get a nice little shared hosting account for as little as four bucks a month, but once you start adding dedicated servers, you're hitting a few hundred bucks a month and climbing.
Basic shared hosting
Let's start off at the low end. If you have a simple Web site, say a site that hosts a resume or maybe a page or two description of your business with contact information, a cheap shared hosting service is just fine. You'll get by with spending less than $10 a month and never notice a problem.
There are some limits to these inexpensive plans. First, beware the term "unlimited" -- as in unlimited storage or unlimited bandwidth. When you're paying less than $10 a month, you will never, ever be unlimited. Either the terms of service will state what is considered acceptable use (and anything above that will be blocked, slowed down, or billed) or your bandwidth will be automatically throttled behind the scenes.
Beyond the limitations of unlimited, the concept of shared hosting - multi-tenanting - is all about the fact that you do not have exclusive use of your computing environment. You are sharing your CPU cycles, your machine's RAM, storage, and bus interface - as well as bandwidth - with other hosting customers. Some hosting providers do a good job of making sure that no one customer hogs up too many resources (see why "unlimited" can't be unlimited?), but others just let their customers run free with less oversight.
The point is, the server is shared.
Virtual private servers (VPS)
Next, let's discuss VPSs. In my experience, there are two flavors of VPS offered, and you need to be clear on which service you use. The first gives you a true virtual machine (meaning you can run anything you want and are basically root) and the second gives you a dedicated hosting control panel (like cPanel), but you share the core Web server configuration with other users on the machine.
VPS services are also shared. As with basic shared hosting, you're sharing machine resources with other customers. The difference between shared hosting and VPS services is how that sharing is accomplished. Also, since VPS customers tend to pay quite a bit more than basic hosting customers, performance tends to be better and the limits to "unlimited" tend to be less.
Going back to the "virtual" part, you might get a VPS that offers you a virtual machine image, onto which will likely be installed a Linux distro. After that, in many VM-based VPSs, you're on your own. You need to load your own LAMP stack (Linux, Apache, MySQL, PHP or Perl) and set up your own server management. For those who want to spend less money but want full control over their environment, this is a good choice.
A variant on this is the VPS where you get a virtual Web hosting environment that is, essentially, a package of some number of basic shared hosting environments. In most cases, when you buy basic shared hosting, it's for one Web site, one public_html directory, one set of config files, and so forth. With VPS virtual Web hosting, you get the ability to spin up some number (usually determined by the price of your deal) complete Web hosting environments, each unique from the point of domain and configuration.
Either way, with VPSs, you have more resources, more performance, more freedom, more flexibility, but you're still sharing the machine.
A dedicated server is just that: a server dedicated to your sole use. You are no longer sharing the box with anyone else. While you rent it, the box located wherever your ISP has its data center is yours to use and yours alone. In most cases, this means that you're free to run whatever you want on the box, and if your database queries take an unreasonably long time, the ISP isn't going to complain, because you're not slowing any other customers down.
Like with VM-based VPSs, you're generally allowed to configure your environment as you wish. So if you want to add a different PHP configuration or modify every last bit of Apache, or run Nginx instead of Apache, no one will stop you.
Are you completely unlimited? No. There are still going to be limits. First, you can't blow out your ISPs bandwidth, because you're still sharing bandwidth with all the other customers. Second, you'll probably still be limited to an acceptable use policy, which generally frowns on customers hosting porn or pirated content on servers of any sort.
But even though you have some limitations, you're not sharing the machine. All the CPU's core capability is yours to use.
Finally, let's talk for a moment about cloud hosting services like Amazon Web Services (AWS) and Digital Ocean. Amazon sells an entire array of infrastructure-as-a-service offerings in addition to simple shared VM hosting. So does Digital Ocean. I'm mentioning Digital Ocean because they let you very quickly create, launch, run, and destroy virtual machines. Like Amazon, they bill by the time unit. The one advantage of Digital Ocean is that it's more oriented towards development than production, and so quickly creating and blasting images is a core feature of the service.
In general, if you're planning on building a scaling Web infrastructure, or you're trying to build a cloud-based data center, then AWS is the right answer. But if all you want to do is host a few Web sites, then you're better off with a regular shared or dedicate server.
What I use
When I was running ZATZ, I used to run my own server array in my house and office. I had a private cloud of about 10 servers, all connected to the Internet, first over ISDN and then via a T-1 line. That was prior to about 2005, when I moved to Florida and needed to make sure the data center kept running while we were in transit. So I co-located my gear at a friendly ISP, essentially getting my own rack in their data center. Those were dedicated Windows Server machines (there were also a few Linux boxes) and they did well.
There was an added complexity here, in that my servers ran server software that was quite powerful in 1998, but by 2009 was obsolete. I needed to migrate off of that infrastructure to a new environment, and I chose WordPress as my base environment. While there were no ISPs that ran my old environment (UserLand Frontier), there were thousands that worked with WordPress. I could choose from basic shared hosting, VPS, or dedicated servers.
In the end, I chose a VPS plan from a relatively unknown WordPress-oriented hosting provider, WPMU-Hosting. My primary reason was because the owner, Joe, is a serious WordPress operations guru, and he was willing to let me tap his brain to get my conversion working properly. He also had a good deal on hosting and had optimized his environment for WordPress-based hosting. The version of VPS I have allows me to run a bunch of Web sites, but is not VM based. I'm happy to let Joe tune Apache and PHP for the best WordPress performance and it keeps me from fiddling with server config files. All of this costs a mere $30 per month.
Of course, I'm no longer actively running advertiser-supported sites. My sites now consist of the ZATZ archive, my personal site, a bunch of sites for my wife, a number of sites I use for tinkering with and experimenting with Web technology, and a few sites for school.
I also have accounts on Digital Ocean and Amazon S3. I do regular site backups to Amazon, and it costs me, quite literally, pennies a month. In Digital Ocean's case, because it is so easy to spin up a completely fresh server, I often use it when I want to try out something temporary but with no limitations on configuration options. It's also very inexpensive - to the point where I have yet to spend down the original $10 promotion credit I got for signing up.
Hosting services can be a challenge and you may find yourself migrating from one to another over time. That may not be because your original ISP has done anything wrong, but simply because your network operations model has changed. If you're going to choose a hosting provider, make sure you also think through how you'll recover your entire hosted contents and database, and whether or not you can import all of that to a new environment. If you plan with migration in mind before you start your initial setup, you'll be much happier when you eventually have to move on.