关于EventSourceing的胡思乱想
这是在看了lmax架构后的一些想法
我们知道对象是随时间而变化的,每个时段当中的对象就是对象本身在这个时段变化的快照,而domainEvent是作用在某个时段上的一个动作的记录,按照lmax的架构方式是除了要记录每个时段当中作用在对象上的domainEvent外,还需要定时的去为每个对象的某个时段做快照(可以加快回放速度)。举一例子
BankAccount『
存入3$Event
存入4$Event
取出3$Event
快照
存入5$Event
』
以上情况乍看似乎没有什么问题,在单线程处理无非就是顺序处理存入。但在多线程或者分布多进程情况下问题就变复杂化了,考虑的一个重要的问题是,假如由于网络或者机器故障,造成某台操作事件无法及时持久event或者是丢失event,event就造成了断裂。例如
BankAccount『
快照
机器1 存入3$Event
丢失 存入4$Event
机器2 取出3$Event
机器2 存入5$Event
』
那向lmax这种一天一快照的方式,就会造成信息断裂,这时候就算你取到了最近的快照,也无法回放到最新的对象状态。