原文:https://blog.csdn.net/jacks_sure/article/details/52537886数据库
事件源方法有以下的优势:
- 事件即状态,发布事件就是在更新状态,所以自然具备原子性,而且不会出错
- 因为存储的是事件,而不是域对象,所以避免了对象关系抗阻不匹配的问题(object‑relational impedance mismatch problem)
- 因为存储了全部的业务状态更新事件,所以能够经过事件回放推断出任一时间点的业务实体状态架构
事件源方法也有如下这些缺点:
- 要实现一个可靠和高性能的事件仓库并非一件容易的事情
- 应用代码须要根据事件仓库的 API 进行重写
- 事件仓库只直接支持经过主键查询业务实体,所以对于复杂视图的查询比较困难(能够经过CQRS方法解决,具体参见下文)分布式
命令操做仍然经过各服务的 API 以更新事件列表的方式进行,而查询操做则经过一个统一的视图查询服务(View Query Service)完成。微服务
根据存储在事件仓库中的事件集合,能够计算获得每一个业务实体的状态,这些状态以物化视图(Materialized View)的方式存储在一个数据库中。当有新的事件产生时,也一样会自动更新视图。这样,视图查询服务就能够像查询普通的数据库数据同样实现各类查询场景。具体的设计可参考下图所示:性能
在微服务架构中,每一个微服务都有其私有数据存储,不一样的微服务可能使用不一样的数据库。这种架构带来便利的同时,也给分布式数据管理带来挑战,其中最大的挑战就是在实现跨服务的业务逻辑时,如何保持服务之间的数据一致性。.net