博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
架构模式: Saga
阅读量:5170 次
发布时间:2019-06-13

本文共 1296 字,大约阅读时间需要 4 分钟。

架构模式: Saga

上下文

您已应用每服务数据库模式。每个服务都有自己的数据库。但是,某些业务事务跨越多个服务,因此您需要一种机制来确保服务之间的数据一致性。例如,假设您正在建立一个客户有信用额度的电子商务商店。申请必须确保新订单不会超过客户的信用额度。由于订单和客户位于不同的数据库中,因此应用程序不能简单地使用本地ACID事务。

问题

如何跨服务维护数据一致性?

要点

  • 可以不选择2PC

结论

实现跨越多个服务的每个业务事务作为传奇。传奇是一系列本地交易。每个本地事务都更新数据库并发布消息或事件以触发saga中的下一个本地事务。如果本地事务因违反业务规则而失败,则saga会执行一系列补偿事务,以撤消先前本地事务所做的更改。

 

协调sage有两种方式:

  • Choreography - 每个本地事务发布触发其他服务中的本地事务的域事件
  • Orchestration - 一个orchestrator(上帝对象)告诉参与者要执行的本地事务

例子: Choreography-based saga

 

 

使用此方法的电子商务应用程序将使用基于 Choreography-based saga创建订单,包含以下步骤:

  1. Order Service创建处于挂起状态的订单并发布OrderCreated事件
  2. Customer Service收到事件尝试为该订单保留信用。它发布Credit Reserved事件或CreditLimitExceeded事件。
  3. Order Service接收事件并将订单状态更改为已批准或已取消

例子: Orchestration-based saga

 

使用此方法的电子商务应用程序将使用基于Choreography-based saga创建订单,包含以下步骤:

  1. Order Service创建处于暂挂状态的订单并创建CreateOrderSaga
  2. CreateOrderSaga向Customer Service 发送ReserveCredit命令
  3. Customer Service尝试为该订单保留信用额并发回回复
  4. CreateOrderSaga接收回复并向Order Service发送ApproveOrder或RejectOrder命令
  5. Order Service将订单状态更改为已批准或已取消

结论上下文

这种模式具有以下好处:

  • 它使应用程序能够跨多个服务维护数据一致性,而无需使用分布式事务

该解决方案具有以下缺点:

  • 编程模型更复杂。例如,开发人员必须设计补偿事务,以明确撤消先前在saga中所做的更改。

还有以下问题需要解决:

  • 为了可靠,服务必须以原子方式更新其数据库并发布消息/事件。它不能使用跨越数据库和消息代理的分布式事务的传统机制。相反,它必须使用下面列出的模式之一。

关联模式

    • 每个服务独立数据库模式创建了对此模式的需求
    • 以下模式是以原子方式更新状态和发布消息/事件的方法:
      • 事件溯源
      • 交易发件箱
    • 基于Choreography可以使用聚合和域事件发布事件

转载于:https://www.cnblogs.com/paxlyf/p/11290604.html

你可能感兴趣的文章
k8s Custom Resource
查看>>
BytePS源码解析
查看>>
【C++】非原创|统计代码覆盖率(一:C)
查看>>
JSP 获取Request 经常使用參数
查看>>
第三次作业
查看>>
c#使用 Newtonsoft.Json 将entity转json时,忽略为null的属性
查看>>
thinkphp5--多文件入口设置
查看>>
连接mysql数据库,创建用户模型
查看>>
关于正则表达式 \1 \2之类的问题
查看>>
DRL前沿之:Benchmarking Deep Reinforcement Learning for Continuous Control
查看>>
django uWSGI nginx搭建一个web服务器 确定可用
查看>>
3.4 数据更新
查看>>
java拷贝字符文件
查看>>
POJ 2234
查看>>
HTTP请求与响应协议
查看>>
最新wp建站做淘宝客系统教程(共6课)附源码
查看>>
半边数据结构(The_Half-Edge_Data_Structure)
查看>>
获取全部校园新闻
查看>>
jquery
查看>>
【BZOJ】1085 [SCOI2005]骑士精神(IDA*)
查看>>