Advertisement

From Monolith to Microservices: A Classification of Refactoring Approaches

  • Jonas FritzschEmail author
  • Justus Bogner
  • Alfred Zimmermann
  • Stefan Wagner
Conference paper
Part of the Lecture Notes in Computer Science book series (LNCS, volume 11350)

Abstract

While the recently emerged Microservices architectural style is widely discussed in literature, it is difficult to find clear guidance on the process of refactoring legacy applications. The importance of the topic is underpinned by high costs and effort of a refactoring process which has several other implications, e.g. overall processes (DevOps) and team structure. Software architects facing this challenge are in need of selecting an appropriate strategy and refactoring technique. One of the most discussed aspects in this context is finding the right service granularity to fully leverage the advantages of a Microservices architecture. This study first discusses the notion of architectural refactoring and subsequently compares 10 existing refactoring approaches recently proposed in academic literature. The approaches are classified by the underlying decomposition technique and visually presented in the form of a decision guide for quick reference. The review yielded a variety of strategies to break down a monolithic application into independent services. With one exception, most approaches are only applicable under certain conditions. Further concerns are the significant amount of input data some approaches require as well as limited or prototypical tool support.

Keywords

Microservices Monolith Modernization Refactoring Cloud Decomposition Transformation Modularization Software architecture 

