Skip to main content

Adding extra- complexity to a solution by using too many SaaS of a cloud provider

Context
When you embrace Azure or another cloud provider, you’ll discover an environment that offers out of the box a high variety of options for each type of action that you need.
Let us take computation as an example. If on-premises you would have the option only on top of VMs, where on top of them you would be able to put any other solution that you would like, when you are on Azure, things are looking different.
Beside the classical VMs, on Microsoft Azure you have: Scale Sets, App Services, Functions, AKS (Azure Container Services), Container Instances, Batch, Service Fabric and other Cloud Services (classical Web and Worker role for example).

Problem
Having so many options, selecting the best service for your needs might be tricky. It is not about taking the wrong decision; it is more about selecting the right service for your needs, taking into account your context and expectations.
This is one of the most challenges steps during the initial phases of the project that can ensure the success of failure of a project.

Internal Fight
When you need to decide what are the Azure (cloud) components that will gone be used inside your solutions, in most of the cases there might be a friction between two groups. One of them is trying to go with greatest and latest services and technologies and the other one is trying to go safe, with a classical approach.
A good example is:

  • A solution based on Azure VM Scale Sets, Azure SQL and Azure Storage

vs

  • A solution on top of containers (AKS), with Azure Cosmos DB and Azure MySQL

Both parties are proposing good ways on how you can approach the problem. In the end, you need to draw a risk matrix and see what are the pros and cons of each approach. 

A hidden risk
Having at a click distance an ecosystem with so many services available, the technical teams are driven to use as many services as possible. On one side, this is good, because using SaaS reduce the responsibility of the team, but using to many services adds also extra complexity.
For each service, you need to know the pricing model, behavior, limitations, API, configuration and many more. This might not sounds too much… or not? Because the team will try to use the latest services and create a state-of-the-art solution, you can end-up with 14-16 services mixed up together for a simple solution that could use just one computation solution and a storage.

Example
Let us imagine that we want to develop a system that is processing documents. A classical approach would be:

  1. Azure Storage
  2. Azure SQL
  3. Azure Service Bus
  4. Azure App Services
  5. Azure Batch

Another approach that is good as the first one could contain:

  1. Azure Storage
  2. Azure SQL
  3. Azure Cosmos DB
  4. Azure App Services
  5. Azure Container Services
  6. Azure Functions
  7. Azure Data Factory
  8. Azure Logic Apps

Both solution are correct, there is nothing’s wrong with the first one or with the second one. On the second approach there is an extra complexity layer added by extra services. We need to put this in balancer when we take a look over product requirements and NFRs.

Conclusion
Be careful when you combine too many services from a cloud provider. Each extra service adds extra complexity to the system, making it more complex to manage and develop. There is a thin line between a good solution and over-engineering when you have so many services at a click distance. 

Comments

Popular posts from this blog

Windows Docker Containers can make WIN32 API calls, use COM and ASP.NET WebForms

After the last post , I received two interesting questions related to Docker and Windows. People were interested if we do Win32 API calls from a Docker container and if there is support for COM. WIN32 Support To test calls to WIN32 API, let’s try to populate SYSTEM_INFO class. [StructLayout(LayoutKind.Sequential)] public struct SYSTEM_INFO { public uint dwOemId; public uint dwPageSize; public uint lpMinimumApplicationAddress; public uint lpMaximumApplicationAddress; public uint dwActiveProcessorMask; public uint dwNumberOfProcessors; public uint dwProcessorType; public uint dwAllocationGranularity; public uint dwProcessorLevel; public uint dwProcessorRevision; } ... [DllImport("kernel32")] static extern void GetSystemInfo(ref SYSTEM_INFO pSI); ... SYSTEM_INFO pSI = new SYSTEM_INFO(

ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

Today blog post will be started with the following error when running DB tests on the CI machine: threw exception: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information. at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) This error happened only on the Continuous Integration machine. On the devs machines, everything has fine. The classic problem – on my machine it’s working. The CI has the following configuration: TeamCity .NET 4.51 EF 6.0.2 VS2013 It see

Navigating Cloud Strategy after Azure Central US Region Outage

 Looking back, July 19, 2024, was challenging for customers using Microsoft Azure or Windows machines. Two major outages affected customers using CrowdStrike Falcon or Microsoft Azure computation resources in the Central US. These two outages affected many people and put many businesses on pause for a few hours or even days. The overlap of these two issues was a nightmare for travellers. In addition to blue screens in the airport terminals, they could not get additional information from the airport website, airline personnel, or the support line because they were affected by the outage in the Central US region or the CrowdStrike outage.   But what happened in reality? A faulty CrowdStrike update affected Windows computers globally, from airports and healthcare to small businesses, affecting over 8.5m computers. Even if the Falson Sensor software defect was identified and a fix deployed shortly after, the recovery took longer. In parallel with CrowdStrike, Microsoft provided a too