Eclipse Ditto™ 1.0.0 Release Review

Type
Release
Graduation
State
Successful
End Date of the Review Period

Reviews run for a minimum of one week. The outcome of the review is decided on this date. This is the last day to make comments or ask questions about this review.

Release

1.0.0

Description

One year after the first incubation release 0.8.0, done in 11/2018, Eclipse Ditto aims to graduate out of incubation with a 1.0.0 release.

Enhancements and work donce since the last 0.9.0 release, which was done in 07/2019, are:

  • Support for integrating custom OAuth 2.0 providers based on OpenID connect
  • Stabilizations of connectivity implementations (e.g. AMQP 1.0)
  • Addition of connecting to HTTP endpoints in connectivity service - which enables invoking any HTTP APIs as a result of twin changes or for sending messages
  • Improvements of the Eclipse Hono integration (e.g. applying "creation-time" and "ttd" headers in tracked twin, being able to define header-mappings for responses to devices connected via Hono)
  • Addition of a new "ditto-clients" repository containing a Java and a JavaScript client to be used by frontend and backend applications wanting to integrate with digital twins
  • Inlcuding of a single "definition" on thing model level in addition to the "definitions" each feature might define
  • Asynchronous cleanup of DB entries (things, policies) in an adaptive way dependening on the current database load
  • Performance and horizontal scalability improvements (e.g. horizontally scalable event publishing)
API Certification

The project leadership certifies that the APIs in this release are "Eclipse Quality".

Architectural Issues

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 modules and also the Ditto Java client are OSGi bundles so that they may be used in OSGi environments 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.

Security Issues

There are no security issues known at the time of this writing.

Non-Code Aspects

Ditto comes with:

Conforms To UI/UX Guidelines
Not applicable (project doesn't provide UI)
Usability Details

Ditto does not provide a UI yet.

End of Life

MongoDB collection name suffixing

Suffixed collection names for the MongoDB persistence have been end-of-life'd in 1.0.0.

In 0.8.0 and 0.9.0 MongoDB collection names of "things" and "policies" services were by default suffixed with the namespace of the persisted entities. This could in 0.8.0 and 0.9.0 already be deactivated via configuration.

With 1.0.0 Ditto removes the functionality to enable the suffixing completely.

The reason for that is that performance problems were encountered when thousands of namespaces were used in a single installation - in that case several thousand MongoDB collections were created which caused at certain DB operations performance problems as first all collection names had to be looked up.

Ditto will provide a migration script in order to migrate data from Ditto 0.8.0 and 0.9.0 installations in the new non-suffixed 1.0.0 format. This migration is an offline-migration, so the Ditto services has to be stopped in order to perform the migration.

Standards

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.

Ditto's API documentation is defined using the OpenAPI specification 3.0.0 allowing both creation of an interactive HTML-based documentation and creation of skelettons for various programming languages based on that specification.

Communities

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")
  • A Stackoverflow tag "eclipse-ditto" on which community quersions are answered by our committers
  • The mailing-list (ditto-dev@eclipse.org) 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.

Some of the Ditto team are committers in the Eclipse IoT Packages project aiming to simplify deployment and integration between Eclipse Hono, Ditto and hawkBit in the first step.

Adoption

Bosch Software Innovations GmbH uses Eclipse Ditto already as foundation for its productive SaaS service Bosch IoT Things as part of the Bosch IoT Suite in currently 3 different cloud environments.

Aloxy, a start-up from Belgium, uses Ditto as part of their IoT platform, mostly deployed on-premises for industrial monitoring use-cases. 

Othermo, a start-up from Germany, uses Ditto as part of their energy central platform.

Contributions

Microsoft did some contributions enhancing Ditto's Helm charts and supporting a deployment to their Azure cloud. In addition to that Microsoft provided examples on how to integrate Azure ServiceBus and EventBus with Ditto, based on AMQP 1.0.

Both Aloxy and Othermo, adopting Ditto, did contributions towards documentation and configuration enhancements of Ditto.

Othermo also started contributing a Mqtt5 enhancement of Ditto's connectivity service.