Abstract
Software businesses are continuously increasing their presence in the cloud. While cloud computing is not a new research topic, designing software for the cloud is still challenging, requiring engineers to invest in research to become proficient at working with it.
Design patterns can be used to facilitate cloud adoption, as they provide valuable design knowledge and implementation guidelines for recurrent engineering problems.
This work introduces a pattern language for designing software for the cloud. We believe developers can significantly reduce their R&D time by adopting these patterns to bootstrap their cloud architecture. The language comprises 10 patterns, organized into four categories: Automated Infrastructure Management, Orchestration and Supervision, Monitoring, and Discovery and Communication.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Notes
- 1.
Learn more about docker at https://www.docker.com/.
- 2.
Xen and KVM are both open source virtualization servers. Learn more about the projects at https://www.xenproject.org/ and https://www.linux-kvm.org/.
- 3.
LXC, OpenVZ and Vserver are three alternative container implementation. LXC was used internally by Docker until version 0.9, being replaced by lib-container since. You can learn more about these projects respectively at https://linuxcontainers.org/, https://openvz.org/ and http://linux-vserver.org/.
- 4.
YAML is a human friendly data serialization standard for all programming languages. Learn more at http://www.yaml.org/.
- 5.
Details at https://www.loggly.com/.
- 6.
Project details available at www.bitreactive.com.
References
Cloud design patterns - Azure Architecture Center (2021). https://docs.microsoft.com/en-us/azure/architecture/patterns/index-patterns
Aceto, G., Botta, A., De Donato, W., Pescapè, A.: Cloud monitoring: a survey. Comput. Netw. 57(9), 2093–2115 (2013). https://doi.org/10.1016/j.comnet.2013.04.001
Albuquerque, C., Correia, F.F.: Deployment tracking and exception tracking: monitoring design patterns for cloud-native applications. In: Proceedings of the 28th European Conference on Pattern Languages of Programs, pp. 1–10 (2023)
Albuquerque, C., Relvas, K., Correia, F.F., Brown, K.: Proactive monitoring design patterns for cloud-native applications. In: Proceedings of the 27th European Conference on Pattern Languages of Programs, pp. 1–13 (2022)
Alexander, C.: The Nature of Order, Book 2: The Process of Creating Life. Center for Environmental Structure (2002)
Amazon: Amazon EC2 Container Service (2015). https://aws.amazon.com/docker/
Amazon: Amazon Cloudtrail (2017). https://aws.amazon.com/cloudtrail/
Amazon: Scheduled Tasks (cron) (2017). http://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduled_tasks.html
Arcitura Education Inc: Dynamic Failure Detection and Recovery. http://cloudpatterns.org/design_patterns/dynamic_failure_detection_and_recovery
Arcitura Education Inc: Cloud Patterns (2019). https://patterns.arcitura.com/cloud-computing-patterns
Azure: Azure Logging and Auditing (2017). https://docs.microsoft.com/en-us/azure/security/azure-log-audit
Boldt Sousa, T.: Engineering Software for the Cloud: A Pattern Language. Ph.D. thesis (2020). https://repositorio-aberto.up.pt/handle/10216/127347
Boldt Sousa, T., Aguiar, A., Correia, F.F., Sereno Ferreira, H.: Engineering software for the cloud - patterns and sequences. In: 11th Latin American Conference on Pattern Languages of Programs Programs, Buenos Aires, Argentina, no. 11, p. 8 (2016)
Boldt Sousa, T., Correia, F.F., Sereno Ferreira, H.: Patterns for software orchestration on the cloud. In: 22nd Conference on Pattern Languages of Programs, Pittsburgh, Pennsylvania, USA. (2015)
Boldt Sousa, T., Ferreira, H.S., Correia, F.F., Aguiar, A.: Engineering software for the cloud: messaging systems and logging. In: 22nd European Conference on Pattern Languages of Programs, Irsee, Bavaria, Germany (2017). https://doi.org/10.1145/3147704.3147720
Boldt Sousa, T., Sereno Ferreira, H., Correia, F.F., Aguiar, A.: Engineering software for the cloud: automated recovery and scheduler. In: 23rd European Conference on Pattern Languages of Programs, Irsee, Bavaria, Germany (2018)
Boldt Sousa, T., Sereno Ferreira, H., Correia, F.F., Aguiar, A.: Engineering software for the cloud: external monitoring and fault injection. In: 23rd European Conference on Pattern Languages of Programs, Irsee, Bavaria, Germany (2018)
Bonér, J., Farley, D., Kuhn, R., Thompson, M.: The reactive manifesto (Version 2.0). Reactivemanifesto.Org 2(16 September 2014), 1–2 (2014). http://www.reactivemanifesto.org
Brown, K., Woolf, B., Yoder, J., Mitchell, I.J.: Patterns for Developers and Architects building for the cloud (2021). https://kgb1001001.github.io/cloudadoptionpatterns/
Bui, T.: Analysis of Docker Security. Computing Research Repository (2015). http://arxiv.org/abs/1501.02967
Bushmann, F., Meunier, R., Rohnert, H.: Pattern-oriented software architecture: A System of Patterns, vol. 1. Wiley Publishing, Hoboken (1996)
Casey, J., Cons, L., Lapka, W., Paladin, M., Skaburskas, K.: A messaging infrastructure for WLCG. J. Phys. Conf. Ser. 331(PART 6) (2011). https://doi.org/10.1088/1742-6596/331/6/062015
Chaos Community: Principles of Chaos Engineering (2017). http://principlesofchaos.org/
Charette, R.N.: Why Software Fails (2005). https://doi.org/10.1109/MSPEC.2005.1502528
Chronos: Chronos (2017). https://mesos.github.io/chronos/
Community, C.: Etcd Project Page (2015). https://github.com/coreos/etcd
Community, V.: Vulcanproxy Project Page (2015). http://www.vulcanproxy.com/
CoreOS Community: CoreOS Project Page (2015). https://coreos.com/
Cunningham, W.: Let It Crash (2014). http://wiki.c2.com/?LetItCrash
Cycligent: Continuous Delivery Patterns for Design and Deployment (2015). https://medium.com/@Cycligent/continuous-delivery-patterns-for-design-deployment-8f8744558401
Dadgar, A.: What is infrastructure as code and why is it important? (2018). https://www.hashicorp.com/resources/what-is-infrastructure-as-code
DataDog: Docker Adoption (2018). https://www.datadoghq.com/docker-adoption/
De Bayser, M., Azevedo, L.G., Cerqueira, R.: ResearchOps: the case for DevOps in scientific applications. In: Proceedings of the 2015 IFIP/IEEE International Symposium on Integrated Network Management, IM 2015, pp. 1398–1404 (2015). https://doi.org/10.1109/INM.2015.7140503
Dobaj, J., Schuss, M., Krisper, M., Boano, C.A., Macher, G.: Dependable mesh networking patterns, pp. 1–14 (2019). https://doi.org/10.1145/3361149.3361174
Docker: Dockerfile reference (2018). https://docs.docker.com/engine/reference/builder
Elastic: The Open Source Elastic Stack (2017). https://www.elastic.co/products
Erl, T., Cope, R., Naserpour, A.: Cloud Computing Design Patterns. Prentice Hall, Upper Saddle River (2015)
Felter, W., Ferreira, A., Rajamony, R., Rubio, J.: IBM Research Report An Updated Performance Comparison of VirtualMachines and Linux Containers. Technical report (2012). http://domino.watson.ibm.com/library/CyberDig.nsf/home
Fernandez, E.B.: Security Patterns in Practice: Designing Secure Architectures Using Software Patterns (2013)
Foundation, A.: Mesos Project Page (2015). http://mesos.apache.org/
Fowler, M.: What do you mean by “Event-Driven”? (2017). https://martinfowler.com/articles/201701-event-driven.html
Fu, Q., et al.: Where do developers log? an empirical study on logging practices in industry. 36th International Conference on Software Engineering, ICSE Companion 2014 - Proceedings, pp. 24–33 (2014). https://doi.org/10.1145/2591062.2591175
Gartner: Gartner Forecasts Worldwide Public Cloud Revenue to Grow 17.5 Percent in 2019. Technical report (2019). https://www.gartner.com/en/newsroom/press-releases/2019-04-02-gartner-forecasts-worldwide-public-cloud-revenue-to-g
Gawlick, D.: Message queuing for business integration. eAI J., 30–33 (2002)
Gitlab: Postmortem of database outage of January 31 (2017). https://about.gitlab.com/2017/02/10/postmortem-of-database-outage-of-january-31/
Goasguen, S.: Docker in the Cloud, 2nd edn. O’Reilly Media, Newton (2016)
Google: Google Cloud Container Service (2015). https://cloud.google.com/container-engine/
Google: Reliable Task Scheduling on Google Compute Engine (2018). https://cloud.google.com/solutions/reliable-task-scheduling-compute-engine
Grgić, K., Špeh, I., Hedi, I.: A web-based IoT solution for monitoring data using MQTT protocol. In: Proceedings of 2016 International Conference on Smart Systems and Technologies, SST 2016, pp. 249–253. IEEE Computer Society (2016). https://doi.org/10.1109/SST.2016.7765668
Guckenheimer, S.: What is Infrastructure as Code? (2017). https://docs.microsoft.com/en-us/azure/devops/learn/what-is-infrastructure-as-code
Hanmer, R.: An input and output pattern language. In: Design Patterns in Communications Software, no. c, pp. 95–129. Cambridge University Press, Cambridge (1998)
Herrmann, P., Svae, A., Svendsen, H.H., Blech, J.O.: Collaborative model-based development of a remote train monitoring system. In: ENASE 2016 - Proceedings of the 11th International Conference on Evaluation of Novel Software Approaches to Software Engineering, pp. 383–390 (2016). https://doi.org/10.5220/0005929403830390
Hieatt, E., Mee, R.: Repository Pattern. https://martinfowler.com/eaaCatalog/repository.html
Hindman, B., Konwinski, A., Zaharia, M.: Mesos: a platform for fine-grained resource sharing in the data center. In: Proceedings of the NSDI, p. 32 (2011). http://dl.acm.org/citation.cfm?id=1972457.1972488
Hof, R.: Meet Project Storm, Facebook’s SWAT team for disaster-proofing data centers (2016). https://siliconangle.com/2016/08/31/meet-project-storm-facebooks-swat-team-for-disaster-proofing-data-centers/
Hohpe, G., Woolf, B.: Enterprise integration patterns: designing, building, and deploying messaging solutions. In: Enterprise Integration Patterns Designing Building and Deploying Messaging Solution, p. 736 (2003). https://doi.org/10.1525/vs.2009.4.3.toc
IEEE, Open, T.G.: crontab (2016). http://pubs.opengroup.org/onlinepubs/9699919799/utilities/crontab.html
Inc, M.: Mesosphere Service Discovery & Load Balancing (2015). https://mesosphere.github.io/marathon/docs/service-discovery-load-balancing.html
Initiative, O.C.: Open Containers Project Page (2015). http://www.opencontainers.org/
Internetlivestats.com: Number of Internet users in the world (2019). http://www.internetlivestats.com/internet-users/
Koutoupis, P.: Everything You Need to Know about Linux Containers, Part II: Working with Linux Containers (2018). https://www.linuxjournal.com/content/everything-you-need-know-about-linux-containers-part-ii-working-linux-containers-lxc
Kubernetes: Run a Stateless Application Using a Deployment. https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/
Kubernetes: Kubernetes Cron Jobs (2017). https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
Kubernetes: DNS for Services and Pods (2018). https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
Kubernetes: Pod Lifecycle (2018). https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/
Leme, N.G.M., Martins, E., Rubira, C.: A Software Fault Injection Pattern System. In: Pattern Languages of Programs (2001). https://hillside.net/plop/plop2001/accepted_submissions/PLoP2001/ngmleme3/PLoP2001_ngmleme3_3.pdf
Lewis, J., Fowler, M.: Microservices (2014). http://martinfowler.com/articles/microservices.html
Magnoni, L.: Modern messaging for distributed sytems. J. Phys: Conf. Ser. 608(1), 012038 (2015). https://doi.org/10.1088/1742-6596/608/1/012038
Maia, T., Correia, F.: Service mesh patterns. In: Proceedings of the 27th European Conference on Pattern Languages of Programs. EuroPLoP 2022, Association for Computing Machinery, New York (2022)
Malaiya, Y.K., Li, M.N., Bieman, J.M., Karcich, R.: Software reliability growth with test coverage. IEEE Trans. Reliab. 51(4), 420–426 (2002). https://doi.org/10.1109/TR.2002.804489
Menage, P.: CGROUPS. Technical report (2004). https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt
Mesosphere: Marathon Health Checks (2017). https://mesosphere.github.io/marathon/docs/health-checks.html
Mesosphere: Marathon API (2018). https://docs.mesosphere.com/1.11/deploying-services/marathon-api/
Microsoft: Health Endpoint Monitoring pattern (2017). https://docs.microsoft.com/en-us/azure/architecture/patterns/health-endpoint-monitoring
Microsoft: Microsoft Azure Scheduler (2017). https://azure.microsoft.com/en-us/services/scheduler/
Morris, K.: Infrastructure as Code. O’Reilly Media, Inc., Newton (2015)
Mouat, A.: Docker Security. Technical report (2015). http://www.oreilly.com/webops-perf/free/docker-security.csp
Namiot, D., Sneps-Sneppe, M.: On micro-services architecture. Int. J. Open Inf. Technol. 2(9), 24–27 (2014)
Netflix: The Netflix Simian Army (2011). https://medium.com/netflix-techblog/the-netflix-simian-army-16e57fbab116
Netflix: Chaos Monkey (2017). https://github.com/Netflix/chaosmonkey
Pingdom: Pingdom (2017). https://www.pingdom.com/
Pinheiro, E., Weber, W., Barroso, L.: Failure trends in a large disk drive population. In: Proceedings of the 5th USENIX Conference on File and Storage Technologies (FAST 2007), vol. 7, pp. 17–29 (2007)
Pivotal: RabbitMQ Tutorials (2007). https://rabbitmq.docs.pivotal.io/35/rabbit-web-docs/tutorials/tutorial-one-java.html
Regola, N., Ducom, J.C.: Recommendations for virtualization technologies in high performance computing. In: Proceedings - 2nd IEEE International Conference on Cloud Computing Technology and Science, CloudCom 2010, pp. 409–416 (2010). https://doi.org/10.1109/CloudCom.2010.71
Relic, N.: New Relic (2017). https://newrelic.com/
Richards, M.: Software Architecture Patterns (DRAFT), vol. 32 (2014). https://doi.org/10.1097/NHH.0000000000000071
Richardson, C.: Microservices patterns: with examples in Java. Manning Publications Co., Shelter Island (2018)
Richardson, C.: A pattern language for microservices (2021). http://microservices.io/patterns/
Roderick, C., Burdzanowski, L., Kruk, G.: The CERN Accelerator Logging Service- 10 Years in Operation: A Look at the Past, Present and Future. Technical report, CERN (2013). http://cds.cern.ch/record/1611082
Scheepers, M.J.: Virtualization and containerization of application infrastructure : a comparison. In: 21st Twente Student Conference on IT, pp. 1–7 (2014)
Schumacher, M., Fernandez-Buglioni, E., Hybertson, D., Buschmann, F., Sommerlad, P.: Security Patterns: Integrating Security and Systems Engineering (2006)
Soltesz, S., Pötzl, H., Fiuczynski, M.E., Bavier, A., Peterson, L.: Container-based operating system virtualization. ACM SIGOPS Oper. Syst. Rev. 41(3), 275 (2007). https://doi.org/10.1145/1272998.1273025
Sousa, T.B., Ferreira, H.S., Correia, F.: A Survey on the Adoption of Patterns for Engineering Software for the Cloud - dataset (2021). https://doi.org/10.5281/zenodo.4415778
Sousa, T.B., Ferreira, H.S., Correia, F.F.: Overview of a pattern language for engineering software for the cloud. In: 25th Conference on Pattern Languages of Programs, Portland, Oregon, USA (2018)
Statuscake: StatusCake (2017). https://www.statuscake.com/
Taft, D.: How the Skills Gap Is Threatening the Growth of App Economy (2015). http://www.eweek.com/developer/slideshows/how-the-skills-gap-is-threatening-the-growth-of-app-economy.html
Wilder, B.: Cloud Architecture Patterns: Using Microsoft Azure. Springer, Heidelberg (2012). https://books.google.com/books?id=X-d6JVHQwo8C&pgis=1
Wilder, J.: Automated Nginx Reverse Proxy for Docker (2015). http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/
Winstedt, E.O.: A bodleian MS. of juvenal. Class. Rev. 13(4), 201–205 (1899). https://doi.org/10.1017/S0009840X00078409
Wuggazer, P.: Evaluation of an Architecture for a Scaling and Self-Healing Virtualization System. Ph.D. thesis, University of Magdeburg (2015)
Xavier, M.G., Neves, M.V., Rossi, F.D., Ferreto, T.C., Lange, T., De Rose, C.A.: Performance evaluation of container-based virtualization for high performance computing environments. In: Proceedings of the 2013 21st Euromicro International Conference on Parallel, Distributed, and Network-Based Processing, PDP 2013 (LXC), pp. 233–240 (2013). https://doi.org/10.1109/PDP.2013.41
Yarbrough, G., Hook, S.: Message Queue Server System (2002). https://www.google.com/patents/US20020004835
Acknowledgements
The authors would like to express their gratitude to the PLoP, EuroPLoP, and SugarLoafPLoP conferences, where the contents of this article have been previously workshoped, and to the various individuals who contributed significantly to its development and refinement. Special thanks are extended to Robert Hanmer, Bogdana Botez, Eduardo Fernandez, and José Ruiz, for their insightful feedback during the shepherding of the original papers. Appreciation is also extended to the members of the writers workshops, including Tim Wellhausen, Andreas Seitz, Fei Li, Julio Moreno, Ralph Johnson, Joe Yoder, Antonio Tercero, Pedro Martos, Alessandro Leite, Renato Ferreira, Hironori Washizaki, Madiha Syed and Bharatkumar Sharma.
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2025 The Author(s), under exclusive license to Springer-Verlag GmbH, DE, part of Springer Nature
About this chapter
Cite this chapter
Sousa, T.B., Ferreira, H.S., Correia, F.F. (2025). A Pattern Language for Engineering Software for the Cloud. In: Wallingford, E., Zdun, U., Kohls, C. (eds) Transactions on Pattern Languages of Programming V. Lecture Notes in Computer Science(), vol 14630. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-662-70810-1_1
Download citation
DOI: https://doi.org/10.1007/978-3-662-70810-1_1
Published:
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-662-70809-5
Online ISBN: 978-3-662-70810-1
eBook Packages: Computer ScienceComputer Science (R0)