Extracting Microservices from a Monolithic Application
Examensarbete för masterexamen
Microservices is a relatively new way of developing backend applications. Usually in backend applications, often referred to as monolithic applications, the code is developed and deployed as a single software artifact. In microservices, this artifact is split up into multiple small applications or services, where each service can be developed and deployed independently from one another. Microservices have gained popularity since it enables targeted scaling of specific features and a more fault tolerant system, among other benefits. However, the microservice system has to be designed and implemented in such a way that they enable these benefit, which comes with several challenges. In this thesis, an action research methodology was used to find and validate information about microservices. The research was therefore split into two phases. The first phase focused on knowledge gathering, and the second phase on validating the knowledge gathered by migrating a microservice from a monolith. During the first phase the challenges that comes with microservices were explored together with different strategies that can be applied to combat the challenges. Information about microservices was found through reviewing literature and conducting interviews with developers who has worked with microservices. Several challenges were found, were the most dominant challenge was analyzing the domain and defining service boundaries. Another area of focus during the first phase was to find any advantages or disadvantages of being a small company when developing microservices. A migration strategy was created at the end of the phase based on the knowledge gathered. The strategy includes all necessary steps that needs to be conducted in order to successfully migrate microservices from a monolith. In the second phase, the migration strategy was tried out and a microservice was migrated. Generally the strategy worked well and it resulted in a fully functional microservice. However, some issues were found during implementation, which resulted in some adaptations to the strategy. One of the goals for the migration strategy was that it should be generalized and usable in any context where there is a previous monolith. Whether or not the migration strategy is applicable to other monoliths has not been validated, and further research on it might be necessary.
microservices , services , software architecture , service boundaries