Skip to main content
Log in

Design principles, architectural smells and refactorings for microservices: a multivocal review

  • Special Issue Paper
  • Published:
SICS Software-Intensive Cyber-Physical Systems

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.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Institutional subscriptions

Fig. 1
Fig. 2
Fig. 3
Fig. 4
Fig. 5

Similar content being viewed by others

Notes

  1. For the sake of clarity, in the taxonomy we follow the naming of integration patterns proposed by Hohpe and Woolf [22].

  2. The detailed classification, displaying each occurrence of each refactoring, is publicly available at https://github.com/di-unipi-socc/microservices-smells-and-refactorings.

  3. 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.

  4. http://github.com/di-unipi-socc/microservices-smells-and-refactorings.

References

  1. Alagarasan V (2015) Seven microservices anti-patterns. InfoQ. https://www.infoq.com/articles/seven-uservices-antipatterns. Accessed 5 June 2019

  2. 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

  3. 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

    Article  Google Scholar 

  4. 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

    Article  Google Scholar 

  5. Bhojwani R (2018) Design patterns for microservices. DZone. https://dzone.com/articles/design-patterns-for-microservices. Accessed 5 June 2019

  6. 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)

  7. Bonér J (2016) Reactive microservice architecture: design principles for distributed systems. O’Reilly, Newton

    Google Scholar 

  8. Carneiro C, Schmelmer T (2016) Microservices from day one: build robust and scalable software from the start, 1st edn. Apress, Berkeley

    Book  Google Scholar 

  9. Carnell J (2017) Spring microservices in action, 1st edn. Manning Publications Co., New York

    Google Scholar 

  10. 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

  11. 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

  12. 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

  13. 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

    Article  Google Scholar 

  14. 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

  15. 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

  16. 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

    Article  Google Scholar 

  17. 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

  18. 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

  19. 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

  20. 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

  21. 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

  22. Hohpe G, Woolf B (2003) Enterprise integration patterns: designing, building, and deploying messaging solutions. Addison-Wesley, Longman, London

    Google Scholar 

  23. Indrasiri K (2016) Microservices in practice: from architecture to deployment. DZone. https://dzone.com/articles/microservices-in-practice-1. Accessed 5 June 2019

  24. Indrasiri K, Siriwardena P (2018) Microservices for the enterprise: designing, developing, and deploying, 1st edn. Apress, Berkeley

    Book  Google Scholar 

  25. 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

    Article  Google Scholar 

  26. 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

    Chapter  Google Scholar 

  27. 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

    Article  Google Scholar 

  28. Krause L (2015) Microservices: patterns and applications, 1st edn. Microservicesbook.io

  29. Kruchten P (1995) The 4+1 view model of architecture. IEEE Softw 12(6):42–50. https://doi.org/10.1109/52.469759

    Article  Google Scholar 

  30. 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

  31. 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

  32. 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

  33. Nadareishvili I, Mitra R, McLarty M, Amundsen M (2016) Microservice architecture: aligning principles, practices, and culture, 1st edn. O’Reilly, Newton

    Google Scholar 

  34. Newman S (2015) Building microservices, 1st edn. O’Reilly, Newton

    Google Scholar 

  35. Nygard M (2018) Release it!: Design and deploy production-ready software, 2nd edn. Pragmatic Bookshelf

  36. 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

  37. 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

  38. 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

  39. 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

    Article  Google Scholar 

  40. 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

  41. Richards M (2016) Microservices antipatterns and pitfalls, 1st edn. O’Reilly Media, Inc., Newton

    Google Scholar 

  42. Richardson C (2014) Microservices: decomposing applications for deployability and scalability. InfoQ. https://www.infoq.com/articles/microservices-intro. Accessed 5 June 2019

  43. Richardson C (2018) Microservices patterns, 1st edn. Manning Publications, New York

    Google Scholar 

  44. 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

  45. Saleh T (2016) Microservices antipatterns. InfoQ. https://www.infoq.com/presentations/cloud-anti-patterns. Accessed 5 June 2019

  46. 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

  47. 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

    Article  Google Scholar 

  48. 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

  49. 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

    Article  Google Scholar 

  50. 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

    Article  Google Scholar 

  51. 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

  52. Wohlin C, Runeson P, Höst M, Ohlsson MC, Regnell B, Wesslén A (2000) Experimentation in software engineering: an introduction. Kluwer, Dordrecht

    Book  Google Scholar 

  53. Wolff E (2016) Microservices: flexible software architecture, 1st edn. Addison-Wesley, Reading

    Google Scholar 

  54. 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

    Article  MathSciNet  Google Scholar 

  55. Zimmermann O (2017) Microservices tenets. Comput Sci Res Dev 32(3–4):301–310. https://doi.org/10.1007/s00450-016-0337-0

    Article  Google Scholar 

  56. 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

Download references

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

Authors

Corresponding author

Correspondence to Davide Neri.

Rights and permissions

Reprints and permissions

About this article

Check for updates. Verify currency and authenticity via CrossMark

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

Download citation

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s00450-019-00407-8

Keywords

Navigation