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.
Vinicius Gomes explains how the combination of microservices and event sourcing helped his team successfully build and evolve a banking services platform. 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. Vincius is a strong proponent of microservices architectures and believes in their stability and maturity for large-scale production systems.
©2017, O'Reilly Media, Inc. • (800) 889-8969 or (707) 827-7019 • Monday-Friday 7:30am-5pm PT • All trademarks and registered trademarks appearing on oreilly.com are the property of their respective owners. • firstname.lastname@example.org