Event-driven architectures
enable nicely decoupled microservices and are fundamental for decentral data
management. However, using peer-to-peer event chains to implement complex
end-to-end logic crossing service boundaries can accidentally increase
coupling. Extracting such business logic into dedicated services reduces
coupling and allows to keep sight of larger-scale flows - without violating
bounded contexts, harming service autonomy or introducing god services. Service
boundaries get clearer and service APIs get smarter by focusing on their potentially
long running nature. We will demonstrate how the new generation of lightweight
and highly-scalable state machines ease the implementation of long running
services. Based on our real-life experiences, we will share how to handle
complex logic and flows which require proper reactions on failures, timeouts
and compensating actions and we provide guidance backed by code examples to
illustrate alternative approaches.
For over a decade I have been working in complex domains like energy trading, telecommunication or wind tunnel organization. As a coder, I have a soft spot for readable and testable APIs and enjoy working with sophisticated but lean state machines and process engines. As a domain “decoder”, I am into Domain-Driven Design and integrate methods which shift my focus from technology to the user value of what I do. I am contributor to several projects on GitHub and speak at meetups and conferences like ExploreDDD, O'Reilly’s and KanDDDinsky. I blog at plexiti.com and publish in magazines like InfoQ and OBJEKTspektrum, a well-read german periodical for which I am editorial member. In my hometown Vienna I organize meetups around Microservices and DDD.