Event sourcing, event-driven architectures, and CQRS
Traditionally, enterprise applications are built using a model approach that is based on the atomic Create Read Update Delete (CRUD).
The current state of the system, including the state of the domain entities, is reflected in a relational database. If a domain entity is updated, the new state of the entity including all of its properties is put into the database and the old state is gone.
The CRUD approach requires applications to maintain consistency. In order to ensure the state of the domain entity is reflected correctly, all use case invocations have to be executed in a consistent manner, synchronizing modifications to the entities.
Shortcomings of CRUD-based systems
This synchronization is also one of the shortcomings of CRUD-based systems, the way that we typically build applications.
Scalability
The required synchronization prevents the system from scaling infinitely. All transactions are executed on the relational database instance...