If you are new to Azure cloud like me, you might have been in a dizzy state like me. Oh gosh!! I though it’s a new cloud platform, and look at the number of services and hosting options.
I have worked with Amazon, Google, Digital Ocean and some other small players in the past. But, I didn’t got a chance to look into Azure till yet. To my surprise, the number of services and hosting solutions is mind-boggling. It could be a daunting task for anyone new to this world to figure out the right hosting solution.
I felt the pain!! Let me share what I have found from a 30K feet view of the hosting solutions it offers. In the next part of this series, I will dive deep into some of these options.
The world of abstractions
The very first idea that comes to anyone with cloud is the ease of use. Of course money as well!! Cloud has made the lives of developers and sysadmins a lot easy. It has sort of became an obvious best practice is to choose one of the PaaS service to piggy back on the cloud features. It is an attempt, to let the cloud vendor do the heavy lifting and have development team focus on the business.
It makes a perfect sense in the world driven by the agility and time to market.
Cloud environment offers everything today from native development tools to pre-baked DevOps pipelines. And all this, with industry best practices, financial SLA’s and internet scale performance. What else do we need?
But, choosing the most abstract service is not always the best choice. While cloud offers agility and speed, it also adds lock-in. It is vital for any business to assess the cloud choices from the strategic vision of the product.
The evolving cloud landscape of abstractions
I remember couple of years ago when I started with cloud, I started with buying few machines on cloud. It was all it had back then. But, it soon evolved into a complex ecosystem of almost everything you can have on bare metal.
Today, the cloud landscape is changing faster than ever!! Not to bore you with numbers, but it has become a 100$ billion industry. Every major company I have heard of, is already in the cloud and trying to sell their “best in the world” services.
Mesosphere, a leading container orchestration platform in an amazing article quotes:
The cloud spectrum services have matured with years of abstractions across the layers. Today, a Virtual machine in cloud is not the same as a bare metal hardware. On one side, you get a virtual compute which is slower than a physical CPU. On the other side, it ships with features like availability sets and zones for HA.
The crucial factor is to assess the level of control required for the application.
An application with complex networking needs per se, is not suitable for a PaaS. At least to the level that, you have to depend on the capabilities of the service itself. As an example, with Azure app services, multi-tenancy and network isolation is non-trivial.
Every vendor will have different claims for their services. But, the truth is “Abstractions enable simplicity and take away power”. Architects have to make hard decision of choosing agility vs simplicity. It takes an extra effort to build systems, manage and operate with higher controls. I would like to see the above spectrum as a path of evolving simplicity and diminishing controls.
On another hand, abstractions like server-less computing offer diminishing returns in the long run.
Joseph M. Hellerstein et al highlighted couple of substantial issues with the server-less computing in this article: “Serverless computing: one step forward, two steps backward”
Comparing Azure Hosting Solutions
The intent of this article is to look at the hosting solutions offered by Azure. This is not going to be an exhaustive comparison of the services, but a peek look at the offerings.
Azure as they say, “Azure is a moving target”. It is still young and maturing. The service spectrum is expanding with new features every couple of months. Azure is not shying away from deprecating the services that do not meeting the industry trends. Let’s have a look at the offerings. We will be going to look into the following:
- App Service [Environments]
- Azure Functions
- Azure Service Fabric
- Azure Batch Service
- Azure Virtual Machine
- Azure Container Service
- Azure Kubernetes Service
- Azure Container Instance
App Service [Environment]
Azure App Service is one of easiest completely managed PaaS offering by Azure. It has tons of features, that lets any user get on-board to the platform in a couple of hours.
It’s a facade service that has a lot of specific offering above a layer of app service plan, viz. the managed infrastructure. This includes static websites, NodeJS, Java, .Net applications, API and mobile back-end hosting.
App service allows teams to be productive immediately with it’s developer tooling. This includes FTP, Git integration, managed diagnostic logs, log aggregation, DevOps like Kudus. Besides tooling, it has built in networking controls for security and agility. This includes auto-scaling, public/private IPs, SSL termination, load balancing, telemetry etc,.
From the cost perspective, app service starts with a free plan for quick proof of concept. It offers many cheap hosting plans which includes shared hosting and small dedicated compute plans. Moreover, many app services can also share the same compute power, with app service plan. On the higher end, it offers a complete range of compute powers and managed premium disks.
Complex networking is not trivial with app service. By default, app services have public access and cannot be part of a private virtual network. There is an advanced offering called “App Service Environment” which offers isolated tiers. But, they comes with increased cost, due to added workers and masters with HA.
Moving to development agility, app services are the easiest. It has built in SCM support, which means you can push code to deploy. App service takes care of the rest including building, logging, deploying and web servers. You can also use your existing DevOps pipelines to deploy already built artefacts. This includes packages like WAR, FTP content, containers etc.
To conclude, it’s a perfect offering to get started on Azure irrespective of the expertise.
Azure Function Service, is a managed function as a service. It follows server-less architecture for people familiar with Firebase or AWS lambda.
Function service offers pay per use model. The charge back happens based on the CPU milliseconds spent on the functions. It is a low cost alternative for the event specific compute which have small compute times.
Underneath, app service and function service share the same technology. This offers the similar level of developer tooling and agility for both. But, there are few crucial differences:
App services are complete web hosting solutions and have more controls built in. While app service have feature of network isolation, function service do not offer it. Moreover, you cannot control the deployment regions of functions. Once deployed, Azure takes care of the rest which includes automatic managed availability.
To conclude, function service is best suited for event driven, ad-hoc low scale compute . In contrast, app service is better for long or constant running applications like Web/API.
Azure Service Fabric
Azure Service Fabric is another completely managed PaaS offering. Unlike app services, they offer an autonomous orchestration engine for building complex applications.
Service Fabric is a Microsoft proprietary technology built to run Microsoft internal products. Also called as Windows Fabric, it was being used to host parts of Azure cloud and products like Skype.
It is a self-healing engine to enable development and deployment of reactive applications. It allows teams to build reliable, fault tolerant, scalable and resilient applications. It is the state of the art technology, and much powerful than many open source products by many measures.
While Service Fabric is best suited for micro-service and event driven applications, it can run monoliths as well. It operates as a stateful and stateless orchestrator to allow variety of workloads. From the operational perspective, it follows the same principle as Kubernetes and Mesosphere. But, the internal architecture varies a lot, especially from decentralisation perspective. It also has a reactive development framework like the Lightbend’s Reactive Platform.
To conclude, Service Fabric is a proven technology used by products like App service and Skype. It has recently been open sourced and getting strong traction from community lately. It is one of the best offering to create large scale complex applications.
Azure Batch Service
Azure Batch Service, is yet another beast among the PaaS offerings. Unlike app service and service fabric, it best fits the batch workloads. Unlike mainstream application development, it serves the teams with unpredictable infrastructure demands.
It is best suited for building massive large scale compute parallel processingsystem. Theses systems are usually offline and do not serve transactional requests. These workloads are low latency, but high throughput with parallel execution demands. It can scale to hundreds and thousands of machines without prior commitments.
To conclude, batch service is a great fit for offline batch workloads. They support auto scaling, scheduling capabilities and HPC processing. You can setup processing pipelines, work queues and scale to thousands of machines.
Azure Virtual Machine
Azure Virtual Machines as the name implies, is the conventional infrastructure offering. It offers bare metal hardware that range from commodity to high computing hardware. It has GPU support for intensive workloads and managed premium storage disks.
Azure offers many other managed services to increase agility and availabilitywith VMs. They include support for networking, appliances, scale sets and availability zones. You can control everything from the networking to backups and HA. VMs can be part of an isolated network and can enable peering with on premise network via custom networking options. These networking options include express routes, VPN gateways, firewalls, security groups, etc,.
To conclude, its a bare metal hardware, which is often necessary for variety of business needs. Azure bundles with powerful ecosystem to make it more powerful. It is also best suited for “Lift and Shift” architecture.
Azure Container Service
Azure Container Service is a complete managed containerization offering. It allows deployment and orchestration of containers in the cloud. It started with the support of all major orchestration engines, but have started to deprecate now. It is to removed from the cloud services by 2020. Currently, it support orchestration engines including Mesosphere, Docker Swarm and Kubernetes.
Azure Kubernetes Service
Azure Kubernetes service is a complete managed Kubernetes servicefollowing the market trends. Unlike ACS, it does not offer an un-opinionated view on orchestration. Currently, the engine itself runs on ACS though, with Kubernetes module.
As of now, it is the 2nd best cloud support of Kubernetes after Google Container service. It spins up a new managed Kubernetes server with few simple commands. You get control on the master instance as well as the agent nodes. But currently, master nodes are not deployed in the isolated networks and are Azure managed components. Azure supports last 3 minor versions of Kubernetes and maintains an auto upgrade for you.
AKS currently do not offer an SLA on the managed master components. The SLAs are applicable only for the agent nodes, which follows the VM and disk SLAs. It is also a free service as of now, which is a huge deal since you do not have to pay for masters.
To conclude, this is the service if your application demands container orchestration. It is the one of the best in the market and is industry standard compliant. Azure is a part of Cloud Native Foundation and the product is lead by one of the Kubernetes founder.
Azure Container Instance
Azure Container Instance is another container offering for ad-hoc workloads. These are not deployed as part of a cluster workload, but as individual units.
Container instances serves interesting workloads. As an example, if you have an ad-hoc long running compute job, which is a weekly job. It might not make sense to have dedicated compute running all the time. Also, you cannot use Functions for the same feature, because it has more complicated logic.
Another interesting use case of container instances are the spike auto-scaling of AKS. While scaling AKS cluster take some time, container instances can extend it immediately.
To conclude, it is a perfect offering in the ad-hoc heavy compute serverless world. It is best for complicate compute which are ad-hoc or event driven. It is a low cost alternative for managed ad-hoc containers.
Azure has broad range of services. It has everything that a cloud has to offer from a hosting perspective. The offerings are wide and discrete based on capabilities and cost. In a later article, I will compare some of these offerings in more detail.
Check out the following links for more details: