
Microsoft Azure – the choice of a hosting platform
Microsoft Azure is an Internet-scale cloud platform hosted in data centers, managed and supported by Microsoft. It has been available for public consumption since early 2010. Having grown very rapidly, Azure today provides services on all cloud stacks such as IaaS, PaaS, and SaaS, covering a wide range of offerings around computing, storage, networking, mobile, analytics, and many more.
Choosing a hosting service for your application is an important task. The choice is usually based on factors such as the hardware and software requirements of the application, the required control over the hosting environment, operational cost, options to scale, and supported deployment methods. The hosting services offered by Azure range from fully controllable virtual machines to the capability to host serverless code.
The support for popular enterprise-ready platforms and applications such as Windows Server, Linux, SQL Server, Oracle, IBM, and SAP, makes Azure VMs a popular choice for hosting virtualized workloads. This service is also backed by a gallery of numerous open source virtual machine images, driven by Microsoft partners. Virtual Machine Scale Sets can be used to reliably manage, deploy, upgrade, and scale identical virtual machines at a scale spanning to hundreds of instances. The ability to automatically scale a Virtual Machine Scale Set without pre-provisioning optimizes the operational cost significantly.
The support for open source products has opened new opportunities for Microsoft Azure as a cloud platform. Containers being the new buzzword, Azure offers an open source enabled container service which optimizes the configuration of popular open source tools and technologies for Azure. Azure Container Service is based on the Docker container format to ensure portability of your application containers across environments. It also supports a choice of orchestration solutions like Docker Swarm, Marathon, and DC/OS to enable hyperscale deployment of containers with the ability to scale to tens of thousands of instances.
For customers who would like Microsoft to manage their operating environment by delegating responsibilities such as patching and upgrading, Microsoft offers a fully managed PaaS called cloud services. The service supports two types of virtual machines:
- A web role, ideal for hosting web applications on Internet Information Server (IIS)
- A worker role, recommended for running services and background tasks
A typical enterprise application deployment will use a collection of web roles and worker roles for hosting application tiers. While the operating system and the underlying hardware is managed by Microsoft, consumers will still have the ability to install custom software on the virtual machine, configure the operating environment, and even remotely access the machine.
For simpler applications which are less concerned about the underlying hosting environment, Microsoft Azure offers App Services, which is a lightweight and powerful platform to host web, mobile, and API applications. This service enables developers to rapidly build, deploy, and manage powerful websites and web apps which can be coded in popular programming languages such as .NET, Node.js, PHP, Python, or Java. Consumers using this service have the ability to run their workload on a dedicated or a shared virtual machine fully managed by Microsoft. Irrespective of this choice, each application is hosted in completely isolated and secured process boundaries.
Azure also offers a service for hosting Nanoservices on a serverless platform. The service is called Azure Functions. Azure Functions supports a list of popular development languages such as C#, Node.js, Python, and PHP. Azure functions also have the capability to scale according to the load imposed on them.
All the hosting services listed above can be used to host Microservices, some with a lot of plumbing and some without any. However, the ability for a hosting platform to support heterogeneous underlying infrastructure and operating environments is critical in today's world. This is what makes Azure Service Fabric unique and the recommended platform to host Microservices. We will cover more about Azure Service Fabric in Chapter 3, Understanding Azure Service Fabric.
Among all influencers, the control a consumer will have on a hosting platform, in terms of accessing and configuring it, holds maximum weight. This is typically driven by organizational strategies and constrains within a modern-day enterprise. The following diagram illustrates the amount of control a consumer has on each of the hosting services discussed here:

The preceding diagram illustrates the level of control a user has on a specific Azure service. For example, if cloud services are used, users have the capability of configuring everything above the operating system, such as system registry and environment variables.
Azure Service Fabric offers maximum flexibility by providing configurable managed layers. We will spend the next chapter discussing its caliber in detail.