1. What is migration?
Each IT system has its own life cycle, which leads from the analysis of business cases through the implementation of the solution to the phase of implementing the final version of the system and the transition to the so-called maintenance state.
However, over time, the created software starts to deviate more and more from current standards. Outdated technologies, emerging security gaps and increasingly expensive to maintain systems are the most common problems of the so-called legacy systems.
In order to prevent this, software owners decide to migrate their systems. This usually consists updating the version of used software languages and frameworks,
and sometimes a complete replacement of the tools used. Migration is also an excellent opportunity to take a critical look at the system once again.
This is because we already know its main problems, e.g. performance problems in certain parts of the application or system functions that could be designed better from the users’ point of view. As part of the migration, these imperfections and shortcomings of the system can therefore also be improved.
Recently, migrations of system architecture from monolithic solutions to solutions based on microservices have also become increasingly popular.
It is also becoming interesting to move the system from its own data centre to a cloud infrastructure.
2. Migration to the cloud
Migration to the cloud involves moving your current solution based on your own infrastructure and services to a cloud such as Azure, AWS or Google Cloud Platform.
It is worth noting that the migration does not have to include all systems and the entire infrastructure at once. The most popular approach is the
hybrid approach, i.e. moving only a part of the system and infrastructure to the cloud. This allows a better control of the individual migration steps, and sometimes postponing the transfer of sensitive data to the cloud, which many customers are very concerned about at the beginning of their adventure with the cloud.
Migration to the cloud means, above all, a reduction in the time spent on maintaining your own infrastructure. Additionally, we can count on dynamic scalability of the system, depending on the actual load of the system at a given moment of its work.
We do not need to purchase hardware with the highest parameters, which we only need at times of peak load.
A well performed migration, however, requires competence in handling cloud solutions, for both: system administrators (DevOps) and members of IT teams developing the systems, to be placed in the cloud.
3. Migration from a monolithic architecture to a microservice architecture
Large and complex systems have for many years been designed as uniform, monolithic solutions. Monolithic systems are relatively easy to develop and implement, buthowever, after some time they become so extensive that their further development and corrections are more and more troublesome and expensive.
In such solutions we also usually cannot scale only one part of the system (which requires optimisation). Scaling in the case ofmonolithic systems usually consists in adding more processor cores and more GB of memory to the machine on which the system is placed or implementing the idea of so-called load-balancing, i.e. creating several instances of an application that run simultaneously.
A similar problem occurs when it comes to delivering software to the customer. We cannot deliver a selected function of the system in isolation from the whole monolith.
Migration to microservice architecture in the first stage consists in an appropriate separation of modules in the original system. The ideal situation is when after such an analysis we can move each of the system modules to a separate microservice.
One should also not forget about the data layer migration. It is assumed that each microservice should have its own database or its own database schema.
Then we will obtain the desired independence of microservices both in terms of their development and scalability, as well as the ability to provide each system function as a separate microservice.