- 微服务设计模式教程 (Microservices Design Patterns Tutorial)
- 微服务设计模式 - 首页 (Microservices Design Patterns - Home)
- 微服务设计模式 - 概述 (Microservices Design Patterns - Overview)
- 分解设计模式 (Decomposition Design Patterns)
- 按业务能力分解 (Decompose by Business Capability)
- 按子域分解 (Decompose by Subdomain)
- 按绞杀者模式分解 (Decompose by Strangler)
- 集成设计模式 (Integration Design Patterns)
- API 网关 (API Gateway)
- 聚合器 (Aggregator)
- 代理 (Proxy)
- 客户端UI组合 (Client Side UI Composition)
- 责任链 (Chain Of Responsibilities)
- 分支 (Branch)
- 数据库设计模式 (Database Design Patterns)
- 每个服务一个数据库 (Database per Service)
- 共享数据库 (Shared Database per Service)
- 命令查询职责分离器 (Command Query Responsibility Segregator)
- Saga 事务模式
- 异步消息 (Aysynchronous Messaging)
- 事件溯源 (Event Sourcing)
- 可观测性设计模式 (Observability Design Patterns)
- 日志聚合 (Log Aggregation)
- 性能指标 (Performance Metrics)
- 分布式追踪 (Distributed Tracing)
- 健康检查 (Health Check)
- 横切关注点设计模式 (Cross Cutting Concern Design Patterns)
- 外部配置 (External Configuration)
- 服务发现 (Service Discovery)
- 断路器 (Circuit Breaker)
- 蓝绿部署 (Blue Green Deployment)
- 有用资源 (Useful Resources)
- 快速指南 (Quick Guide)
- 有用资源 (Useful Resources)
- 讨论 (Discussion)
命令查询职责分离器 (Command Query Responsibility Segregator)
问题陈述 (Problem Statement)
微服务架构将应用程序构建为一组松散耦合的微服务,每个服务都可以以敏捷的方式独立开发,以实现持续交付/部署。如果我们使用了每个服务一个数据库的设计模式,那么如何执行需要来自多个服务数据的查询?
解决方案 (Solution)
我们可以定义一个只读视图数据库来支持所需的查询。应用程序将通过订阅拥有数据的服务触发的事件来保持视图数据库的最新状态。在此设计模式中,我们将更新操作和读取操作分离开来。一个服务只读取数据,其他服务更新数据。
为了实现此模式,我们通常需要重构领域模型以支持单独的查询数据和更新数据操作,以便每个操作都可以由微服务独立处理。CQRS 模式确保读取数据的操作与更新数据的操作分离。因此,一个操作可以读取或写入数据,但不能同时执行两者。
现在,多个服务可以更新记录并将事件发送到应用程序以更新视图数据库。这有助于查询服务获取一致的数据,而不会影响性能。
广告 (Advertisements)