When Microservices Met Event Sourcing


Join us for our regular tech talk series. Mingle, learn, and hang out with ThoughtWorkers from our NYC office.


6:30 PM -- Doors open for refreshments and networking

7:00 - 7:45 PM -- TW Consultant Vinicius Gomes talks about "When Microservices Met Event Sourcing"

7:45 - 8:00 PM -- Speaker Q&A ASL interpretation will be provided for the talk.

Microservices are becoming quite a popular architectural pattern, both in the development of brand new systems and when decomposing legacy monoliths into smaller independent modules. However, the typical microservices approach based on HTTP and REST brings with it critical cross-functional challenges for performance, data consistency, and even the HTTP protocol when it comes to describing complex user interactions.

The fundamental idea of event sourcing is to describe the state of the system: instead of storing only the current state (as most traditional systems would do) event sourcing stores a sequence of immutable events describing everything that has happened so far. Typically, those events are caused by the execution of commands, which represent the user’s intent. Events can be published and consumed by other services and used to build query-friendly representations of the aggregated state.

When microservices are combined with event sourcing, services no longer need to communicate with each other explicitly and synchronously. Instead, they exchange information indirectly through event publishing/subscribing, which enables those services to be almost completely unaware of the existence of each other, since the events are now the only contract needed. At the same time, the persistence of the event history enables us to be flexible when it comes to answer time-based business queries and accommodate future requirements without impacting many components in the system at once.

You’ll learn details of this architectural style in comparison to the traditional HTTP/REST approach, its benefits and challenges, and the first steps on the practical implementation. Along the way, Vinicius introduces the most important concepts and components, like the event store, event listeners, command handlers, and aggregates and outlines the first steps to their practical implementation. Vinicius also discusses the different levels of testing on this architecture and the most relevant challenges his team has faced so far before sharing a live demo.

Vinicius Gomes is a software developer at ThoughtWorks. Vinicius is passionate about distributed systems and functional programming. He writes about software development and technology on his blog.