• Command Query Responsibility Seperation,命令查询分离
  • Event Sourcing
  • 介绍
    • 修改只记事件(日志), 查询时计算
    • CQ接口分离、代码分离,分别设计
  • 优点
    • 读操作和写操作独立伸缩,以支持不同的用量模型
  • 缺点
    • 消息驱动实现困难
      • 健壮的事件库非常关键
      • 所有操作异步化
    • 比CRUD风格复杂,不要用CQRS做顶层架构
  • 概念
    • 上下文映射的实现风格
      • 区别于CRUD风格
    • 查询方式
      • 单数据库/读写分离,查询时计算事件
      • 读写分离, 读库异步计算事件保存冗余, 读库负载均衡
    • 领域事件
    • 查询(query)
      • 读者模型
    • 命令(command)
      • 请求系统执行某种操作来改变系统状态
      • 1个接收实体,相应的Aggregates
      • 没有返回值的异步操作
      • 实现命令总线
      • 写者模型
    • 流程管理器
      • 协调Aggregates行为的类
      • 一般是状态机实现
      • 简单的规则来判断传送哪些命令,不包含业务逻辑
    • 一致性边界
  • 实现注意
    • 加入弹性
      • 事件存储
      • 幂等性和标记处理
        • 发送端
          • 未保存状态崩溃重传
          • 已保存状态崩溃重传
        • 接收端
          • 处理未标记重复处理
          • 超时重复处理
          • 特别状态不能安全地执行
        • 处理方式
          • 幂等性
          • 确保发送成功
    • 优化性能
      • 界面优化
      • 基础设施优化
        • 异步收发
        • 命令处理优化
          • 进程内部处理
        • 使用快照和事件源
          • 保存aggregate最近状态
        • 事件并行发布
        • 消息过滤
        • 缓存信息
        • 总线划分
    • 牢靠的消息和保存基础设施
    • 系统化的流程管理器