在微服务中实现查询操作有两种不同的模式:API组合模式和命令查询职责隔离(CQRS)模式
API组合模式
这个模式通过调用拥有数据的服务并组合结果来实现查询操作。有两种类型的参与者:
- API组合器
- 数据提供方服务
由谁来担任API组合器
- 客户端,例如前端
- API Gateway
- 将API组合器实现为独立的服务
优势和劣势
这种模式的优势是,实现简单。
劣势:
增加了额外的开销:要么组合数据,要么多次调用。例如前端的列表,需要多次调用或者自己组合
带来可用性降低的风险:解决方式可以使用缓存,缓存数据提供方的数据,或者在数据提供方不可用时,返回不完整的数据
缺乏事务数据一致性:两个数据提供方的数据,可能不一致。
命令查询职责隔离(CQRS)模式
命令查询职责隔离(Command Query Responsibility Segregation, CQRS)模式,将持久化数据模型和使用数据的模块分为两个部分:命令端和查询端。
命令端模块和数据模型实现创建、更新和删除操作。
查询端模块和数据模型实现查询。
CQRS不仅可以在服务中应用,还可以以此模式定义查询服务。
查询服务通过订阅由一个或多个服务发布的时间,来确保它的数据是最新的。
优势和劣势
优势:
在微服务架构中高效的实现查询
支持多种不同的查询类型,可以定义特定的视图,帮助高效查询
隔离命令端和查询端
弊端:
结构复杂
数据复制有延迟。 可以提供版本信息,进行解决方案。
设计CQRS视图
设计CQRS视图,需要考虑一下几个问题
- 底层数据库的选择
- 数据访问模块,需要是幂等的,支持并发更新。可以使用乐观锁获者悲观锁,保证并发处理。
- 实现新视图或更改时,需要考虑构建或重建视图。可以使用归档事件恢复视图,或者使用快照的方式,短期备份。
- 应对复制延迟
网友评论