Eclipse Ditto 0.8.0
One year after the initial code contribution, the Eclipse Ditto project would like to do an initial release in version 0.8.0.
Eclipse Ditto 0.8.0 focuses on providing advanced capabilities in building and working with the digital twins pattern. Building and exposing digital twins is possible via different APIs: HTTP/REST, WebSockets, AMQP 1.0, AMQP 0.9.1 and MQTT 3.1.1 are supported. Interaction with the bidrectional APIs is done via the "Ditto Protocol", a protocol Ditto defined for twin interaction. When working with a large set of twins (millions of), searching, finding and selecting partial data is possible. On all APIs, Ditto ensures that only authorized subjects may interact (read/write) with the digital twins with the use of fine grained policies.
In order to build digital twins of real world devices several integration approaches may be applied. Ditto can establish a connection to Eclipse Hono or other AMQP 1.0 endpoints, AMQP 0.9.1 brokers or MQTT 3.1.1 brokers (e.g. Eclipse Mosquitto) and optionally transform received messages to "Ditto Protocol". Powerful devices may alternatively directly send their data to Ditto's HTTP/WebSocket endpoints in order to reflect changes made to them.
For integrating with Eclipse Hono this release will make it possible to subscribe to telemetry/events from devices connectred via Hono and to also send command&control messages to devices connected to Hono and correlate replies from Hono accordingly.
The project leadership certifies that the APIs in this release are "Eclipse Quality".
Ditto's codebase is implemented in Java. By default Java objects are mutable which does not work well in highly scalable, message driven architectures, as possible side-effects during runtime may occur when concurrently modifying objects. Because of that the Ditto team decided to use immutable objects wherever and whenever possible. Immutablity of the objects is ensured in unit tests.
Ditto's model (and also the Ditto Protocol) modules are OSGi bundles so that they may be used in OSGi environments (e.g. Eclipse Kura or Eclipse Smarthome) without much effort. The model modules are configured to be checked by a "binary compatibility checker" in the Maven build so that APIs are not broken unintentionally.
On a level higher than the model, Ditto uses a microservice based architecture. As Ditto's microservices are interacting via an event driven approach, Ditto provides a very modular setup on the microservice level meaning that single services must be not started at all if their functionality is not needed. Another benefit from this architecture is that the services may be scaled horizontally if more resources are required.
Ditto utilizes the CQRS and EventSourcing pattern and mainly uses "inserts" (append only) into the database in favor to "updates" in order to get a better performance when doing database writes. The only exception is the "search" microservice which uses traditional CRUD in order to update its search index.
There are no security issues known at the time of this writing.
Ditto comes with:
- A project site containing the documentation (including basic concepts, architecture, definition of the Ditto Protocol, etc.)
- A "Hello World" example
- An OpenAPI based HTTP/REST documentation and applied HTTP concepts
- A GitHub repository with ditto-examples
- A Blog with the latest examples tutorials, release announcements, etc.
- Presentations of Ditto
- A sandbox installation where Ditto can be tried out without setting it up locally
Ditto does not provide a UI yet.
Ditto is able to process AMQP 1.0, AMQP 0.9.1 and MQTT 3.1.1 messages which are all standardized (IoT) protocols.
Ditto can use JSON Web Tokens specified by RFC 7519 in order to extract "subjects" (e.g. a user-id) to use for the access control to twins.
The Ditto team is active on meetups, conferences (giving talks), blogs and social media in order to gain visibility in the community.
Users of Ditto ask their questions via these channels:
- The Gitter chatroom of Ditto
- Directly via GitHub issues (the Ditto teams labels with "question")
- The mailing-list contains mainly administrational topics regarding the Ditto project
Ditto seeks for a good integration with Eclipse Hono in order to being able to create digital twins for all devices connected via Hono. The Ditto team is also in regular discussion with the Hono team.
It is difficult to tell how much Ditto is used, the only metric we have is the Docker image downloads on Docker hub which are currently ~1.300.