Edit this page

The architecture chapter describes the overall architecture of Eclipse Ditto and in detail which sub-components fulfill which responsibilities.

Top level component view

This overview shows the Ditto services (components), the externally provided and consumed API endpoints, the external dependencies (MongoDB and nginx) and the relations of the services to each other.

Ditto services and context
Ditto services in blue and context with nginx as reverse proxy and MongoDB

The components have the following tasks:

All services run in the same Pekko cluster and can reach each other via TCP without the need for an additional message broker in between.

Components

Ditto consists of multiple “microservices” as shown in the above component view.

A “microservice” in Ditto is defined as:

  • has its own data store which only this microservice may access and write to
  • has an API in form of signals (commands, command responses, events)
  • can be accessed by other services only via the defined signals

Communication

All microservices can communicate asynchronously in a Ditto cluster. Communication is done via Pekko remoting which means that each service acts as server, providing a TCP endpoint, as well as client sending data to other services.

All messages which are sent between Ditto microservices must in a way be serializable and deserializable.
All Ditto signals can be serialized from Java objects to JSON representation and deserialized back from JSON to Java objects.

Tags: architecture