Recently I have had the opportunity to delve deep in to the world of Event Sourcing and CQRS for a modernization project where we are refactoring a 1M LOC a decade old classic java application that does more than a billion dollars of revenue across multiple lines of business. If you have to embark on a similar journey these are the resources I found useful:
1. DDD Distilled : This is the best summary of the classic Eric Evan's DDD book and Vernon's iDDD book. There is also a more practical Tools and Techniques section which summarizes Event Storming technique very well. We used a 3 day event storming inception to discover the complex business and technical domain and figure out the bounded contexts and problem areas.
2. Event Storming from Alberto Brandolini: A very easy read on the why and how of event storming. Alberto's writing style is very entertaining. This is probably the most interesting book written in this space. Alberto and Paul Raynor's videos(1, 2) on event storming provide a good getting-started guide to the world of event storming.
3. This Gist from Szymon provides an excellent collection of videos to understand the basics of modeling, Domain-Driven Design, CQRS and Event Sourcing.
4. Online Class: Greg Young's entire Domain Driven Design, CQRS, and Event Sourcing class all online.
5. Read Event Sourcing and CQRS chapter from Cloud Native Go: Building Web Applications and Microservices for the Cloud with Go and React on Safari Online.
6. Can't say enough good things about Michael Ploed's talk on building microservices with event sourcing and CQRS at SpringOne 2016. His practical advice is sorely needed in understanding the production concerns when refactoring a monolith to event-sourcing.
7. Peruse significant discussions on the DDD CQRS Group google mailing list.
8. Blogs & Articles
9. Code Repositories:
10. Videos & Webinars:
1. DDD Distilled : This is the best summary of the classic Eric Evan's DDD book and Vernon's iDDD book. There is also a more practical Tools and Techniques section which summarizes Event Storming technique very well. We used a 3 day event storming inception to discover the complex business and technical domain and figure out the bounded contexts and problem areas.
2. Event Storming from Alberto Brandolini: A very easy read on the why and how of event storming. Alberto's writing style is very entertaining. This is probably the most interesting book written in this space. Alberto and Paul Raynor's videos(1, 2) on event storming provide a good getting-started guide to the world of event storming.
3. This Gist from Szymon provides an excellent collection of videos to understand the basics of modeling, Domain-Driven Design, CQRS and Event Sourcing.
4. Online Class: Greg Young's entire Domain Driven Design, CQRS, and Event Sourcing class all online.
5. Read Event Sourcing and CQRS chapter from Cloud Native Go: Building Web Applications and Microservices for the Cloud with Go and React on Safari Online.
6. Can't say enough good things about Michael Ploed's talk on building microservices with event sourcing and CQRS at SpringOne 2016. His practical advice is sorely needed in understanding the production concerns when refactoring a monolith to event-sourcing.
7. Peruse significant discussions on the DDD CQRS Group google mailing list.
8. Blogs & Articles
- Developing Transactional Microservices Using Aggregates, Event Sourcing and CQRS - Part 1
- http://blog.zilverline.com/2012/07/30/simple-event-sourcing-redis-event-store-part-3/
- http://www.confluent.io/blog/event-sourcing-cqrs-stream-processing-apache-kafka-whats-connection/
- https://skillsmatter.com/skillscasts/4081-greg-young-4081
- http://www.kennybastani.com/2016/04/event-sourcing-microservices-spring-cloud.html
- A CQRS and ES Deep Dive
- Sagas - basically like a Finite State Machine operating on the events. A saga / nanny process is used to keep the state of the event stream consistent - Sagas are also used to handle SEQUENCing and transactional consistency concerns.
- Visual Introduction to Event Sourcing and CQRS
- CQRS Manager for Distributed Reactive Services?
- A visual introduction to Event Sourcing and CQRS
- Haufe Dev Microservices Architecture Day
- On Eventual Consistency and REST
- Developing Transactional Microservices Using Aggregates, Event Sourcing and CQRS - Part 1
- Developing Transactional Microservices Using Aggregates, Event Sourcing and CQRS - Part 2
- Spring Cloud Stream For Event Driven Architectures
- Versioning in an Event Sourced System - Definitive guide of how to handle versioning over long periods of time - Book from the father of event sourcing Greg Young
- Cautionary tale on the pain of wrongly designed aggregates
9. Code Repositories:
- https://github.com/VaughnVernon/IDDD_Samples
- http://idugalic.github.io/micro-company/
- https://github.com/joshlong/cf-cqrs-microservice-sampler
- https://github.com/kbastani/spring-cloud-event-sourcing-example
- https://github.com/olivergierke/spring-restbucks Leverages Spring Application events to create domain events in a Spring Data like fashion.
- Support for exposing domain events from aggregate roots as Spring application events
- Spring Boot starter project that connects together Spring Data and Spring Cloud Stream as a third-party event store
- Eventuate platform. 1. CQRS-based framework written in Scala. 2. Event store implementation that is backed by MySQL and Kafka. details here
- RBMH's Eventuate: https://github.com/RBMHTechnology/eventuate http://rbmhtechnology.github.io/eventuate/ http://krasserm.github.io/
- Spring Application Events Better Application Events in Spring 4.2
- Java EE Contexts and Dependency Injection 1.2
10. Videos & Webinars:
- Greg Young — A Decade of DDD, CQRS, Event Sourcing. This video contains golden nuggets towards the end where Greg does a retrospective of DDD-CQRS-ES failures in projects.
- https://spring.io/blog/2016/10/25/webinar-bootiful-cqrs-with-axon-nov-16
- ES/CQRS with Spring Cloud Stream
- Pragmatic Approach to Microservices
- Commander: Better Distributed Applications through CQRS, Event Sourcing, and Immutable Logs
- Bootiful CQRS with Axon
- Diving into Microservices JavaOne 2016 by Kenny Bastani and Chris Richardson on the the problems of data consistency and high availability in microservices and how to use event sourcing to solve these problems.
Great list of resources.
ReplyDeleteI recently came across this one from a CapitalOne engineer: https://github.com/capitalone/cqrs-manager-for-distributed-reactive-services/blob/master/doc/rationale.md#context-and-references . It's not about Spring, but it's a great resource about ES/CQRS. That has links to a presentation that he gave about the concept at Strange Loop and some other great presentations like Rich Hickey's "value of values" talk from 2012.
Great collection of resources here! Have you encountered any deep dive examples of event sourcing with a real domain model? There's a wealth of general, conceptual information out there about cqrs and event sourcing but I'd love to explore a real world example with all the finicky requirements of a real domain.
ReplyDelete