Solution Strategy
1. Modularization
The system needs to stay maintainable and extensible. Therefore we use a hexagonal architecture ↑ADR-005. The core domain is separated from the outside world (UI, DB, Messaging, etc.) via ports and adapters. This allows to easily exchange parts of the system without affecting the core domain. Also testing the core domain is much easier this way.
2. Single Sign On
The system holds no authentication data. It will be connected via OpenIDConnect to external identity providers (like keycloak). The users are specified via their external user. Internally they get an UUID which maps to the (Issuer, User) tuple of the external provider.
3. Frontend and backend integration
The systems use frontend integration methods for the UI.
Needed communication between the backends (data synchronization, event distribution) are handled via a messaging infrastructure. The broker ↑ADR-003 used will be a rabbitMQ handling AMQP queues and topics.
We heavily rely on self-contained systems ↑SCS as promoted by INNOQ.
The asynchronous data replication is addressed in section Handling asynchronously transfered data.