1.3 Software architecture

Everything about the fundamental structures of complex software systems

There are hundreds of various frameworks for managing complex software systems. In this chapter, we will focus on the most talked about in Industrial IoT:

  1. Monolithic applications vs microservice architecture
  2. Client-server vs event-driven architecture

Monolithic and microservice architecture

Traditional software is written as a monolith. This means, that all required components are bundled together in a single program and “you just need to double-click on the application to start the installer”. As software began to get larger and more complex, the microservice approach established itself. Instead of one large program, multiple smaller programs (so-called microservices) were developed. Each microservice has very small functionalities, but when coupled together as a whole they are able to deliver highly complex business applications. In the following images you can recap how monolithic applications and microservice architectures are built.

The first image shows monolithic software. Monoliths are typically installed and maintained more easily, but struggle in terms of scalability and extensibility.

The second image shows how a microservice architecture is built. It is common to run the same microservice several times in parallel, so that you can easily balance the load and if one microservice fails (e.g., because the server crashed), the other microservices with the exact same functionality on another physical server can take over without any disruption to the end-user.

Typical tools & technologies associated with a monolith

Typical tools & technologies associated with microservices

  • Docker & Kubernetes are tools for creating and managing microservice architectures. Read more here.

Client-server and event-driven architecture

Client-server

In a client-server communication, programs / microservices communicate directly with each other. This is easier to set up, but the system struggles when more components are added on a later stage.

Client-server architecture

Let’s take the example of a typical vision-based quality control system. You have a camera that sends the data to the image processing algorithm, which then stores the final result in a database. The application works perfectly fine, but now you want to add a new operator dashboard showing the image from the camera together with the classification. Now you need to create two more connections. Now imagine a third or fourth application comes in here, you will very likely start to lose the overview.

Event-driven architecture

From this video we hope you can take away the benefits of event-driven architecture, as well as the design pillars of the reactive manifesto used for its system design.

In an event-driven architecture (also known as “Publish/Subscribe (Pub/Sub)”, “Unified Namespace” or “MQTT”), information is exchanged using a central message broker. This adds complexity at the beginning of the project, but allows easier adding of new microservices.

Event-driven architecture

Coming back to our camera example, you can see that the initial architecture is slightly more complicated as you have a message broker and a database service. But now the integration of a new use-case like the operator dashboard is very easy and quick.

Typical tools & technologies associated with client-server

Typical tools & technologies associated with event-driven architecture

What next?

If you want more information on microservices, you could take a look how the microservice architecture of the United Manufacturing Hub looks like. Or how Docker, Kubernetes and Helm work

How event-driven architecture works in the Industrial IoT, you could go to the chapters Unified Namespace or MQTT


1.3.1 Docker, Kubernetes and Helm

Everything about the tools & technologies for building highly scalable and reliable microservice architectures

Last modified October 5, 2022: Historian article (#107) (5f30dc0)