Event sourcing是否只适用于稳定业务

CQRS+ES我们已经在生产环境中使用了,但实际使用中感觉对业务变化并不如想象中的灵活

比如当业务发生变化时,如果修改了event的相关定义,那么所有已经在event store中存储的event则可能在Event sourcing时发生错误,比如缺少某些字段,这让我们在业务发展时必须小心翼翼的进行修改,有时甚至需要用脚本处理历史event以适应新的定义

如果业务经常变更的话,是否Event sourcing并不适用

ES虽然是动态事件,但是也依赖于静态于结构,DDD聚合要划分到位,然后追踪聚合根发生的领域事件,领域事件不是领域所有事件,而是会在其他地方引起反应的事件,将这些领域事件保存起来。ES中的Event是指这些事件,很显然,Event中携带的数据格式于聚合根结构有关,如果聚合根变动,那么Event也会改变,所以,不能一概而论ES只适合稳定业务,而是适合对业务透彻理解,能够抓住聚合根结构的系统。

另外从技术上看,建议Event携带业务数据时最好只带业务数据的Id,业务数据存储与事件存储分离,这样也能做到解耦业务数据结构对事件的影响。

理解了,透彻

不过,如果不结合DDD实现ES,就类似区块链那种需要不可变性,也就是事件结构比较简单,一旦生成就不会再改变,比如微博发完就不能修改,只有删除,在这种情况下ES适合简单的业务结构,如果业务复杂,就需要DDD来找出简单的微结构:聚合。