Abstract
The microservices architectural style is rising fast, and many companies use this style to structure their systems. A big challenge in designing this architecture is to find an appropriate partition of the system into microservices. Microservices are usually designed intuitively, based on the experience of the designers. We describe a systematic approach to identify microservices in early design phase which is based on the specification of the system’s functional requirements and that uses functional decomposition. To evaluate our approach, we have compared microservices implementations by three independent teams to the decomposition provided by our approach. The evaluation results show that our decomposition is comparable to manual design, yet within a much shorter time frame.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Similar content being viewed by others
Notes
- 1.
The list of verbs that we have found may be updated as some verbs may not be system operations, others may not be mentioned in the informal description, and some verbs are synonyms, hence they describe the same operation.
- 2.
A brain storming is needed to handle issues such as synonyms, irrelevant nouns, etc.
- 3.
A clustering of a graph G consists of a partition of the node set of G.
- 4.
For the implementations see https://github.com/cocome-community-case-study.
- 5.
The implementation created by this group of students can be found in http://cocome.swu-rise.net.cn/.
References
Abbott, R.J.: Program design by informal english descriptions. Commun. ACM 26(11), 882–894 (1983)
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_2
Chen, X., He, J., Liu, Z., Zhan, N.: A model of component-based programming. In: Arbab, F., Sirjani, M. (eds.) FSEN 2007. LNCS, vol. 4767, pp. 191–206. Springer, Heidelberg (2007). https://doi.org/10.1007/978-3-540-75698-9_13
Chen, Z., et al.: Refinement and verification in component-based model-driven design. Sci. Comput. Program. 74(4), 168–196 (2009)
Cockburn, A.: Writing Effective Use Cases. Addison-Wesley, Boston (2000)
de la Torre, C., et al.: .NET Microservices: Architecture for Containerized .NET Applications. Microsoft (2017)
De Santis, S., et al.: Evolve the Monolith to Microservices with Java and Node. IBM Redbooks, Armonk (2016)
Doval, D., Mancoridis, S., Mitchell, B.S.: Automatic clustering of software systems using a genetic algorithm. In: STEP, pp. 73–81. IEEE (1999)
Dragoni, N., et al.: Microservices: yesterday, today, and tomorrow. Present and Ulterior Software Engineering, pp. 195–216. Springer, Cham (2017). https://doi.org/10.1007/978-3-319-67425-4_12
Evans, E.: Domain Driven Design: Tackling Complexity in the Heart of Business Software. Addison-Wesley, Boston (2004)
Faitelson, D., Tyszberowicz, S.: Improving design decomposition. Form. Asp. Comput. 22(1), 5:1–5:38 (2017)
Fowler, M.: MonolithFirst (2015). https://martinfowler.com/bliki/MonolithFirst.html#footnote-typical-monolith. Accessed Mar 2018
Francesco, P.D., et al.: Research on architecting microservices: trends, focus, and potential for industrial adoption. In: ICSA, pp. 21–30. IEEE (2017)
Hassan, M., Zhao, W., Yang, J.: Provisioning web services from resource constrained mobile devices. In: IEEE CLOUD, pp. 490–497 (2010)
Hassan, S., Bahsoon, R.: Microservices and their design trade-offs: a self-adaptive roadmap. In: SCC, pp. 813–818. IEEE (2016)
Hassan, S., et al.: Microservice ambients: an architectural meta-modelling approach for microservice granularity. In: ICSA, pp. 1–10. IEEE (2017)
Hasselbring, W., Steinacker, G.: Microservice architectures for scalability, agility and reliability in E-Commerce. In: ICSA Workshops, pp. 243–246. IEEE (2017)
Heinrich, R., et al.: A platform for empirical research on information system evolution. In: SEKE, pp. 415–420 (2015)
Heinrich, R., et al.: The CoCoME platform for collaborative empirical research on information system evolution. Technical report 2016:2, KIT, Germany (2016)
Heinrich, R., et al.: Performance engineering for microservices: research challenges and directions. In: Companion Proceedings of ICPE, pp. 223–226 (2017)
Jacobson, I., et al.: Object-Oriented Software Engineering - A Use Case Driven Approach. Addison-Wesley, Boston (1992)
Larman, C.: Applying UML and Patterns, 3rd edn. Prentice Hall, Upper Saddle River (2004)
Lehman, M.M.: On understanding laws, evolution, and conservation in the large-program life cycle. J. Syst. Softw. 1, 213–221 (1980)
Lewis, J., Fowler, M.: Microservices. https://martinfowler.com/articles/microservices.html. Accessed Apr 2018
Li, X., Liu, Z., Schäf, M., Yin, L.: AutoPA: automatic prototyping from requirements. In: Margaria, T., Steffen, B. (eds.) ISoLA 2010. LNCS, vol. 6415, pp. 609–624. Springer, Heidelberg (2010). https://doi.org/10.1007/978-3-642-16558-0_49
Mancoridis, S., et al.: Bunch: a clustering tool for the recovery and maintenance of software system structures. In: ICSM, pp. 50–59. IEEE Computer Society (1999)
Martin, R.C.: Agile Software Development: Principles, Patterns, and Practices. Prentice Hall, Upper Saddle River (2003)
Namiot, D., Sneps-Sneppe, M.: On micro-services architecture. J. Open Inf. Technol. 2(9), 24–27 (2014)
Newman, S.: Building Microservices. O’Reilly, Sebastopol (2015)
North, S.C.: Drawing graphs with NEATO. User Manual (2004)
Raman, A., Tyszberowicz, S.S.: The EasyCRC tool. In: ICSEA, pp. 52–57. IEEE (2007)
Rausch, A., Reussner, R., Mirandola, R., Plášil, F. (eds.): The Common Component Modeling Example: Comparing Software Component Models. LNCS, vol. 5153. Springer, Heidelberg (2008). https://doi.org/10.1007/978-3-540-85289-6
Reussner, R.H., et al.: Modeling and Simulating Software Architectures - The Palladio Approach. MIT Press, Cambridge (2016)
Richardson, C.: Microservices from design to deployment (2016). https://www.nginx.com/blog/microservices-from-design-to-deployment-ebook-nginx/
Rostami, K., Stammel, J., Heinrich, R., Reussner, R.: Architecture-based assessment and planning of change requests. In: QoSA, pp. 21–30 (2015)
Sommer, N.: Erweiterung und Wartung einer Cloud-basierten JEE-Architektur (in German), report of a practical course. Technical report, KIT, Germany (2017)
Vogels, W.: Eventually consistent. Commun. ACM 52(1), 40–44 (2009)
Yanaga, E.: Migrating to Microservice Databases: From Relational Monolith to Distributed Data. O’Reilly, Sebastopol (2017). E-book
Text analysis. http://textanalysisonline.com/textblob-noun-phrase-extraction. Accessed Apr 2018
Acknowledgment
This work was supported by the DFG (German Research Foundation) under the Priority Programme SPP1593, and the Key Laboratory of Safety-Critical Software (Nanjing University of Aeronautics and Astronautics) under the Open Foundation with No. NJ20170007. We would like to thank Kang Cheng, Guohang Guo, Yukun Zhang, Nils Sommer, and Stephan Engelmann who worked on the development of the various CoCoME systems. We also thank the anonymous reviewers for their careful reading and their many insightful comments and suggestions. Their comments helped to improve and clarify this paper.
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2018 Springer Nature Switzerland AG
About this paper
Cite this paper
Tyszberowicz, S., Heinrich, R., Liu, B., Liu, Z. (2018). Identifying Microservices Using Functional Decomposition. In: Feng, X., Müller-Olm, M., Yang, Z. (eds) Dependable Software Engineering. Theories, Tools, and Applications. SETTA 2018. Lecture Notes in Computer Science(), vol 10998. Springer, Cham. https://doi.org/10.1007/978-3-319-99933-3_4
Download citation
DOI: https://doi.org/10.1007/978-3-319-99933-3_4
Published:
Publisher Name: Springer, Cham
Print ISBN: 978-3-319-99932-6
Online ISBN: 978-3-319-99933-3
eBook Packages: Computer ScienceComputer Science (R0)