Skip to main content

A Pattern Language for Engineering Software for the Cloud

  • Chapter
  • First Online:
Transactions on Pattern Languages of Programming V

Part of the book series: Lecture Notes in Computer Science ((TPLOP,volume 14630))

  • 24 Accesses

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.

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

Access this chapter

Subscribe and save

Springer+ Basic
$34.99 /Month
  • Get 10 units per month
  • Download Article/Chapter or eBook
  • 1 Unit = 1 Article or 1 Chapter
  • Cancel anytime
Subscribe now

Buy Now

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Notes

  1. 1.

    Learn more about docker at https://www.docker.com/.

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

    YAML is a human friendly data serialization standard for all programming languages. Learn more at http://www.yaml.org/.

  5. 5.

    Details at https://www.loggly.com/.

  6. 6.

    Project details available at www.bitreactive.com.

References

  1. Cloud design patterns - Azure Architecture Center (2021). https://docs.microsoft.com/en-us/azure/architecture/patterns/index-patterns

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

    Article  MATH  Google Scholar 

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

    Google Scholar 

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

    Google Scholar 

  5. Alexander, C.: The Nature of Order, Book 2: The Process of Creating Life. Center for Environmental Structure (2002)

    Google Scholar 

  6. Amazon: Amazon EC2 Container Service (2015). https://aws.amazon.com/docker/

  7. Amazon: Amazon Cloudtrail (2017). https://aws.amazon.com/cloudtrail/

  8. Amazon: Scheduled Tasks (cron) (2017). http://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduled_tasks.html

  9. Arcitura Education Inc: Dynamic Failure Detection and Recovery. http://cloudpatterns.org/design_patterns/dynamic_failure_detection_and_recovery

  10. Arcitura Education Inc: Cloud Patterns (2019). https://patterns.arcitura.com/cloud-computing-patterns

  11. Azure: Azure Logging and Auditing (2017). https://docs.microsoft.com/en-us/azure/security/azure-log-audit

  12. Boldt Sousa, T.: Engineering Software for the Cloud: A Pattern Language. Ph.D. thesis (2020). https://repositorio-aberto.up.pt/handle/10216/127347

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

    Google Scholar 

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

    Google Scholar 

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

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

    Google Scholar 

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

    Google Scholar 

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

  19. Brown, K., Woolf, B., Yoder, J., Mitchell, I.J.: Patterns for Developers and Architects building for the cloud (2021). https://kgb1001001.github.io/cloudadoptionpatterns/

  20. Bui, T.: Analysis of Docker Security. Computing Research Repository (2015). http://arxiv.org/abs/1501.02967

  21. Bushmann, F., Meunier, R., Rohnert, H.: Pattern-oriented software architecture: A System of Patterns, vol. 1. Wiley Publishing, Hoboken (1996)

    Google Scholar 

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

  23. Chaos Community: Principles of Chaos Engineering (2017). http://principlesofchaos.org/

  24. Charette, R.N.: Why Software Fails (2005). https://doi.org/10.1109/MSPEC.2005.1502528

  25. Chronos: Chronos (2017). https://mesos.github.io/chronos/

  26. Community, C.: Etcd Project Page (2015). https://github.com/coreos/etcd

  27. Community, V.: Vulcanproxy Project Page (2015). http://www.vulcanproxy.com/

  28. CoreOS Community: CoreOS Project Page (2015). https://coreos.com/

  29. Cunningham, W.: Let It Crash (2014). http://wiki.c2.com/?LetItCrash

  30. Cycligent: Continuous Delivery Patterns for Design and Deployment (2015). https://medium.com/@Cycligent/continuous-delivery-patterns-for-design-deployment-8f8744558401

  31. Dadgar, A.: What is infrastructure as code and why is it important? (2018). https://www.hashicorp.com/resources/what-is-infrastructure-as-code

  32. DataDog: Docker Adoption (2018). https://www.datadoghq.com/docker-adoption/

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

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

  35. Docker: Dockerfile reference (2018). https://docs.docker.com/engine/reference/builder

  36. Elastic: The Open Source Elastic Stack (2017). https://www.elastic.co/products

  37. Erl, T., Cope, R., Naserpour, A.: Cloud Computing Design Patterns. Prentice Hall, Upper Saddle River (2015)

    Google Scholar 

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

  39. Fernandez, E.B.: Security Patterns in Practice: Designing Secure Architectures Using Software Patterns (2013)

    Google Scholar 

  40. Foundation, A.: Mesos Project Page (2015). http://mesos.apache.org/

  41. Fowler, M.: What do you mean by “Event-Driven”? (2017). https://martinfowler.com/articles/201701-event-driven.html

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

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

  44. Gawlick, D.: Message queuing for business integration. eAI J., 30–33 (2002)

    Google Scholar 

  45. Gitlab: Postmortem of database outage of January 31 (2017). https://about.gitlab.com/2017/02/10/postmortem-of-database-outage-of-january-31/

  46. Goasguen, S.: Docker in the Cloud, 2nd edn. O’Reilly Media, Newton (2016)

    Google Scholar 

  47. Google: Google Cloud Container Service (2015). https://cloud.google.com/container-engine/

  48. Google: Reliable Task Scheduling on Google Compute Engine (2018). https://cloud.google.com/solutions/reliable-task-scheduling-compute-engine

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

  50. Guckenheimer, S.: What is Infrastructure as Code? (2017). https://docs.microsoft.com/en-us/azure/devops/learn/what-is-infrastructure-as-code

  51. Hanmer, R.: An input and output pattern language. In: Design Patterns in Communications Software, no. c, pp. 95–129. Cambridge University Press, Cambridge (1998)

    Google Scholar 

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

  53. Hieatt, E., Mee, R.: Repository Pattern. https://martinfowler.com/eaaCatalog/repository.html

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

  55. 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/

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

  57. IEEE, Open, T.G.: crontab (2016). http://pubs.opengroup.org/onlinepubs/9699919799/utilities/crontab.html

  58. Inc, M.: Mesosphere Service Discovery & Load Balancing (2015). https://mesosphere.github.io/marathon/docs/service-discovery-load-balancing.html

  59. Initiative, O.C.: Open Containers Project Page (2015). http://www.opencontainers.org/

  60. Internetlivestats.com: Number of Internet users in the world (2019). http://www.internetlivestats.com/internet-users/

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

  62. Kubernetes: Run a Stateless Application Using a Deployment. https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/

  63. Kubernetes: Kubernetes Cron Jobs (2017). https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/

  64. Kubernetes: DNS for Services and Pods (2018). https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/

  65. Kubernetes: Pod Lifecycle (2018). https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/

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

  67. Lewis, J., Fowler, M.: Microservices (2014). http://martinfowler.com/articles/microservices.html

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

    Article  Google Scholar 

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

    Google Scholar 

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

    Article  Google Scholar 

  71. Menage, P.: CGROUPS. Technical report (2004). https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt

  72. Mesosphere: Marathon Health Checks (2017). https://mesosphere.github.io/marathon/docs/health-checks.html

  73. Mesosphere: Marathon API (2018). https://docs.mesosphere.com/1.11/deploying-services/marathon-api/

  74. Microsoft: Health Endpoint Monitoring pattern (2017). https://docs.microsoft.com/en-us/azure/architecture/patterns/health-endpoint-monitoring

  75. Microsoft: Microsoft Azure Scheduler (2017). https://azure.microsoft.com/en-us/services/scheduler/

  76. Morris, K.: Infrastructure as Code. O’Reilly Media, Inc., Newton (2015)

    MATH  Google Scholar 

  77. Mouat, A.: Docker Security. Technical report (2015). http://www.oreilly.com/webops-perf/free/docker-security.csp

  78. Namiot, D., Sneps-Sneppe, M.: On micro-services architecture. Int. J. Open Inf. Technol. 2(9), 24–27 (2014)

    Google Scholar 

  79. Netflix: The Netflix Simian Army (2011). https://medium.com/netflix-techblog/the-netflix-simian-army-16e57fbab116

  80. Netflix: Chaos Monkey (2017). https://github.com/Netflix/chaosmonkey

  81. Pingdom: Pingdom (2017). https://www.pingdom.com/

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

    Google Scholar 

  83. Pivotal: RabbitMQ Tutorials (2007). https://rabbitmq.docs.pivotal.io/35/rabbit-web-docs/tutorials/tutorial-one-java.html

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

  85. Relic, N.: New Relic (2017). https://newrelic.com/

  86. Richards, M.: Software Architecture Patterns (DRAFT), vol. 32 (2014). https://doi.org/10.1097/NHH.0000000000000071

  87. Richardson, C.: Microservices patterns: with examples in Java. Manning Publications Co., Shelter Island (2018)

    MATH  Google Scholar 

  88. Richardson, C.: A pattern language for microservices (2021). http://microservices.io/patterns/

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

  90. Scheepers, M.J.: Virtualization and containerization of application infrastructure : a comparison. In: 21st Twente Student Conference on IT, pp. 1–7 (2014)

    Google Scholar 

  91. Schumacher, M., Fernandez-Buglioni, E., Hybertson, D., Buschmann, F., Sommerlad, P.: Security Patterns: Integrating Security and Systems Engineering (2006)

    Google Scholar 

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

    Article  Google Scholar 

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

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

    Google Scholar 

  95. Statuscake: StatusCake (2017). https://www.statuscake.com/

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

  97. Wilder, B.: Cloud Architecture Patterns: Using Microsoft Azure. Springer, Heidelberg (2012). https://books.google.com/books?id=X-d6JVHQwo8C&pgis=1

  98. Wilder, J.: Automated Nginx Reverse Proxy for Docker (2015). http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/

  99. Winstedt, E.O.: A bodleian MS. of juvenal. Class. Rev. 13(4), 201–205 (1899). https://doi.org/10.1017/S0009840X00078409

  100. Wuggazer, P.: Evaluation of an Architecture for a Scaling and Self-Healing Virtualization System. Ph.D. thesis, University of Magdeburg (2015)

    Google Scholar 

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

  102. Yarbrough, G., Hook, S.: Message Queue Server System (2002). https://www.google.com/patents/US20020004835

Download references

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

Authors

Corresponding author

Correspondence to Tiago Boldt Sousa .

Editor information

Editors and Affiliations

Rights and permissions

Reprints and permissions

Copyright information

© 2025 The Author(s), under exclusive license to Springer-Verlag GmbH, DE, part of Springer Nature

About this chapter

Check for updates. Verify currency and authenticity via CrossMark

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)

Publish with us

Policies and ethics