C9577 - DEVOPS AND MICROSERVICES M

Academic Year 2026/2027

  • Docente: Luca Foschini
  • Credits: 4
  • SSD: IINF-05/A
  • Language: English
  • Teaching Mode: In-person learning (entirely or partially)
  • Campus: Bologna
  • Corso: Second cycle degree programme (LM) in Computer Engineering (cod. 6719)

    Also valid for Second cycle degree programme (LM) in Computer Engineering (cod. 6719)

Learning outcomes

Upon completion of the course, students will have in-depth knowledge of solution strategies, infrastructure, and DevOps support for distributed enterprise software services and systems. Specifically, students will: understand and be able to apply design patterns and methodologies to microservices and Docker containers and their orchestration; understand microservice design patterns; be able to apply DevOps tools for orchestrating microservice applications; and be familiar with application design methodologies based on the Function as a Service paradigm and be able to apply them in serverless environments.

Course contents

Bridge and microservice architecture. A brief recall of the platform foundations from the first course, then the arc from monolith to SOA to microservices to modular monolith; domain-driven design as a boundary tool; when microservices help a small team and when they tax it; and strangler fig and anti-corruption layer for legacy migration.

Container orchestration with Kubernetes. Control plane, kubelet and etcd; pods, deployments, services, ConfigMaps and secrets; operators and CRDs; Helm packaging; and platform-engineering awareness. This builds on the containerization runtime from EP5 and maps to the container-orchestration objective.

Delivery and automation. The DevOps loop; continuous integration, delivery and deployment; infrastructure as code with Terraform and Ansible; pipeline-as-code with GitLab CI, and GitHub Actions for portability; GitOps with ArgoCD or Flux; the four DORA metrics and benchmarking; and open-source licensing.

Service mesh. Foundations and a full Istio treatment; the sidecar pattern and the data-plane-versus-control-plane split; Istio CRDs (VirtualService, DestinationRule, Gateway); canary and traffic shifting, circuit breaking and fault injection; mTLS and AuthorizationPolicy; the sidecar-versus-ambient question; north-south gateway against east-west mesh; and Envoy internals (listeners, filter chains, clusters, xDS).

Microservice data patterns. ACID-inside and BASE-across framing, and why two-phase commit lost; saga, choreographed against orchestrated; the transactional outbox, building on the Kafka foundations from EP6; and event sourcing and CQRS with an honest cost discussion.

Observability. Observability against monitoring; structured logging and what not to log; metrics with RED and USE; traces, spans and context propagation; the pipeline from instrumentation to storage and analysis; OpenTelemetry as the unifying standard; implementation in Kubernetes; and the toolset (Prometheus, Grafana, Jaeger, Tempo, Loki, eBPF).

Resilience and chaos engineering. Timeouts with budgets; retries with exponential backoff and jitter; circuit breakers, bulkheads, rate limiting and load shedding; when not to retry, and the amplification scenarios; chaos engineering and its Netflix lineage; and SLOs, SLIs and error budgets.

Serverless and Function as a Service. AWS Lambda, Azure Functions and Google Cloud Functions in brief; Knative as Kubernetes-native FaaS; OpenFaaS and Fission; the cold-start problem with provisioned concurrency, SnapStart and native images; and edge compute with Cloudflare Workers, Deno Deploy and Fastly Compute.

Emerging frontiers and case studies. WebAssembly and WASI; the operational concerns of inference; and the production case studies (Netflix, Uber, Discord, Shopify) .



Readings/Bibliography

All the teachning material (presentation slides, discussed exercises with solutions, exercise proposals, project examples and proposals) used during the classes will be available for download at Virtuale course pages.


As a possible useful reference to the material used in the previous academic year, please refer also to the already available URL:

https://virtuale.unibo.it/course/view.php?id=78077

In addition, there are suggested books useful for deepening several of the topics addressed by the course:

  • A.L. Rubinger, B. Burke, Enterprise JavaBeans 3.1, 1st ed., O'Reilly, 2010
  • D. Ayers et al., Professional Java Server Programming: with Servlets, JavaServer Pages (JSP), XML, Enterprise JavaBeans (EJB), JNDI, CORBA, Jini and Javaspaces, 1st edition, Wrox, 1999
  • C. Walls, Spring in Action, 3rd ed., Manning, 2011
  • C. Bauer, G. King, Java Persistence with Hibernate, Manning, 2006
  • J.S. Perry, Java Management Extensions, 1° ed., O'Reilly, 2002

Additional useful online sources of information and of teaching material:

  • SUN tutorial, http://java.sun.com/j2ee/overview.html
  • [http://lia.deis.unibo.it/Courses/sd1213-info/lucidi/JavaEETutorial.pdf]EJB tutorial by IBM [http://www.ibm.com/developerworks/java/tutorials/j-gsejb/]
  • Uso di Eclipse IDE e JBoss [http://en.wikibooks.org/wiki/J2EE_Programming/IDE/Eclipse]

Teaching methods

The classes will discuss the general issues related to the modeling, design, implementation, and runtime support of wide-scale distributed applications based on components, containers, and Application Servers. The main technologies exploited during the course will be based on the Java language and on the Java Enterprise Edition (J2EE): Enterprise Java Beans, Spring, Java Naming and Directory Interface, Java Annotations,Kafka, Java Persistence Architecture. The focus on these technologies, of high industrial relevance and most of them available for free as open-source, will enable the experimental testing and validation of the models and solution architectures discussed during the lectures.

The course will be associated with a set of practical lab exercises, in which the students will be solicited to perform guided exercise activities but in an autonomous way and in their free time. These activities will be necessary to complete the study of the course and to reach the desired skills; texts and solutions of these ees will be made available at the official course Web site.

Assessment methods

The course is assessed via a final oral examination. The exam will try to evaluate the deep understanding of both the methodologies/models of architecture design and the ability to implement parts of wide-scale enterprise distributed applications by using the mechanisms and technologies examined during the course. The oral exam, with average duration of around 45-60 minutes, will include at least four questions, some of them targeting the solution of practical exercises that will use the enterprise technologies studied and discussed during the course.

Students may also decide to associate this course with 1 attività progettuale (project activity, 4 ECTS since the 2013/2014 academic year) - for further details, please see the related description "Attività Progettuale" on the guide.

Teaching tools

Teaching material

The slides used during the classes (both in classroom and in labs) are freely available at the Virutale Couse pages.

As a possible useful reference to the material used in the previous academic year, please refer also to Virtuale where you can find texts and solutions of lab exercises and of frequent questions for oral exams.

Other tools:

Some Integrated Development Environments for J2EE (mainly the Eclipse IDEs; second option the NetBeans IDE), the JBoss Application Server and additional reference implementations of the technologies described in the lectures are available in the labs (mainly Lab2, but also Lab4) and on the course Web site.

The slides used during the lectures and made available on the course Web site are the primary material for the preparation of the exam; the suggested bibliography (books, papers, Web sites, ...) is intended as an optional support and integration.

Office hours

See the website of Luca Foschini

SDGs

Quality education Industry, innovation and infrastructure

This teaching activity contributes to the achievement of the Sustainable Development Goals of the UN 2030 Agenda.