What Microsoft Azure Service do I choose?

Nowadays, one of the most daunting choices for you as a developer when considering migrate a Service or an Application to the Cloud is to understand exactly what would be the best strategy to follow when face with the challenge of migrating an Application to the Cloud or even start creating a new Application or Service that will benefit from all the new capabilities that a Cloud Platform was to offer.

This challenge is rooted on significant amount of options that are available to you when you need to decide what would be the best approach to host your Application or Service on the Cloud.

To be able to make that decision accurately its vital to understand first what are the options available and what are the features and scenarios associated with each one of those options.  It this information in hand, you can confidently choose the correct approach for develop and deploy your Application on the Cloud.

PaaS vs IaaS

When looking at the different models of hosting your Application or Service on the Cloud, you will see that you have two possible approaches, PaaS (Platform as A Service) and IaaS (Infrastructure as A Service).
For more detail on PaaS: What is PaaS?
For more detail on IaaS: What is IaaS?

So, where comes your first decision, should I use a PaaS strategy or should I go with classic IaaS.
Usually, that decision will depends on various requirements that your Application development process needs to satisfy, even in some scenarios you will opt-in by a mixed strategy, but in the end we can rely on the fact that if we need to preserve existing Application investments usually the choice will reside on following an IaaS approach since this would be our fast path to deploy.
Now, if we are in face of a new Application or Service that needs to be developed and deployed on the Cloud, we usually are following the PaaS path, in this way we will have access to a new breadth of Services that will enable the developer to focus more on the development on the solution and less on the host and management of the Host where the Application will be running.
But now, even after I chose one of the paths, there are still choices to be made.

Infrastructure as A Service

Platform as A Service

Virtual Machines

Cloud Service

VM ScaleSet

App Service

Container Service

Service Fabric

IaaS, and then? Which option should I choose?

If you are considering to use an approach of IaaS, these are usually the options that you should considering:

IaaS

Profile

Virtual Machines

Statefull and Stateless One-Off Solutions

VM ScaleSet

Scalable and Stateless Solutions

Container Service

Scalable, Orchestrated Docker Images deployed into Containers

Normally when you had opt-in by IaaS it means that you probably have one of the following scenarios:

You are creating an Environment for Test and Development

This approach will allow you to quickly replicate\duplicate environments in a very controlled way and with good level of agility on deploying.

If, for example, you just need to have a quick way to create a box with a specific configuration, or you need to use a process to create on-the-fly a computer to receive a build from a Continuous Integration Process and run a set of Tests, e.g. your model is “Create – Use – Delete”, then you normally use “Virtual Machines”.

High-Performance Computing

Where you had identify the need of having a dedicated Infrastructure that satisfies your requirements of an isolated environment without sharing resources, and you need to guarantee a tight control of your environment.

Let’s imagine, that you are facing a scenario where you need to have a process to manage and deploy a set of identical VMs, and in all of those VMs you will have the same configuration, this is needed to satisfy a scenario where with will be needed to build a large-scale services targeting big compute system or big data scenario, this should be usually a great match for adopting “Virtual Scale Sets”.

Web-Site Hosting

In some cases, you just realize that having your existing Web-Site running on IaaS is less expensive than just go by the usual Hosting Provider Model, and also you will have more control on your environment.

Here, for example, you may need to have the capability to scale-up/scale-down in an easy way your infrastructure to accommodate your peak usage that is not constant, in this case on of the best match would be using “Virtual Machines

Storage-Backup-Recovery

In this situation you are not facing a scenario where you just need to have access in a routine way to your Application or Service, you need to have a Infrastructure that will act as fall-back when you need to recovered from a problem in your existing Infrastructure.

When you need to have a process in place to enable your organization to recover from a disaster situation, that would enable you to just deploy some essential services on newly created VMs and deploy them on Azure, then this should another scenario here having these “Virtual Machines” would be your natural solution.

Isolated Application (not depending on the Operating System)

In some situations they might be the need to have an application that would just have to be auto-sufficient and will not rely or sometimes does not know nothing about the context where its running.

In this type of scenario, you could opt-in by using “Containers”, this will allow you to use an approach of “Single-Service” deployment, in which application design is based on the small part (the “Single-Service” running on a small container) and not on the external components that may affect your feature that you want to deploy on your “Single-Service”

This are not, of course, all the possible scenarios that you as a developer will face when considering your migration/implementation process in a IaaS scenario, but they will, hopefully, provide you with a better

understanding of what might be consider when making this decisions.

PaaS, and then? What option should I choose?

If you had opt-in by using a PaaS, approach you then would have some decisions to make also here. In a high level overview these are the usual scenarios that you may have to consider:

PaaS

Profile

Cloud Services

Existing Frameworks

Service Fabric

Micro Services

App Services

Web/Mobile

Azure Functions

Serverless

Normally  when you had opt-in by PaaS it means that you probably have one of the following scenarios:

I just need to deploy my .NET App

Here you are facing a scenario, where the most important factor is having a strategy where you need to deploy your .NET Applications without worrying about Infrastructure.

If this is what you are trying to achieve the “Cloud Services” would be probably your best bet, with this you can have an approach that enables you to use almost the best of two worlds, e.g. “PaaS with VM Control”, having easy access to a VM without you to be worry about the other aspects of management an Operating System:

  • Health
  • Discovery
  • Updates
  • Patching 

I need to deploy high available Stateful/Stateless Micro Services

Usually in this scenario, you are facing a challenge that is rooted to the need to develop Applications/Services that need to be individually built and deployed.This are usually small and independent Services that need to be integrated in a broader Infrastructure.

The most important factor here is to have a solution composed by this “Micro Services” that are fine-grained and loosely coupled.

If all of this rings a bell for you, then “Service Fabric” would be your first choice. With Service Fabric you will have this model that enables you to develop and deploy those Micro Services:

  • Manage your Micro Services at scale
  • 24 x 7 Availability
  • Stateful Services
  • Ability to use Containers
  • Multi-Cloud Support
  • Capacity of integrate Micro Services using the published API.

I need to create and deploy mission-critical web apps that scale with my business and support different consumers

If you are facing a scenario where you need to develop and deploy a solution that needs to support .NET, Java, PHP, Node.js, Python. If on top of this you also need to have built-in auto-scale and load balancing capacity in your solution.

You may also are in need to abstract from your team the concerns about the patching on your environment, you may need to implement a Continuous Deployment connected to Git, TFS, GitHub or Visual Studio Team Services in your Development Team Processes.

Even if you have the need to support those popular content management systems like Umbraco, WordPress, Drupal or Joomla. Then you should consider using “App Services” instead.