Microservices Identification in Monolith Systems: Functionality Redesign Complexity and Evaluation of Similarity Measures
Keywords:Microservices Architecture, Microservices Identification, Static Code Analysis, Software Architecture
As monolithic applications grow in size and complexity, they tend to show symptoms of monolithic hell, such as scalability and maintainability problems. To help suppressing these problems, the microservices architectural style is applied. However, identifying the services within the monolith is not an easy task, and current research approaches emphasize different qualities of microservices. In this paper we present an approach for the automatic identification of microservices, which minimizes the cost of the monolith’s functionalities redesign. The decompositions are generated based on similarity measures between the persistent domain entities of the monolith. An extensive analysis of the decompositions generated for 121 monolith systems is done. As result of the analysis we conclude that there is not a similarity measure, neither a combination of similarity measures, that provides better decomposition results in terms of complexity associated with the functionalities migration. However, we prove that it is possible to follow an incremental migration process of monoliths. Additionally, we conclude that there is a positive correlation between coupling and complexity, and that it is not possible to conclude on the existence of a correlation between cohesion and complexity.
M. Ahmadvand and A. Ibrahim. Requirements reconciliation for scalable and secure microservice (de)composition. In 2016 IEEE 24th International Requirements Engineering Conference Workshops (REW), pages 68–73, Sep. 2016.
O. Al-Debagy and P. Martinek. A metrics framework for evaluating microservices architecture designs. Journal of Web Engineering, 19(3–4):341–370, 2020.
M. J. Amiri. Object-aware identification of microservices. In 2018 IEEE International Conference on Services Computing (SCC), pages 253–256, 2018.
Luciano Baresi, Martin Garriga, and Alan De Renzis. Microservices identification through interface analysis. In Flavio De Paoli, Stefan Schulte, and Einar Broch Johnsen, editors, Service-Oriented and Cloud Computing, pages 19–33, Cham, 2017. Springer International Publishing.
Justus Bogner, Stefan Wagner, and Alfred Zimmermann. Automatically measuring the maintainability of service- and microservice-based systems: A literature review. In Proceedings of the 27th International Workshop on Software Measurement and 12th International Conference on Software Process and Product Measurement, IWSM Mensura ’17, page 107–115, New York, NY, USA, 2017. Association for Computing Machinery.
João Cachopo and António Rito-Silva. Combining software transactional memory with a domain modeling language to simplify web application development. In Proceedings of the 6th International Conference on Web Engineering, ICWE ’06, page 297–304, New York, NY, USA, 2006. Association for Computing Machinery.
Andrés Carrasco, Brent van Bladel, and Serge Demeyer. Migrating towards microservices: Migration and architecture smells. In Proceedings of the 2nd International Workshop on Refactoring, IWoR 2018, page 1–6, New York, NY, USA, 2018. Association for Computing Machinery.
Mohamed Daoud, Asmae El Mezouari, Noura Faci, Djamal Benslimane, Zakaria Maamar, and Aziz El Fazziki. Automatic microservices identification from a set of business processes. In Mohamed Hamlich, Ladjel Bellatreche, Anirban Mondal, and Carlos Ordonez, editors, Smart Applications and Data Analysis, pages 299–315, Cham, 2020. Springer International Publishing.
L. De Lauretis. From monolithic architecture to microservices architecture. In 2019 IEEE International Symposium on Software Reliability Engineering Workshops (ISSREW), pages 93–96, 2019.
N. Ford, R. Parsons, and P. Kua. Building Evolutionary Architectures. O’Reilly, 1 edition, 10 2017.
Martin Fowler and James Lewis. Microservices a definition of this new architectural term. URL: http://martinfowler.com/articles/microservices.html, page 22, 2014.
Armando Fox and Eric A. Brewer. Harvest, yield, and scalable tolerant systems. In Proceedings of the The Seventh Workshop on Hot Topics in Operating Systems, HOTOS ’99, page 174, USA, 1999. IEEE Computer Society.
Jonas Fritzsch, Justus Bogner, Alfred Zimmermann, and Stefan Wagner. From monolith to microservices: A classification of refactoring approaches. In Jean-Michel Bruel, Manuel Mazzara, and Bertrand Meyer, editors, Software Engineering Aspects of Continuous Development and New Paradigms of Software Production and Deployment, pages 128–141, Cham, 2019. Springer International Publishing.
Hector Garcia-Molina and Kenneth Salem. Sagas. SIGMOD Rec., 16(3):249–259, December 1987.
M. H. Gomes Barbosa and P. H. M. Maia. Towards identifying microservice candidates from business rules implemented in stored procedures. In 2020 IEEE International Conference on Software Architecture Companion (ICSA-C), pages 41–48, 2020.
Michael Gysel, Lukas Kölbener, Wolfgang Giersche, and Olaf Zimmermann. Service cutter: A systematic approach to service decomposition. In Marco Aiello, Einar Broch Johnsen, Schahram Dustdar, and Ilche Georgievski, editors, Service-Oriented and Cloud Computing, pages 185–200, Cham, 2016. Springer International Publishing.
S. Hassan and R. Bahsoon. Microservices and their design trade-offs: A self-adaptive roadmap. In 2016 IEEE International Conference on Services Computing (SCC), pages 813–818, June 2016.
Mamoun Hirzalla, Jane Cleland-Huang, and Ali Arsanjani. A metrics suite for evaluating flexibility and complexity in service oriented architectures. In George Feuerlicht and Winfried Lamersdorf, editors, Service-Oriented Computing – ICSOC 2008 Workshops, pages 41–52, Berlin, Heidelberg, 2009. Springer Berlin Heidelberg.
W. Jin, T. Liu, Y. Cai, R. Kazman, R. Mo, and Q. Zheng. Service candidate identification from monolithic systems based on execution traces. IEEE Transactions on Software Engineering, pages 1–1, 2019.
Wuxia Jin, Ting Liu, Yuanfang Cai, Rick Kazman, Ran Mo, and Qinghua Zheng. Service candidate identification from monolithic systems based on execution traces. IEEE Transactions on Software Engineering, 2019.
Mike Keith and Merrick Schincariol. Pro EJB 3: Java Persistence API. Apress, 2006.
S. Klock, J. M. E. M. V. D. Werf, J. P. Guelen, and S. Jansen. Workload-based clustering of coherent feature sets in microservice architectures. In 2017 IEEE International Conference on Software Architecture (ICSA), pages 11–20, April 2017.
Glenn E. Krasner and Stephen T. Pope. A cookbook for using the model-view controller user interface paradigm in smalltalk-80. J. Object Oriented Program., 1(3):26–49, August 1988.
Philippe Lalanda. Shared repository pattern. In Proc. 5th Annual Conference on the Pattern Languages of Programs. Citeseer, 1998.
Genc Mazlami, Jürgen Cito, and Philipp Leitner. Extraction of microservices from monolithic software architectures. In Web Services (ICWS), 2017 IEEE International Conference on, pages 524–531. IEEE, 2017.
R. Nakazawa, T. Ueda, M. Enoki, and H. Horii. Visualization tool for designing microservices with the monolith-first approach. In 2018 IEEE Working Conference on Software Visualization (VISSOFT), pages 32–42, Sep. 2018.
Luís Fernando Ambrósio Nunes, Nuno Alexandre Vieira Santos, and António Rito Silva. From a monolith to a microservices architecture: An approach based on transactional contexts. In European Conference on Software Architecture (ECSA), volume 11681 of LNCS, pages 37–52. Springer International Publishing, September 2019.
Charlene O’Hanlon. A conversation with werner vogels. Queue, 4(4):14–22, May 2006.
Renaud Pawlak, Martin Monperrus, Nicolas Petitprez, Carlos Noguera, and Lionel Seinturier. Spoon: A library for implementing analyses and transformations of Java source code. Software: Practice and Experience, 46(9):1155–1179, 2016.
M. Perepletchikov, C. Ryan, K. Frampton, and Z. Tari. Coupling metrics for predicting maintainability in service-oriented designs. In 2007 Australian Software Engineering Conference (ASWEC’07), pages 329–340, 2007.
F. Ponce, G. Márquez, and H. Astudillo. Migrating from monolithic architecture to microservices: A rapid review. In 2019 38th International Conference of the Chilean Computer Science Society (SCCC), pages 1–7, 2019.
Zhongshan Ren, Wei Wang, Guoquan Wu, Chushu Gao, Wei Chen, Jun Wei, and Tao Huang. Migrating web applications from monolithic structure to microservices architecture. In Proceedings of the Tenth Asia-Pacific Symposium on Internetware, Internetware ’18, New York, NY, USA, 2018. Association for Computing Machinery.
Chris Richardson. Microservices patterns with examples in java. URL: https://www.manning.com/books/microservices-patterns, 2018.
Nuno Santos and António Rito Silva. A complexity metric for microservices architecture migration. In 2020 IEEE International Conference on Software Architecture (ICSA), pages 169–178. IEEE, 2020.
A. Selmadji, A. Seriai, H. L. Bouziane, R. Oumarou Mahamane, P. Zaragoza, and C. Dony. From monolithic architecture style to microservice one based on a semi-automatic approach. In 2020 IEEE International Conference on Software Architecture (ICSA), pages 157–168, 2020.
D. Taibi and V. Lenarduzzi. On the definition of microservice bad smells. IEEE Software, 35(3):56–62, 2018.
Shmuel Tyszberowicz, Robert Heinrich, Bo Liu, and Zhiming Liu. Identifying microservices using functional decomposition. In Xinyu Feng, Markus Müller-Olm, and Zijiang Yang, editors, Dependable Software Engineering. Theories, Tools, and Applications, pages 50–65, Cham, 2018. Springer International Publishing.
Zhihua Wen and Vassilios Tzerpos. An effectiveness measure for software clustering algorithms. In Proceedings. 12th IEEE International Workshop on Program Comprehension, 2004., pages 194–203. IEEE, 2004.
Y. Zhang, B. Liu, L. Dai, K. Chen, and X. Cao. Automated microservice identification in legacy systems with functional and non-functional metrics. In 2020 IEEE International Conference on Software Architecture (ICSA), pages 135–145, 2020.