Definition :
MDA – Model Driven Architecture
Model-driven architecture (MDA) is a software design approach for the development of software systems.
Source : https://en.wikipedia.org/wiki/Model-driven_architecture
The infrastructure components like the servers,load-balancers, routers can be expressed as models. We are already doing this, either on Visio or Draw.io or some other tool. In order to do the actual implementation
we need to use these diagrams as “reference” and not as working models, means I need to able to deploy.
Lets take an example, simple blogging site
1 host
LAMP Stack (linux OS,apache,php,mysql)
The modeling tool should be dynamic, instead of static.
The process can be represented as following steps:
diagram:
As your site become popular due to load on the application, change in the architecture to take more load.
following components and configuration got added. See the diagram below
There are many Critical problems to be addressed here by the tool;
1. How to address the infrastructure change?
There are 2 options:
Option #1: directly update the infrastructure layers and then update the model
Option #2: Modify the model, and deploy the infrastructure.
2. How to take care of the live data?
The data is critical for any business application. The tool should be intelligent enough to identify these critical info.
3. if the deployment fails, how to go back to working copy?
How to go back to good working copy, if there are any failures. Or we should have Primary-Secondary sites appraoch
4. Audit trail of the infrastructure model?
There are so many role in the infrastructure, once this is on production, this should be controlled, before deploying any change.
Conclusion:
Disadvantages with this approach:
The models can go complex over the time and difficult to read and interpret.
Few options I can think of:
we have to divide the whole infrastructure to multiple groups, so that easy to understand by humans and manage well.
As an alternative approach, we can have a Infrastructure description language, which helps to describe your infrastructure.
Sample Infrastructure Description Language:
Example #1:
appname:blogging-site
contains:
nodes:
image : linux
port: 8081
Example #2:
appname:blogging-site-lb
contains:
load-balancers
nodes:
node-1
node-2
db-node
load-balancers
connects-to:
node-1, node-2
node-1
image: apache-php
port: 8080
node-2
image: apache-php
port:8080
db-node:
image: mysql