【转】 微服务架构之事件驱动架构

原文:https://blog.csdn.net/jacks_sure/article/details/52537886

事件源方法有如下的优点: 
- 事件即状态,发布事件就是在更新状态,因此天然具有原子性,并且不会出错 
- 由于存储的是事件,而不是域对象,因此避免了对象关系抗阻不匹配的问题(object‑relational impedance mismatch problem) 
- 由于存储了所有的业务状态更新事件,因此可以通过事件回放推断出任一时间点的业务实体状态

事件源方法也有以下这些缺点: 
- 要实现一个可靠和高性能的事件仓库并不是一件容易的事情 
- 应用代码需要根据事件仓库的 API 进行重写 
- 事件仓库只直接支持通过主键查询业务实体,因此对于复杂视图的查询比较困难(可以通过CQRS方法解决,具体参见下文)

命令操作仍然通过各服务的 API 以更新事件列表的方式进行,而查询操作则通过一个统一的视图查询服务(View Query Service)完成。

根据存储在事件仓库中的事件集合,可以计算得到每个业务实体的状态,这些状态以物化视图(Materialized View)的方式存储在一个数据库中。当有新的事件产生时,也同样会自动更新视图。这样,视图查询服务就可以像查询普通的数据库数据一样实现各种查询场景。具体的设计可参考下图所示:

结论

在微服务架构中,每个微服务都有其私有数据存储,不同的微服务可能使用不同的数据库。这种架构带来便利的同时,也给分布式数据管理带来挑战,其中最大的挑战就是在实现跨服务的业务逻辑时,如何保持服务之间的数据一致性。

猜你喜欢

转载自www.cnblogs.com/danni505/p/9211053.html