Code[ish]
47. Working with an Event-Driven Architecture
Robert Blumen is a Dev Ops engineer at Salesforce. He's interviewing Alexey Syomovich, a software engineering principle architect at Salesforce, with over 25 years of experience. Their conversation begins with what constitutes an event (an immutable record encoding something that happened to an app). They then move on to describe consumers of those events, whether they're internal to an app or external to other services and business departments. Finally, they discuss ways in which you can store that event, either in a database or a running event log.
Databases and event logs each have their strengths and weaknesses, which Alexey enumerates. Event logs, for example, are easier to write to; but databases are easier to query for information. In general, Alexey believes that it can be important to organize your larger systems around an event log.
The conversation concludes with a discussion on how to use an event log in practical ways. First, you'll need to decide the schema to use when representing an event. State transitions are another reality to consider. If multiple events representing the same action come in, you need to make sure that the event log is atomic. Finally, there's a question of precisely how many events to retain, how far back you store your application's state.
Links from this episode
- OK Event Log (the architecture files episode 3) by Ian Varley
- Apache Kafka
- CQRS Pattern by Martin Fowler
- Event-driven architecture
- How Apache Kafka Inspired Our Platform Events Architecture by Alexey Syomichev
- About event-driven driven_architecture
- Protobufs and Apache Avro are two ways in which you can serialize an event.