Advanced Topics in Event Sourcing / CQRS / DDD.
-
Jonas Boner: How Events Are Reshaping Modern Systems (2017) Event-driven architecture and design have been getting a lot of attention in recent years. It’s an old concept that has been around for decades, so why this sudden peak of interest?
-
Martin Krasser: Event Sourcing and CQRS with Akka Persistence and Eventuate (2015) Martin Krasser (@mrt1nz), the original author of Akka Persistence and Eventuate, talks about CQRS, Event Sourcing with a focus on distributed systems and CAP tradeoffs. Spoiler: Akka Persistence is more on the CP side whereas Akka with Eventuate is more on the AP side. ⭐⭐⭐⭐⭐
-
Data in Motion: Streaming Static Data Efficiently in Akka Persistence (2016) Martin Zapletal (@zapletal_martin) from Cake Solutions discusses details of Akka Persistence Query. From Akka docs: "Akka Persistence Query itself is not directly the query side of an application, however it can help to migrate data from the write side to the query side database."
-
Reification and type-safety in a CQRS world (2017) Renato Cavalcanti (@renatocaval) discusses how CQRS applications bring some new challenges for statically typed language lovers.
-
Event Sourcing & Functional Programming - a pair made in heaven (2015) Paweł Szulc (@rabbitonweb) talks about the relationship between FP and Event Sourcing. One of the implementations he shows makes use of the State monad and he briefly discusses how such an implementation works very well with property-based testing.
-
The Elephant in the Room (2017) by Greg Young. Discusses versioning.
-
Building Apps with Functional Domain Models, Event Sourcing and Actors (2012) by Debasish Ghosh (@debasishg). One of the most interesting parts is when Debasish points out a duality between event sourcing and functional data structures.
-
Event in Software, Process, and Reality (2019) by John Bywater. Discusses events as actual occasions of experience, and identifies the "process event" as the unit of reliability in systems of event sourced applications.
-
Stamina Schema evolution for event sourcing. It has "a strong focus on long-term viability of your persisted data so it provides support for versioning that data, auto-migrating that data at read time to be compatible with your current event and domain classes, and a testkit to make sure all older versions of your persisted data are still readable."
-
Event Sourcing for Akka Streams by Martin Krasser (@mrt1nz). Aims to provide a stateful EventSourcing graph stage for Akka Streams.
-
Fun.CQRS An ES / CQRS framework with a pluggable backend (an Akka backend is provided). Even if you end up not using it, the code, in general, is a good illustration on how to create your own DSL and build your own abstraction over Akka's PersistentActor.
-
Akka Persistence Query Extensions "non-official akka-persistence-query-extensions contain components that are very handy to have for using akka-stream, akka persistence and akka query"
-
Hexagonal Architecture and Free Monad: Two related design patterns? (2017) by Quentin Duval.
-
Domain models, Algebraic laws and Unit tests (2017) by Debasish Ghosh (@debasishg).
-
Scalability using Sharding from Akka Cluster Michal Plachta (@miciek) explains Akka Cluster Sharding. Note: he does not mention CQRS / ES / DDD but Cluster Sharding / Persistence are almost always used in combination. Cluster Sharding is useful even when you don't need high scalability since it provides passivation and manages actor creation for you (actor creation becomes "on demand").
-
Building a CQRS / ES Framework (part 1) (2017) by Renato Cavalcanti (@renatocaval). Discusses the functional foundation of event sourcing.
-
Akka Streams: A Motivating Example (2017) You should read everything by Colin Breck (@breckcs) but this one in particular is a great start.
-
Akka Persistence: Testing Persistent Actors (2016) by Tudor Zgureanu (@tudor_zgureanu). Straight forward. Message in. Message out.
-
CQRS increases consistency (2016) by James Roper (@jroper). Fav quote: "If someone says using CQRS in microservices means you lose consistency - they have failed to acknowledge that they lost consistency the moment they started using microservices, it was not CQRS that lost them that consistency."
-
Eventuate's documentation by Martin Krasser (@mrt1nz) contains a wealth of knowledge and information and is an excellent read. ⭐⭐⭐⭐⭐
- The Dark Side of Event Sourcing: Managing Data Conversion (2017) by Michiel Overeem, Marten Spoor, and Slinger Jansen ... Almost like the authoritative guide on versioning in event-sourced systems.
PRs welcome.