This repository contains materials for a subcourse of NSWI152 (Cloud Application Development / Vývoj cloudových aplikací) course at the Faculty of Mathematics and Physics, Charles University in Prague. The subcourse is focused Data Intensive Systems, IoT backends & Observability.
The goal of the subcourse is to:
- introduce students to the specifics of software engineering for IoT and cloud,
- give an example of how an IoT solution can be designed on various levels of complexity and
- to provide an understanding of how fundamental Azure services can be used to implement IoT solutions.
There will be 5 lessons and one semestral project in total. First four lessons will be used to deliver most of the planned content and the last lesson will be dedicated for the presentation of the semestral projects.
-
Lesson 1 (23. 04. 2026)
- Introduction.
- Specifics of software engineering for IoT and cloud.
- Overview of relevant Azure resources - SQL, Functions with HTTP trigger, ARM Templates.
- Case study (basic solution).
- For more details visit lesson-1.
-
Lesson 2 (30. 04. 2026)
- Horizontal vs. vertical scalability.
- Partitioning & replication.
- CAP/PACELC theorem.
- Types, scalability and economic aspects of various storages.
- Overview of relevant Azure resources - Storage (Tables, Blobs), App Service.
- Case study (continued - scalable storage).
- For more details visit lesson-2.
-
Lesson 3 (07. 05. 2026)
- Asynchronous communication, messaging.
- Overview of relevant Azure resources - Event Hubs, Service Bus, Functions with Event Hub trigger.
- Case study (continued - asynchronous communication)
- For more details visit lesson-3.
-
Lesson 4 (14. 05. 2026)
- Observability, OpenTelemetry, Instrumentation and Troubleshooting of Cloud Services.
- Case study (continued - observability).
- For more details visit lesson-4.
- Course summary.
- Semestral project assignment. For more details see Semestral project.
-
Lesson 5 / Presentation (21. 05. 2026)
- Additional topics.
- Presentations of semestral projects.
Students are expected to have a basic understanding of the following topics:
- computer programming,
- asymptotic analysis and big O notation,
- software engineering,
- databases and indexes,
- cloud computing.
During the lessons, some topics will be accommpanied with examples in C# programming language. This examples are available in this repository and following software is required to run them:
- IDE for .NET (Visual Studio, Visual Studio Code, Rider)
- .NET 10 SDK
- Azure Function Core Tools
- Azure CLI
The semestral project will require students to create a system design for a simple IoT solution. Students are expected to deliver the design in the form of text documents and diagrams. Students can work on the assignment individually or in pairs.
Last lesson of the subcourse will be dedicated to the presentation of the semestral projects. Students who decide to present during this last lesson will have 15 minutes to present their solution followed-up with a discussion. During the discussion, additional questions asked and possible problems in the solution might be resolved. Authors of presented solutions for which all major problems identified are resolved during the discussion will receive the subcourse credit right away. For remaining students, suitable later timeslots will be found to present their projects.
Formal assignments can be found in:
Students presenting during the last lesson will receive one of assignments and the remaining students will receive the other one.
- Kleppmann, M. (2017). Designing Data-Intensive Applications. O'Reilly Media, Inc. ISBN: 978-1-4493-7332-0
- Azure Cloud Architecture Patterns
- Azure Storage Documentation
- Azure Event Hubs Documentation
- OpenTelemetry Docs
- Charity Majors, Liz Fong-Jones, George Miranda (2022). Observability Engineering. O'Reilly Media, Inc. ISBN: 9781492076445