In this series, we're comparing cloud services from AWS, Azure and Google Cloud Platform. A full breakdown and comparison of cloud providers and their services are available in this handy poster.

We have assessed services across three typical migration strategies:

Lift and shift - the cloud service can support running legacy systems with minimal change

- the cloud service can support running legacy systems with minimal change Consume PaaS services - the cloud offering is a managed service that can be consumed by existing solutions with minimal architectural change

- the cloud offering is a managed service that can be consumed by existing solutions with minimal architectural change Re-architect for cloud - the cloud technology is typically used in solution architectures that have been optimised for cloud

And have grouped services into 10 categories:

In this post we are looking at...

Compute

This category covers all services that can be used to run applications in the cloud.

AWS

Amazon is often been seen as the Infrastructure as a Service (IaaS) market leader with their Elastic Compute Cloud (EC2). AWS lets you choose from a range of 40 virtual server instance sizes from low cost 'nano' instances to high end memory, storage or GPU optimised products, offering up to 128 'vCPU's and a whopping 2TB of memory (be warned this doesn't come cheap!). The lower end T2 instances offer baseline performance with the ability to 'burst' above the baseline for short periods. EC2 comes with images for Linux and Windows Server. A free tier is available for 1 year (equivalent of running one low end instance) although this is unlikely to be a major decision factor for most organisations. On-demand instances are billed per-hour, and discounted prices are available on instances that are paid up-front, or reserved on a recurring schedule, and there is even a spot pricing option on excess capacity. Auto-scaling these instances is supported, with the ability to scale in response to a range of run-time thresholds reported by CloudWatch.

AWS offers persistent disk options through Elastic Block Store and comes with a variety of SSD and HDD flavours. Disk storage is backed by Elastic Block Store and is automatically replicated across multiple servers within an availability zone (a specific location with an AWS region). Replication across regions is supported by shipping snapshots.

AWS Container Service is Amazon's solution for running and managing docker containers. It relies on ECS to provide the underlying container instances. Standard images are available or you are free to choose your own. EC2 Container Registry allows developers to publish their docker container images to a private managed repository which is important to support development and devops workflows.

Amazon also offers a good range of PaaS services. Elastic Beanstalk is a PaaS compute solution for running web applications written in Python, PHP, JavaScript, .NET, Ruby, Java and Go. It can scale on request or based on certain run-time thresholds such as CPU usage. Elastic Beanstalk also allows developers to run applications as docker images.

For running discrete compute tasks AWS has Lambda which executes code in response to various triggers, such as application or storage events. Lambda automatically scales to meet demand and supports JavaScript, Python and Java.

AWS has a large number of centers spread spread over 13 geographically dispersed regions, so there are good options for organisations with strict data sovereignty rules.

Azure

Azure has been rapidly closing the gap to Amazon in recent years with Virtual Machines. Coincidentally (perhaps) Azure also offers 40 instance sizes offering up to 20 cores and 140GB of memory. It is good to see Microsoft fully embracing Linux on Azure, so organisations with large Linux estates need not worry about choosing that platform. Red Hat and Windows images are available 'out of the box' with other distributions available from the Azure Marketplace. Virtual machines are billed per-minute (and discounts across all Azure services are available on 12 month pre-paid subscriptions or as part of an Enterprise Agreement).

Local (temporary) and persistent disk are supported, with VHDs being stored in Storage page blobs. SSDs are available as Premium Storage options. Azure will automatically replicate data to a neighbouring region (Standard Storage only) as well as locally across fault domains (physically isolated infrastructure). Cross region replication of Premium Storage disks is possible through snapshots.

Azure supports virtual machine auto scaling which can scale VMS in response to metrics reported through the Azure diagnostic extension.

Azure supports running docker containers with Container Service. Container Service supports both Docker Swarm and Mesosphere DC/OS orchestration engines and is backed by Virtual Machines running Linux container instances. Azure doesn't offer a managed Docker registry, however it is possible to host your own on blob storage.

Microsoft has been traditionally strong with it's PaaS offerings and they are not about to give up their crown just yet. App Service platform provides a fully managed environment for running .NET, Java, PHP and Node.JS applications. App Service includes Web Jobs for running background worker processes. It also comes with support for running APIs (as opposed to front-end web applications) and Logic Apps, Microsoft's integration and workflow solution. The latest addition to the App Server family is Azure Functions, Azure's answer to AWS Lambda.

In between App Services and Virtual Machines lives Cloud Services, the original PaaS solution offered on Azure. Cloud Services brings many of the benefits of PaaS while providing additional control over the underlying OS. This is a useful option for solutions that require the installation of third party components.

For batch workloads Azure has Batch allowing organisations to burst compute over hundreds of thousands of cores.

Microsoft is the first of the three providers to offer a fully fledged cloud microservice platform in Service Fabric. Service Fabric allows developers to write highly resilient and scalable solutions and offers full support for life-cycle management, provisioning, deploying, monitoring and upgrading services.

Azure is available in 24 regions, the most of all three providers. There are also specific Azure cloud instances for various special interests, such as the US Government and China.

Google Cloud Platform

Google's Compute Engine provides a range virtual machine options. A number of pre-defined virtual server instances are available as well as a novel 'build your own' option which lets you choose between 1 and 32 'vCPU'/cores and up to 6.5GB of RAM per vCPU. Google's 'Predictable' pricing is based on the number of cores and GB of memory. OS support comes with Linux and Windows, either pre-installed or bring your own. Compute Engine also offers a per-minute billing model and offers discounts for prolonged usage. Temporary and permanent HDD and SSD storage options are available with local redundancy built-in by default and comes with the ability to snapshot disks.

Auto scaling is fully supported with integration into Slackdriver, Google's cloud monitoring and logging solution.

For batch workloads Google has Preemptible Vms, these are cost effective Compute Engine instances that take advantage of excess Compute Engine capacity. Google may terminate instances based on system events and will always stop instances running after 24 hours.

Google Container Engine can be used to run docker containers and is based on Kubernetes. Container Engine comes with a managed master instance, all other nodes are Compute Engine instances. This is reflected in the pricing which has a flat hourly fee (free for clusters with less than 6 nodes) plus the Compute Engine instance costs. Google offer a private container repository with Container Registry.

Google bundles its managed application services under the App Engine product. It offers a complete platform of running managed application written in Java, PHP, Node.js and Ruby. Where AWS and Azure have chosen to split out their services in to different products, App Engine comes with a no-sql store, memcache, search and traffic management (compared later in this series). This approach offers a cohesive set of related services that are easy to understand and consume.

Google offers their services across 5 geographically dispersed regions.

Conclusion

There is very little to choose between the 3 providers when it comes to virtual servers. Amazon has some impressive high end kit, on the face of it this sound like it would make AWS a clear winner. However, if your only option is to choose the biggest box available you will need to make sure you have very deep pockets, and perhaps your money may be better spent re-architecting your apps for horizontal scale.

Azure's remains very strong in the PaaS space and now has a IaaS that can genuinely compete with AWS. Looking at the full migration journey, from lift and shift to fully cloud engineered solutions, Azure arguably has the best coverage of the three providers. It's great to see Microsoft coming out with innovative new services such as Service Fabric, however, if your applications are written in Ruby then your options are limited to virtual machines or Docker containers.

Google offers a simple and very capable set of services that are easy to understand. However, with availability in only 5 regions it does not have the coverage of the other players.

Talking of regions, be aware that not all services are offered in every region. This applies to all three providers, so be sure to check if you have strict requirements on where your data resides.

Next up we will be looking at Storage and Content Delivery.