38
EVENT SOURCING THE WAYBACK MACHINE FOR YOUR DATA

THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCINGTHE WAYBACK MACHINE FOR YOUR DATA

Page 2: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

WHO AM I?

▸ Chris Hansen

▸ Currently

▸ CTO @

▸ Formerly

▸ Board member @

▸ Senior Architect @

▸ Architect @

Page 3: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

WHO ARE YOU?

▸ What’s event sourcing?

▸ I’ve heard of event sourcing

▸ I’ve implemented event sourcing

▸ I’m stuck maintaining Chris’ first-attempt at event sourcing

Page 4: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

ACTIVE RECORD PATTERN

Page 5: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is
Page 6: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

TABLES ARE NOT OBJECTS. THEY NEVER WERE; AND NEVER WILL BE.

Uncle Bob Martin

EVENT SOURCING

Page 7: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

OBJECT/RELATIONAL MAPPING IS THE VIETNAM OF COMPUTER SCIENCE

Ted Neward

EVENT SOURCING

Page 8: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

Page 9: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

QUICK POLL

▸ In our app(s) we don’t delete user data

▸ We also don’t have any UPDATE statements (or the equivalent for NoSQL, etc.)

▸ Conceptually an UPDATE is an atomic DELETE + INSERT

Page 10: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

YOUR USERS’ DATA IS MORE VALUABLE THAN THE DISK IT’S STORED ON.

Chris Hansen

EVENT SOURCING

Page 11: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

WHAT IS EVENT SOURCING?

▸ Persist every event (i.e. state change) instead of persisting the current state

▸ Events are immutable

▸ Events are stored in an append-only event store

▸ Current state is calculated by processing each event in order

Page 12: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

PERSIST EVENTS

Page 13: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

CALCULATE CURRENT STATE

Page 14: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

▸ Benefits + HR suite for small businesses

▸ Following examples are a bit simplified

Page 15: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

PERSIST EVENTS

Page 16: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

CALCULATE CURRENT STATE

Page 17: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

O(n) QUERIES

Page 18: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

SIDE-EFFECTS

Page 19: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

PREVENTING DUPLICATE SIDE-EFFECTS

▸ Decouple state changes from side-effects

▸ Async processing of side-effects

▸ “Watch” the event store for new events

▸ Async means eventually consistent

Page 20: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING PROS

Page 21: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

EVENT SOURCING PROS

▸ Automatic audit log

▸ Decouple persistence from domain model

▸ Ability to query state at any point in the past

▸ Async communication across service boundaries

▸ Derive value from past events

▸ Ability to replay past events

Page 22: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

EMERGING REQUIREMENTS, PAST EVENTS

▸ Example: Identify VIPs

▸ An Employee is a VIP if they have received 2 promotions within 2 years

▸ They get special treatment and offers in-app

▸ Subscribe to EmployeePromoted events in the event store

▸ Replay past events to determine starting list of VIPs

Page 23: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

DATA MINING

▸ Event store is a rich source of data for analytics

▸ Example: Predictive analytics

▸ Given what users of your system have done, try to predict what they might want to do next

▸ Use existing events as training data for ML algorithm

▸ Fine-tune the algorithm, re-train, repeat

Page 24: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

FIXING CORRUPT DATA

▸ Scenario 1: Missing side-effects

▸ Fix the bug

▸ Identify and replay affected events for their side-effects

Page 25: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

FIXING CORRUPT DATA

▸ Scenario 2: Incorrect side-effects

▸ Fix the bug

▸ Identify and undo incorrect side-effects

▸ Identify and replay affected events for their side-effects

Page 26: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING CHALLENGES

Page 27: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

CONCURRENT WRITES

Page 28: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

OPTIMISTIC LOCKING

▸ Add a version id to each event

▸ Invariant: (object id, version id) pair is unique

▸ Event store rejects all but one concurrent write based on duplicate (object id, version id) pair

Page 29: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

SCALING QUERIES

Page 30: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

SNAPSHOTTING

▸ Create a materialized view which is a snapshot of your data at a point in time

▸ Query for current state:

▸ Read the latest snapshot

▸ Apply any events newer than the snapshot

Page 31: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

COMMAND QUERY RESPONSIBILITY SEPARATION (CQRS)

▸ Treating reads differently from writes in a software system

▸ Command: an operation that modifies data

▸ Query: an operation that reads data

Page 32: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

WHEN TO USE CQRS

▸ Disparity between reads and writes

▸ Vastly differing requirements for throughput, scalability, security, availability, reliability, responsiveness, audit-ability, etc.

Page 33: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

TWITTER TIMELINES

▸ Evolved from a monolithic Rails app (Monorail) to highly distributed, decoupled architecture

▸ Fully synchronous until 2010

▸ Write: 5K/s avg., 7K/s daily peak, 12K/s for large events

▸ Read: 300K/s for timelinesSource: Timelines at Scale by @raffi, QCon SF 2012

Page 34: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

O(n) writes O(1) reads

Page 35: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

EVENT SOURCING CHALLENGES

▸ Unfamiliarity / added complexity

▸ Forced eventual-consistency

▸ Lack of mature libraries

▸ Lack of mature event store implementations

▸ geteventstore.com

▸ Apache Kafka might work

Page 36: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

WHEN SHOULD I USE EVENT SOURCING?

▸ Audit-ability or version control is critical

▸ You can derive business value out of event data

▸ Inherently non-CRUD (e.g. event-driven) domain

▸ Scalability forces you into CQRS

▸ You have rich domain models (e.g. DDD)Credit: Event sourcing in practice (Reitzammer & Seitz)

Page 37: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

EVENT SOURCING

UTAH SOFTWARE ARCHITECTURE MEETUP

▸ Monthly

▸ Small group

▸ Presenter with roundtable discussion

Page 38: THE WAYBACK MACHINE FOR YOUR DATA EVENT SOURCINGfiles.meetup.com/7578512/event-sourcing.pdf · EVENT SOURCING WHEN SHOULD I USE EVENT SOURCING? Audit-ability or version control is

QUESTIONS?