命令查询职责分离器
问题陈述
微服务架构将应用程序构建为一组松散耦合的微服务,每个服务都可以以敏捷的方式独立开发,以实现持续交付/部署,如果我们使用每个服务一个数据库设计模式,那么如何进行需要来自多个服务的数据的查询服务。
解决方案
我们可以定义一个视图数据库,它是只读数据来支持所需的查询。应用程序将通过订阅拥有数据的服务引发的事件来保持视图数据库最新。在此设计模式中,我们将更新和读取操作分开。一项服务将仅读取数据,其他服务将更新数据。
为了实现这种模式,我们经常需要重构领域模型以支持单独的查询数据和更新数据的操作,以便每个操作都可以由微服务独立处理。CQRS 模式确保读取数据的操作与更新数据的操作分开。因此,一个操作可以读取或写入数据,但不能同时执行两者。
现在,多个服务可以更新记录并将事件发送到应用程序以更新视图数据库。这有助于查询服务获得一致的数据,而不会影响性能。