(no title)
nateroling | 4 months ago
“Event replay: if we want to adjust a past event, for example because it was incorrect, we can just do that and rebuild the app state.”
nateroling | 4 months ago
“Event replay: if we want to adjust a past event, for example because it was incorrect, we can just do that and rebuild the app state.”
manoDev|4 months ago
There are two kinds of adjustments: an adjustment transaction (pontual), or re-interpreting what happened (systemic). The event sourcing pattern is useful on both situations.
Sometimes you need to replay events to have a correct report because your interpretation at the time was incorrect or it needs to change for whatever reason (external).
Auditing isn't about not changing anything, but being able to trace back and explain how you arrived at the result. You can have as many "versions" as you want of the final state, though.
refset|4 months ago
unknown|4 months ago
[deleted]
r1cka|4 months ago
mirekrusin|4 months ago
zsoltkacsandi|4 months ago
kabes|4 months ago
mrkeen|4 months ago
Like buggy data that crashes the system.
If you have the old events there, you can "measure twice, cut once", in the sense that you can keep re-running your old events and compare them to the new events under unit-test conditions, and be absolutely sure that your history re-writing won't break anything else.
It's not for just doing a refund or something.
javcasas|4 months ago
saxenaabhi|4 months ago
Consider the update_order_item_quantity event in a classic event sourced systems. It's not possible to guarantee that two waiters dispatching two such events at same time when current quantity is 1 would not cause the quantity to become negative/invalid.
If the data store allowed for mutability and produced an event log it's easy:
Instead of dispatching the update_order_item_quantity you would update the order document specifying the current version. In the previous example second request would fail since it specified a stale version_id. And you can get the auditability benefits of classic event sourcing system as well because you have versions and an event log.
This kind of architecture is trivial to implement with CouchDB and easier to maintain than kafka. Pity it's impossible to find managed hosting for CouchDB outside of IBM.
throwup238|4 months ago
Without preemptive defensive coding in your aggregates (whatever you call them) this can quickly blow up in your face.
speed_spread|4 months ago
kabes|4 months ago