Getting application architecture right is super hard and often choosing the wrong architecture at the start of a project causes immense pain further down the line when the limitations start to become apparent.
Azure has 100s of offerings and it can be hard to know what the right services are to choose for any given application.
However, there are a few questions that Azure MVP Barry Luijbregts has come up with to help narrow down the right services for each business case.
There are 2 overarching questions to ask when building out Azure architecture:
Azure offers heaps of models for running your app. So, to choose the right one you need to break this question down into 3 further parts:
There are many different levels of control that can be provided. From a VM which provides complete control over every aspect, to an out-of-the-box SaaS solution which provides very little control.
Keep in mind, that the more control you have, the more maintenance will be required meaning more costs. It is crucial to find the sweet spot for control vs maintenance costs - is the extra control gained actually necessary?
Figure: The different levels of control
Choosing where to run your app
Evaluating how often an app needs to run is crucial for determining the right costing model. A website or app that needs to be available 24/7 is suited to a different model than something which is called infrequently such as a scheduled job that runs once a day.
There are 2 models:
Azure has tonnes of ways to store data that have vastly different capabilities and costing models. So to get it right, ask 2 questions.
The first question is what is the purpose of the data. Data that is used for everyday apps has very different storage requirements to data that is used for complex reporting.
So data can be put into 2 categories:
Data comes in many shapes and forms. For example, it might have been normalized into a fixed structure or it might come with variable structure.
Classify it into 2 categories:
These questions can be applied to any scenario, but here is one example:
Let's say you have a learning management system running as a React SPA and it stores information about companies, users, learning modules and learning items. Additionally the application administrators can build up learning items with a variable amount of custom fields, images, videos, documents and other content as they want.
It also has a scheduled job that runs daily, picks up all the user data and puts it into a database for reporting. This database for reporting needs to be able to store data from many different sources and process billions of records.
Control - The customer doesn't need fine tuned control but does need to configure some server settings for the website.
Location - The app needs to run in Azure.
Frequency - The scheduled job runs occasionally (once a day...) while the website needs to be up all the time.
Purpose - The data coming in for everyday usage is largely transactional while the reporting data is more for data analytics.
Structure - The data is mostly structured except for the variable learning items.