Abstract
Potential benefits such as agile service delivery have led many companies to deliver their business capabilities through microservices. Bad smells are however always around the corner, as witnessed by the considerable body of literature discussing architectural smells that possibly violate the design principles of microservices. In this paper, we systematically review the white and grey literature on the topic, in order to identify the most recognised architectural smells for microservices and to discuss the architectural refactorings allowing to resolve them.
Similar content being viewed by others
Notes
For the sake of clarity, in the taxonomy we follow the naming of integration patterns proposed by Hohpe and Woolf [22].
The detailed classification, displaying each occurrence of each refactoring, is publicly available at https://github.com/di-unipi-socc/microservices-smells-and-refactorings.
We measure the weight of a refactoring as the percentage of its occurrences among all occurrences of all refactorings for the same smell. This is analogous to what done by Pahl et al. [37] to measure weights while classifying studies on cloud container technologies.
References
Alagarasan V (2015) Seven microservices anti-patterns. InfoQ. https://www.infoq.com/articles/seven-uservices-antipatterns. Accessed 5 June 2019
Alshuqayran N, Ali N, Evans R (2016) A systematic mapping study in microservice architecture. In: 2016 IEEE 9th international conference on service-oriented computing and applications (SOCA), pp 44–51. https://doi.org/10.1109/SOCA.2016.15
Balalaie A, Heydarnoori A, Jamshidi P (2016) Microservices architecture enables devops: migration to a cloud-native architecture. IEEE Softw 33(3):42–52. https://doi.org/10.1109/MS.2016.64
Balalaie A, Heydarnoori A, Jamshidi P, Tamburri DA, Lynn T (2018) Microservices migration patterns. Softw Pract Exp 48(11):2019–2042. https://doi.org/10.1002/spe.2608
Bhojwani R (2018) Design patterns for microservices. DZone. https://dzone.com/articles/design-patterns-for-microservices. Accessed 5 June 2019
Bogner J, Boceck T, Popp M, Tschechlov D, Wagner S, Zimmermann A (2019) Towards a collaborative repository for the documentation of service-based antipatterns and bad smells. In: 2019 IEEE international conference on software architecture workshops (ICSAW) (in press)
Bonér J (2016) Reactive microservice architecture: design principles for distributed systems. O’Reilly, Newton
Carneiro C, Schmelmer T (2016) Microservices from day one: build robust and scalable software from the start, 1st edn. Apress, Berkeley
Carnell J (2017) Spring microservices in action, 1st edn. Manning Publications Co., New York
Carrasco A, Bladel B, Demeyer S (2018) Migrating towards microservices: migration and architecture smells. In: Proceedings of the 2nd international workshop on refactoring, IWoR 2018. ACM, pp 1–6. https://doi.org/10.1145/3242163.3242164
Dall R (2016) Performance patterns in microservices-based integrations. DZone. https://dzone.com/articles/performance-patterns-in-microservices-based-integr-1. Accessed 5 June 2019
Di Francesco P, Lago P, Malavolta I (2018) Migrating towards microservice architectures: an industrial survey. In: 2018 IEEE international conference on software architecture (ICSA), pp 29–38. https://doi.org/10.1109/ICSA.2018.00012
Di Francesco P, Lago P, Malavolta I (2019) Architecting with microservices: a systematic mapping study. J Syst Softw 150:77–97. https://doi.org/10.1016/j.jss.2019.01.001
Di Francesco P, Malavolta I, Lago P (2017) Research on architecting microservices: trends, focus, and potential for industrial adoption. In: 2017 IEEE international conference on software architecture (ICSA), pp 21–30. https://doi.org/10.1109/ICSA.2017.24
Dragoni N, Giallorenzo S, Lafuente AL, Mazzara M, Montesi F, Mustafin R, Safina L (2017) Microservices: yesterday, today, and tomorrow. Springer, Berlin, pp 195–216. https://doi.org/10.1007/978-3-319-67425-4_12
Furda A, Fidge C, Zimmermann O, Kelly W, Barros A (2018) Migrating enterprise legacy source code to microservices: on multitenancy, statefulness, and data consistency. IEEE Softw 35(3):63–72. https://doi.org/10.1109/MS.2017.440134612
Garousi V, Felderer M, Mäntylä MV (2016) The need for multivocal literature reviews in software engineering: complementing systematic literature reviews with grey literature. In: Proceedings of the 20th international conference on evaluation and assessment in software engineering (EASE’16). ACM, pp 26:1–26:6. https://doi.org/10.1145/2915970.2916008
Gehani N (2018) Want to develop great microservices? Reorganize your team. TechBeacon. https://techbeacon.com/app-dev-testing/want-develop-great-microservices-reorganize-your-team. Accessed 5 June 2019
Ghofrani J, Lübke D (2018) Challenges of microservices architecture: a survey on the state of the practice. In: Proceedings of the 10th workshop on services and their composition (ZEUS 2018). CEUR-WS.org, pp 1–8
Golden B (2017) 5 fundamentals to a successful microservice design. TechBeacon. https://techbeacon.com/app-dev-testing/5-fundamentals-successful-microservice-design. Accessed 5 June 2019
Golden B (2018) Creating a microservice: design first, code later. TechBeacon. https://techbeacon.com/app-dev-testing/creating-microservice-design-first-code-later. Accessed 5 June 2019
Hohpe G, Woolf B (2003) Enterprise integration patterns: designing, building, and deploying messaging solutions. Addison-Wesley, Longman, London
Indrasiri K (2016) Microservices in practice: from architecture to deployment. DZone. https://dzone.com/articles/microservices-in-practice-1. Accessed 5 June 2019
Indrasiri K, Siriwardena P (2018) Microservices for the enterprise: designing, developing, and deploying, 1st edn. Apress, Berkeley
Jamshidi P, Pahl C, Mendonca N, Lewis J, Tilkov S (2018) Microservices: the journey so far and challenges ahead. IEEE Softw 35(3):24–35. https://doi.org/10.1109/MS.2018.2141039
Kalske M, Mäkitalo N, Mikkonen T (2018) Challenges when moving from monolith to microservice architecture. In: Garrigós I, Wimmer M (eds) Current trends in web engineering. Springer, Berlin, pp 32–47
Knoche H, Hasselbring W (2018) Using microservices for legacy software modernization. IEEE Softw 35(3):44–49. https://doi.org/10.1109/MS.2018.2141035
Krause L (2015) Microservices: patterns and applications, 1st edn. Microservicesbook.io
Kruchten P (1995) The 4+1 view model of architecture. IEEE Softw 12(6):42–50. https://doi.org/10.1109/52.469759
Lewis J, Fowler M (2014) Microservices: a definition of this new architectural term. ThoughtWorks. https://www.martinfowler.com/articles/microservices.html. Accessed 5 June 2019
Long J (2015) The power, patterns, and pains of microservices. DZone. https://dzone.com/articles/the-power-patterns-and-pains-of-microservices. Accessed 5 June 2019
Meléndez C (2018) 7 container design patterns you need to know. TechBeacon. https://techbeacon.com/enterprise-it/7-container-design-patterns-you-need-know. Accessed 5 June 2019
Nadareishvili I, Mitra R, McLarty M, Amundsen M (2016) Microservice architecture: aligning principles, practices, and culture, 1st edn. O’Reilly, Newton
Newman S (2015) Building microservices, 1st edn. O’Reilly, Newton
Nygard M (2018) Release it!: Design and deploy production-ready software, 2nd edn. Pragmatic Bookshelf
OASIS: TOSCA Simple Profile in YAML (2014) http://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.0/TOSCA-Simple-Profile-YAML-v1.0.pdf. Accessed 5 June 2019
Pahl C, Brogi A, Soldani J, Jamshidi P (2017) Cloud container technologies: a state-of-the-art review. IEEE Trans Cloud Comput. https://doi.org/10.1109/TCC.2017.2702586
Pahl C, Jamshidi P (2016) Microservices: A systematic mapping study. In: Proceedings of the 6th international conference on cloud computing and services science, Volume 1 and 2 (CLOSER 2016). SCITEPRESS, pp 137–146. https://doi.org/10.5220/0005785501370146
Pautasso C, Zimmermann O, Amundsen M, Lewis J, Josuttis NM (2017) Microservices in practice, part 1: reality check and service design. IEEE Softw 34(1):91–98. https://doi.org/10.1109/MS.2017.24
Petersen K, Feldt R, Mujtaba S, Mattsson M (2008) Systematic mapping studies in software engineering. In: Proceedings of the 12th international conference on evaluation and assessment in software engineering (EASE’08). BCS Learning & Development Ltd, pp 68–77
Richards M (2016) Microservices antipatterns and pitfalls, 1st edn. O’Reilly Media, Inc., Newton
Richardson C (2014) Microservices: decomposing applications for deployability and scalability. InfoQ. https://www.infoq.com/articles/microservices-intro. Accessed 5 June 2019
Richardson C (2018) Microservices patterns, 1st edn. Manning Publications, New York
Ruecker B (2018) 3 common pitfalls of microservices integration and how to avoid them. InfoWorld. https://www.infoworld.com/article/3254777/3-common-pitfalls-of-microservices-integrationand-how-to-avoid-them.html. Accessed 5 June 2019
Saleh T (2016) Microservices antipatterns. InfoQ. https://www.infoq.com/presentations/cloud-anti-patterns. Accessed 5 June 2019
Savchenko D, Radchenko G, Taipale O (2015) Microservices validation: Mjolnirr platform case study. In: 2015 38th International convention on information and communication technology, electronics and microelectronics (MIPRO), pp 235–240. https://doi.org/10.1109/MIPRO.2015.7160271
Soldani J, Tamburri DA, Van Den Heuvel WJ (2018) The pains and gains of microservices: a systematic grey literature review. J Syst Softw 146:215–232. https://doi.org/10.1016/j.jss.2018.09.082
Stocker M, Zimmermann O, Lübke D, Zdun U, Pautasso C (2018) Interface quality patterns—communicating and improving the quality of microservices APIs. In: 23rd European conference on pattern languages of programs 2018
Taibi D, Lenarduzzi V (2018) On the definition of microservice bad smells. IEEE Softw 35(3):56–62. https://doi.org/10.1109/MS.2018.2141031
Taibi D, Lenarduzzi V, Pahl C (2017) Processes, motivations, and issues for migrating to microservices architectures: an empirical investigation. IEEE Cloud Comput 4(5):22–32. https://doi.org/10.1109/MCC.2017.4250931
Taibi D, Lenarduzzi V, Pahl C (2018) Architectural patterns for microservices: a systematic mapping study. In: Proceedings of the 8th international conference on cloud computing and services science—volume 1: CLOSER. SciTePress, pp 221–232. https://doi.org/10.5220/0006798302210232
Wohlin C, Runeson P, Höst M, Ohlsson MC, Regnell B, Wesslén A (2000) Experimentation in software engineering: an introduction. Kluwer, Dordrecht
Wolff E (2016) Microservices: flexible software architecture, 1st edn. Addison-Wesley, Reading
Zimmermann O (2017) Architectural refactoring for the cloud: a decision-centric view on cloud migration. Computing 99(2):129–145. https://doi.org/10.1007/s00607-016-0520-y
Zimmermann O (2017) Microservices tenets. Comput Sci Res Dev 32(3–4):301–310. https://doi.org/10.1007/s00450-016-0337-0
Zimmermann O, Stocker M, Lübke D, Zdun U (2017) Interface representation patterns—crafting and consuming message-based remote APIs. In: 22nd European conference on pattern languages of programs (EuroPLoP 2017), pp 1–36. https://doi.org/10.1145/3147704.3147734
Acknowledgements
This work was partly funded by the POR-FSE project AMaCA (Regione Toscana), and by the project DECLware (PRA_2018_66, University of Pisa).
Author information
Authors and Affiliations
Corresponding author
Rights and permissions
About this article
Cite this article
Neri, D., Soldani, J., Zimmermann, O. et al. Design principles, architectural smells and refactorings for microservices: a multivocal review. SICS Softw.-Inensiv. Cyber-Phys. Syst. 35, 3–15 (2020). https://doi.org/10.1007/s00450-019-00407-8
Published:
Issue Date:
DOI: https://doi.org/10.1007/s00450-019-00407-8