关于Akka在事件溯源的若干思考

谈及CQRS,一定离不开Event Sourcing的讨论。首先阐明一个问题,Event Sourcing是否是必须的?主要是两点顾虑:
- 引入Event Sourcing会带来一定额外开销,因为要将每次的Event按一定顺序存储下来。这样做是因为在分布式并发较大的情况下,可以保证CAP的最终一致性。因为传统数据库事务的回滚操作,在分布式环境操作显然是不切实际的,你不可能让每个请求处理都交给数据库去处理,这样会给数据库带来压力。
- 由于领域驱动设计理念,不可避免要记录Entity的状态。Event会改变Entity的State,一方面持久化Event可以方便对State进行回滚,对应PersistenceActor的snapshot;另一方面,Entity的事件需要进行pub-sub通信模式,实现解耦。但State并不是领域驱动设计阐述的内容,它是一种编程模式或一种架构方法。例如React的Redux设计了State,用于描述事件发生,记录已经改变了组件或模型的State。

