事件溯源Event Sourcing

事件溯源是一种记录应用程序所有更改的方式,通过保存对象经历的每个事件而非当前状态。这种方式可以实现完全重建、时态查询和事件回放。事件溯源与CQRS(命令查询职责分离)密切相关,常用于需要数据完整变化记录、并发更新处理和业务分析的场景。但其也存在事件存储、性能和重构挑战等问题。
摘要由CSDN通过智能技术生成
一. 什么是Event Sourcing?

一个对象从创建开始到消亡会经历很多事件,以前我们是在每次对象参与完一个业务动作后把对象的最新状态持久化保存到数据库中,也就是说我们的数据库中的数据是反映了对象的当前最新的状态。而事件溯源则相反,不是保存对象的最新状态,而是保存这个对象所经历的每个事件,所有的由对象产生的事件会按照时间先后顺序有序的存放在数据库中。可以看出,事件溯源的这种做法是更符合事实观的,因为它完整的描述了对象的整个生命周期过程中所经历的所有事件。
事件溯源是把应用程序的所有变动都保存在一个事件序列。我们不仅可以查询这些事件,还可以通过事件日志重新构建过去任何时候的状态,并自动调整状态来应对追溯过的变化。使用事件溯源后,最显而易见的成果就是我们掌握了所有活动的轨迹。事件溯源的关键是要确领域对象的所有变化都由事件对象触发。这样基于事件日志可以建立很多机制:
• 完全重建:可以完全不理会应用现在的状态,因为我们可以在空应用上运行事件日志中的事件来重现应用的当前状态。
• 时态查询:我们可以查看任何时间点的系统状态,可以通过从空白状态重新运行事件直到特定的时间点或事件来实现。进一步可以使用多个时间线(类似于版本控制中的分支)。
• 事件回放:如果我们发现过去某个事件有问题,我们可以回到这个事件点,然后重播正确事件和后续事件。(或者直接忽略系统状态,按顺序重放所有事件和正确事件。)类似的技术可以处理错误顺序的事件流,这是异步消息通信的系统常见的问题。
那么,事件到底如何影响一个领域对象的状态的呢?很简单,当我们在触发某个领域对象的某个行为时,该领域对象会先产生一个事件,然后该对象自己响应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值