Abstract
This work discusses lessons learned from the development of a medium-size peer-to-peer distributed software system centered around asynchronous computation and message-/stream-oriented communication. Albeit foreign to traditional high-integrity systems, these architectural characteristics are making rapid headway into large-scale mission-critical and business-critical software infrastructures, thus becoming candidate solutions for the design of reliable systems. We wanted our software architecture to be agile, that is, versatile, easy to evolve and modify, and resilient enough not to degrade across changes. To meet this goal, we adopted the microservices style, which afforded us the choice of best-of-breed technology to implement the individual system parts. Embracing heterogeneity while seeking agility however challenged our ability to design effective solutions for component coordination and interaction, as well as the goodness of fit of the used technologies for system integration and testing. Reflecting on our experience, we distill the lessons we learned in terms of architectural patterns, highlighting the pros and cons we saw in the microservices style and in our technologies selection.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Notes
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
A Docker Engine is the OS-level service which handles the container runtime.
- 9.
- 10.
- 11.
References
Vashi, S., Ram, J., Modi, J., Verma, S., Prakash, C.: Internet of things (IoT): a vision, architectural elements, and security issues. In: 2017 International Conference on I-SMAC (IoT in Social, Mobile, Analytics and Cloud) (I-SMAC), pp. 492–496, February 2017
Charette, R.N.: Why software fails [software failure]. IEEE Spectr. 42(9), 42–49 (2005). https://doi.org/10.1109/MSPEC.2005.1502528
Blair, M., Obenski, S., Bridickas, P.: Patriot missile defense: Software problem led to system failure at Dhahran. Report GAO/IMTEC-92-26 (1992)
Myers, G.J., Sandler, C., Badgett, T.: The Art of Software Testing. Wiley, New York (2011)
Beck, K.: Extreme Programming Explained: Embrace Change. Addison-Wesley Professional, Boston (2000)
Beck, K.: Test-Driven Development: By Example. Addison-Wesley Professional, Boston (2003)
Bass, L., Weber, I., Zhu, L.: DevOps: A Software Architect’s Perspective. Addison-Wesley Professional, Boston (2015)
Martin, R.C.: Clean Architecture: A Craftsman’s Guide to Software Structure and Design. Prentice Hall, Englewood Cliffs (2017)
Basiri, A., Behnam, N., de Rooij, R., Hochstein, L., Kosewski, L., Reynolds, J., Rosenthal, C.: Chaos engineering. IEEE Softw. 33(3), 35–41 (2016)
Pääkkönen, P., Pakkala, D.: Reference architecture and classification of technologies, products and services for big data systems. Big Data Res. 2(4), 166–186 (2015). https://doi.org/10.1016/j.bdr.2015.01.001
Maurer, B.: Fail at scale. Queue 13(8), 30:30–30:46 (2015). http://doi.acm.org/10.1145/2838344.2839461
Simioni, A., Vardanega, T.: In pursuit of architectural agility: experimenting with microservices. Submitted to IEEE International Conference on Services Computing (2018)
Fielding, R.T.: Architectural styles and the design of network-based software architectures. Ph.D. thesis (2000). aAI9980887
Abbott, M.L., Fisher, M.T.: The Art of Scalability: Scalable Web Architecture, Processes, and Organizations for the Modern Enterprise. Pearson Education (2009)
Hohpe, G., Woolf, B.: Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions. Addison-Wesley Professional, Reading (2004)
Goetz, B., Peierls, T.: Java Concurrency in Practice. Pearson Education (2006)
Armstrong, J.: Erlang. Commun. ACM 53(9), 68–75 (2010). http://doi.acm.org/10.1145/1810891.1810910
Hoare, C.A.R.: Communicating sequential processes. In: Hansen, P.B. (ed.) The Origin of Concurrent Programming, pp. 413–443. Springer, New York (1978). https://doi.org/10.1007/978-1-4757-3472-0_16
Kreps, J., Narkhede, N., Rao, J., et al.: Kafka: a distributed messaging system for log processing. In: Proceedings of the NetDB, pp. 1–7 (2011)
Dobbelaere, P., Esmaili, K.S.: Kafka versus RabbitMQ: a comparative study of two industry reference publish/subscribe implementations: industry paper. In: Proceedings of the 11th ACM International Conference on Distributed and Event-Based Systems, DEBS 2017, pp. 227–238. ACM, New York (2017). http://doi.acm.org/10.1145/3093742.3093908
Burns, B., Grant, B., Oppenheimer, D., Brewer, E., Wilkes, J.: Borg, omega, and kubernetes. Commun. ACM 59(5), 50–57 (2016). http://doi.acm.org/10.1145/2890784
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2018 Springer International Publishing AG, part of Springer Nature
About this paper
Cite this paper
Munari, S., Valle, S., Vardanega, T. (2018). Microservice-Based Agile Architectures: An Opportunity for Specialized Niche Technologies. In: Casimiro, A., Ferreira, P. (eds) Reliable Software Technologies – Ada-Europe 2018. Ada-Europe 2018. Lecture Notes in Computer Science(), vol 10873. Springer, Cham. https://doi.org/10.1007/978-3-319-92432-8_10
Download citation
DOI: https://doi.org/10.1007/978-3-319-92432-8_10
Published:
Publisher Name: Springer, Cham
Print ISBN: 978-3-319-92431-1
Online ISBN: 978-3-319-92432-8
eBook Packages: Computer ScienceComputer Science (R0)