Digital Ocean vs Rackspace vs Amazon Web Services

When I worked as a systems administrator at The University of Sydney in 2003, we were early adopters of virtualization of our servers by running VMWare on a Microsoft Windows hypervisor. Later in 2011 at the University of New South Wales, I had hands on experience with OpenStack. These technologies (or something like them) would be what is used by the commercial companies providing virtual services, and they essentially provide web interfaces to configure their hypervisor resources. I have been using commercial Infrastructure services since 2012, and have gained a deal of experience with AWS, Rackspace and Digital Oceans. Excuse me for talking mostly about AWS, but it is the go-to solution, and I have used it most. Some of the issues I mention with AWS may have solutions that I have failed to find in their documentation, and they do provide solutions to most sticky problems such as resetting root password by unmounting a servers boot drive/partition, and mounting it to a separate EC2 instance that you do have root access to. Rackspace and Ditital Ocean allow you to change root password (at least on an Ubuntu instance) via their dashboard.

Amazon Web Services

AWS is cutting edge, does everything any company would need, big or small and most importantly AWS have a huge loyal single minded following and are the goto SAS solution. Whether it is the best solution becomes less important when you have to look for staff to maintain or develop your backend, and in Australia at least, you are MUCH more likely to find staff familiar with AWS than Rackspace or Digital Ocean.
AWS has a very good and flexible Content Delivery Network (CDN). It allows you to use any source, including your own web server, not just S3. All these providers use geographical zones for their services, however with AWS you have to log in to your account in the correct zone which is determined by a URL parameter, and there is nothing obvious that directs the account holder to the correct zone for their account, and you can only access one zone at a time, so if you want facilities in the U.S East (California) and in U.S West (Dallas), you have to log in to a separate dashboard for each zone. If you want your servers to talk to each other across the internal network, there are several to choose from regardless of the zone you are in, and they are given complex nonsensical tags, so it is very easy to create a resource that wont have access to the same internal network, and there is no easy way to change the network port to be on the correct network, so the resource has to be destroyed and created again making sure you start with a resource on the correct internal network.
Security groups are created automatically when you create a resource, and the AWS paradigm is to start with maximum security and work toward making your server accessible. I find this frustrating. When I deploy an application for the first time, I am starting with something that will need tweaking to work. Starting with something that AWS intentionally makes inaccessible means there is much more to do before I know that the application is working. I prefer starting with a very open system and then implementing firewalls and closing access. AWS automatically kills processes on your virtualized machines running on their hypervisors when they start using too much resource. In fact I have experienced this on Rackspace and Digital Ocean, but this happens far more frequently on AWS resources, and because it happens silently, it can cause much frustration when setting up new applications. Two factor authentication (2FA) is via a timed application that needs to run on your mobile phone. I had to replace my phone recently as the charger port failed. I ported across the 2FA application, but the accounts had been encrypted, and I had issues with the password to decrypt them on the new device. I have contacted AWS several times, but received no help from them in accessing the AWS dashboard. The solution for a damaged or lost phone in either the 2FA app or the AWS dashboard is to be sure you have an alternative account with root access and credentials safely stored, otherwise, your AWS account can easily become inaccessible. Make sure you have password management software such as keepass2 on all your devices.
AWS customer support is scant, and the only human contact you will have with AWS is with their sales team. If things go wonky such as downtime on their hypervisor, or an Relational Database Server (RDS) crashes bringing all dependent applications down, or your phone becomes damaged, and you no longer have access to your 2FA, there is no live technical support to help. Their support documentation is dense, terse, complicated and sometimes seems out of date. AWS have their own groovy but nonsensical naming conventions for services, carefully designed to completely obfuscate the actual purpose of the service. The free tier starts off free, then after a period switches to charged, at which point it becomes much more expensive than the other two options mentioned here with an opaque pricing scheme that leads to bill shock US$500+ per month for two (2G memory, 2 virtual CPUs) servers and a load balancer and no support.
However, AWS is cutting edge, does everything any company would need, big or small and most importantly AWS have a huge loyal single minded following and are the goto SAS solution. Whether it is the best solution becomes less important when you have to look for staff to maintain or develop your backend, and in Australia at least, you are MUCH more likely to find staff familiar with AWS than Rackspace or Digital Ocean.

Rackspace

I joined Rackspace in 2012 on a special deal of $25 per month to host my almanac/point of sale/time management application, and have used it since on several client web applications. It had outstanding support with tickets being answered quickly, a 24 hour online chat, and even a 24 hour phone line with real live experienced technicians who were helpful and knowledgable. They even provided support for AWS. Over the last couple of years tho, telephone calls are answered by receptionists who can only create a ticket which takes a while to get answered. Also, I have had three RDS reliability issues (over a period of 10 years) which lead me to host my own database server. Now they are too expensive to warrant the lackluster support at around 40GBP per month for a 2G mem 2VCPU virtual server.
Rackspace have excellent load balancers, with a great deal of control via the mycloud dashboard. You can enter HTML to display a page if the web servers on the load balancer become disabled (automatically or otherwise), which saves you setting up a simple webserver with a maintenance message on it for when you bring your servers down for maintenance. The most useful feature though is that you don't have to use Rackspace instances as nodes to the load balancer. The load balancer will accept traffic from a particular IP address to forward proxy. This allows you to move web server resources to another provider without having to change the IP of the website, and when you do create a new load balancer on another provider, you wont have issues with the lag as the Distributed Name Service (DNS) updates nameservers around the world.

Digital Ocean

Digital Ocean has good support, with tickets being responded to within the hour mostly, though the SLA mentions within 4 hours. They offer US$200 credit for new customers (and US$25 for the referral), and the interface is well laid out and informative. I moved from Rackspace myself about 6 years ago, and was so impressed I moved one of my clients to Digital Ocean too. They provide servers on both dedicated and much cheaper non dedicated hypervisors, and the last option turns out to be much cheaper than AWS or Rackspace (US$18 per month 2G memory, 2VCPUs) with a transparent pricing system that gives you the estimated monthly price at time of creation. I find the servers perform well, and they have excellent monitoring with graphs that are easy to understand and alarms that are easy to configure.
Digital Ocean have many features that make your life easy. Their documentation is outstanding, and they allow contributions to their documentation. They are constantly innovating and expanding their services with cutting edge tech, and the interfaces they use seem far less complicated than the competition. Setting up kubernetes on Digital Ocean for example was easy. Digital Ocean Rocks!

Virtual Memory

Memory is expensive, and is one resource that is not always needed in large quantity, but if it runs out, your server will crash. It is odd that in an age when whole servers are created on demand (taking minutes to create) with Elastic Beanstalk and Kubernetes, yet virtual memory (which requires no orchestration, is very easy to set up, and just uses a little disk space which is cheap) is turned off by default, and vigorously discouraged by a process of missing documentation and dogma that the disk access virtual memory demands damages the newer SSD hard drives. I use node webpack to uglify my Javascript and CSS, and stuff it in to one big file. Node uses a surprising amount of memory to do this, and having virtual memory to cover this peak usage solved frequent issues of the server hanging during a deploy. Digital Ocean has Virtual Memory (VM) turned on by default on its Ubuntu server, Rackspace has VM turned off by default, and I believe AWS Ubuntu does not allow you use virtual memory.