References

  1. 1.
    Ahmadvand, M., Ibrahim, A.: Requirements reconciliation for scalable and secure microservice (de)composition. In: Proceedings - 2016 IEEE 24th International Requirements Engineering Conference Workshops, REW 2016, pp. 68–73 (2016)Google Scholar
  2. 2.
    Amundsen, M., et al.: Microservice Architecture. O’Reilly, California (2016)Google Scholar
  3. 3.
    Balalaie, A., et al.: Microservices migration patterns. Softw. Pract. Exp. 48(11), 2019–2042 (2018)Google Scholar
  4. 4.
    Baresi, L., Garriga, M., De Renzis, A.: Microservices identification through interface analysis. In: De Paoli, F., Schulte, S., Broch Johnsen, E. (eds.) ESOCC 2017. LNCS, vol. 10465, pp. 19–33. Springer, Cham (2017).  https://doi.org/10.1007/978-3-319-67262-5_2CrossRefGoogle Scholar
  5. 5.
    Bass, L., et al.: DevOps: A Software Architect’s Perspective. Addison-Wesley, Boston (2015)Google Scholar
  6. 6.
    Bogner, J., et al.: Analyzing the relevance of SOA patterns for microservice-based systems. In: Proceedings 10th Central European Workshop on Services and their Composition, March (2018)Google Scholar
  7. 7.
    Brereton, P., et al.: Lessons from applying the systematic literature review process within the software engineering domain. J. Syst. Softw. 80(4), 571–583 (2007)CrossRefGoogle Scholar
  8. 8.
    Brown, W., et al.: AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis. Wiley, Hoboken (1998)Google Scholar
  9. 9.
    Chen, R., et al.: From monolith to microservices: a dataflow-driven approach. In: Proceedings Asia-Pacific Software Engineering Conference APSEC, December 2017, pp. 466–475 (2018)Google Scholar
  10. 10.
    Conway, M.: Conway’s Law. http://melconway.com/Home/Conways_Law.html. Accessed 01 Oct 2018
  11. 11.
    Dietrich, J., et al.: On the detection of high-impact refactoring opportunities in programs. In: Proceedings of the Thirty-Fifth Australasian Computer Science Conference (ACSC), Melbourne (2012)Google Scholar
  12. 12.
    Escobar, D., et al.: Towards the understanding and evolution of monolithic applications as microservices. In: Proceedings of the 2016 42nd Latin American Computing Conference, CLEI (2016)Google Scholar
  13. 13.
    Evans, E.J.: Domain-Driven Design: Tackling Complexity in the Heart of Software. Addison Wesley, Boston (2003)Google Scholar
  14. 14.
    Feathers, M.: Working Effectively with Legacy Code. Prentice Hall, New Jersey (2004)CrossRefGoogle Scholar
  15. 15.
    Fowler, M., et al.: Refactoring: Improving the Design of Existing Code. Addison-Wesley Professional, Boston (1999)zbMATHGoogle Scholar
  16. 16.
    Di Francesco, P., et al.: Research on architecting microservices: trends, focus, and potential for industrial adoption. In: Proceedings - 2017 IEEE International Conference on Software Architecture, ICSA 2017, pp. 21–30 (2017)Google Scholar
  17. 17.
    Gysel, M., Kölbener, L., Giersche, W., Zimmermann, O.: Service cutter: a systematic approach to service decomposition. In: Aiello, M., Johnsen, E.B., Dustdar, S., Georgievski, I. (eds.) ESOCC 2016. LNCS, vol. 9846, pp. 185–200. Springer, Cham (2016).  https://doi.org/10.1007/978-3-319-44482-6_12CrossRefGoogle Scholar
  18. 18.
    Hassan, S., et al.: Microservice ambients: an architectural meta-modelling approach for microservice granularity. In: Proceedings - 2017 IEEE International Conference on Software Architecture, ICSA, pp. 1–10 (2017)Google Scholar
  19. 19.
    Kitchenham, B., Charters, S.: Performing systematic literature reviews in software engineering (2007)Google Scholar
  20. 20.
    Klock, S., et al.: Workload-based clustering of coherent feature sets in microservice architectures. In: Proceedings - 2017 IEEE International Conference on Software Architecture, ICSA, pp. 11–20 (2017)Google Scholar
  21. 21.
    Klose, K., et al.: Identification of services - a stakeholder-based approach to SOA development and its application in the area of production planning. In: ECIS 2007, pp. 1802–1814 (2007)Google Scholar
  22. 22.
    Krause, L.: Microservices: Patterns and Applications (2015)Google Scholar
  23. 23.
    Kwan, I., et al.: Conway’s Law Revisited: The Evidence For a Task-based Perspective. IEEE Softw. 29, 1 (2011)Google Scholar
  24. 24.
    Levcovitz, A., et al.: Towards a technique for extracting microservices from monolithic enterprise systems. In: 3rd Brazilian Workshop on Software Visualization, Evolution and Maintenance (VEM), pp. 97–104 (2015)Google Scholar
  25. 25.
    Lewis, J., Fowler, M.: Microservices - a definition of this new architectural term. http://martinfowler.com/articles/microservices.html. Accessed 01 Oct 2018
  26. 26.
    Lilienthal, C.: Langlebige Software-Architekturen: Technische Schulden Analysieren, begrenzen und abbauen. dpunkt.verlag (2017)Google Scholar
  27. 27.
    Mazlami, G., et al.: Extraction of microservices from monolithic software architectures. In: 2017 IEEE International Conference on Web Services (ICWS), pp. 524–531 (2017)Google Scholar
  28. 28.
    Mustafa, O., Gómez, J.M.: Optimizing economics of microservices by planning for granularity level. Experience Report (2017)Google Scholar
  29. 29.
    Newman, S.: Building Microservices. O’Reilly, California (2015)Google Scholar
  30. 30.
    Opdyke, W.F., Johnson, R.E.: Creating abstract superclasses by refactoring of stract classes finding matrix, February, pp. 66–73 (1993)Google Scholar
  31. 31.
    Pahl, C., Jamshidi, P.: Microservices: a systematic mapping study. In: Proceedings of the 6th International Conference on Cloud Computing and Services Science, pp. 137–146 (2016)Google Scholar
  32. 32.
    Petersen, K., et al.: Guidelines for conducting systematic mapping studies in software engineering: an update. Inf. Softw. Technol. 64, 1–18 (2015)CrossRefGoogle Scholar
  33. 33.
    Pirkelbauer, P., Dechev, D., Stroustrup, B.: Source code rejuvenation is not refactoring. In: van Leeuwen, J., Muscholl, A., Peleg, D., Pokorný, J., Rumpe, B. (eds.) SOFSEM 2010. LNCS, vol. 5901, pp. 639–650. Springer, Heidelberg (2010).  https://doi.org/10.1007/978-3-642-11266-9_53CrossRefGoogle Scholar
  34. 34.
    Procaccianti, G., et al.: Towards a MicroServices Architecture for Clouds. VU University Amsterdam (2016)Google Scholar
  35. 35.
    Rademacher, F., et al.: Differences between model-driven development of service-oriented and microservice architecture (SOA vs. MSA). In: 2017 IEEE International Conference on Software Architecture Workshops (ICSAW), pp. 38–45 (2017)Google Scholar
  36. 36.
    Richardson, C.: Microservice architecture. http://microservices.io/patterns. Accessed 01 Oct 2018
  37. 37.
    Richardson, C.: Microservice Patterns. Manning, New York (2017)Google Scholar
  38. 38.
    De Santana, A.M., et al.: Relationships between communication structure and software architecture: an empirical investigation of the Conway’s Law at the Federal University of Pernambuco. In: Proceedings - 2013 3rd International Work. Replication Empirical Software Engineering Research, pp. 34–42 (2013)Google Scholar
  39. 39.
    Sneed, H.M., Seidl, R.: Softwareevolution - Erhaltung und Fortschreibung bestehender Softwaresysteme. dpunkt.verlag (2013)Google Scholar
  40. 40.
    Wohlin, C.: Guidelines for snowballing in systematic literature studies and a replication in software engineering. In: Proceedings 18th International Conference Evaluation and Assessment in Software Engineering - EASE 2014, pp. 1–10 (2014)Google Scholar
  41. 41.
    Zimmermann, O.: Architectural refactoring: a task-centric view on software evolution. IEEE Softw. 32(2), 26–29 (2015)CrossRefGoogle Scholar

Copyright information

© Springer Nature Switzerland AG 2019

Authors and Affiliations

  • Jonas Fritzsch
    • 1
    Email author
  • Justus Bogner
    • 2
  • Alfred Zimmermann
    • 2
  • Stefan Wagner
    • 1
  1. 1.Institute of Software Technology, University of StuttgartStuttgartGermany
  2. 2.Reutlingen University of Applied Sciences‎ReutlingenGermany

Personalised recommendations