CQRS 模式 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

CQRS 模式

命令查询责任分割 (CQRS) 模式将数据突变或系统的命令部分与查询部分分开。如果更新和查询对吞吐量、延迟或一致性的要求不同,则可以使用 CQRS 模式将其分开。CQRS 模式将应用程序分为两个部分,即命令端和查询端,如下图所示。命令端处理 createupdate、和 delete 请求。查询端使用只读副本来运行 query 部分。

CQRS 模式的高级视图

此图显示以下流程:

  1. 企业通过通过 API 发送命令与应用程序进行交互。命令是创建、更新或删除数据之类的操作。

  2. 应用程序在命令端处理传入的命令。这包括验证、授权和运行操作。

  3. 应用程序将命令的数据保存在写入(命令)数据库中。

  4. 将命令存储在写入数据库中后,会触发事件以更新读取(查询)数据库中的数据。

  5. 读取(查询)数据库处理并保留数据。读取数据库旨在针对特定的查询要求进行优化。

  6. 业务与读取 API 交互,向应用程序的查询端发送查询。

  7. 应用程序在查询端处理传入的查询,并从读取的数据库中检索数据。

您可以使用各种数据库组合来实现 CQRS 模式,包括:

在下图中,NoSQL 数据存储(例如 DynamoDB)用于优化写入吞吐量并提供灵活的查询功能。因此,在添加数据时,就能在具有明确定义的访问模式的工作负载上实现较高的写入可扩展性。诸如 Amazon Aurora 之类的关系数据库提供了复杂的查询功能。DynamoDB 流将数据发送到更新 Aurora 表的 Lambda 函数。

使用服务实现的 CQRS 模式 AWS

使用 DynamoDB 和 Aurora 实现 CQRS 模式可带来以下主要好处:

  • DynamoDB 是一个完全托管的 NoSQL 数据库,可以处理高容量写入操作,而 Aurora 为查询端的复杂查询提供了很高的读取可扩展性。

  • DynamoDB 提供低延迟、高吞吐量的数据访问,因此非常适合处理命令和更新操作,并且可以针对复杂查询对 Aurora 性能进行微调和优化。

  • DynamoDB 和 Aurora 都提供无服务器选项,这使您的企业能够仅根据使用量为资源付费。

  • DynamoDB 和 Aurora 是完全托管的服务,可减轻管理数据库、备份和可扩展性的运营负担。

在以下情况下,您应该考虑使用 CQRS 模式:

  • 您实现了该 database-per-service 模式,并希望联接来自多个微服务的数据。

  • 您的读取和写入工作负载对扩展、延迟和一致性有不同的要求。

  • 读取查询的最终一致性是可以接受的。

重要

CQRS 模式通常会在数据存储之间实现最终一致性。