传奇,流程管理器和基于文档的方法有什么区别?

时间:2013-03-20 15:35:33

标签: cqrs

据我所知,这三个概念都与长期交易有关。

据我所知,进程管理器是一个有限状态机,它只对事件做出反应并发出命令。它不包含任何业务逻辑,只是路由。它的目标是让您进入最终状态,在那里您知道您的交易成功或失败。

到目前为止,非常好。

但现在我的理解开始了:

  • 与流程经理相比,什么是传奇?
  • 还有CQRS sagas - did I understand them right?中提到的基于文档的方法......据我所知,文档只是一张“纸条”,您可以在其中记笔记并随身携带。这如何适合命令和事件的概念?

任何人都可以解释这些差异,并且 - 我特别感兴趣的是 - 这些概念中的哪一个对于什么是好的,什么时候你需要什么。它们是互相排斥的吗?你可以只用其中一个一路走吗?您是否需要多个场景? ...?

5 个答案:

答案 0 :(得分:38)

  

与流程经理相比,什么是传奇?

这些模式的意图是不同的。流程管理器是一种工作流模式,正如您所说,它可以构建在状态机之上。进程管理器将保留消息之间的状态,并将包含逻辑以确定响应消息应采取的操作(例如,转换状态或发送另一个消息)。有些框架错误地将这些称为传奇。

相比之下,一个传奇(根据原始定义)是一种旨在帮助管理失败的模式。它涉及跨系统的多个工作流程,在其他地方发生故障的情况下,每个工作流程都允许在以后的事务中采取某种形式的补偿操作

这种补偿是传奇的定义特征。请注意,saga本身并不知道补偿操作可能是什么。 Sagas通常使用路由滑动模式实现。

  

他们互相排斥吗?你可以只用其中一个一路走吗?

它们不是互斥的 - 例如,参与传奇的系统可能会使用流程管理器来实际处理其处理。

其他资源

其中一些帖子可能有助于提供更多细节并提供示例:

答案 1 :(得分:26)

在MSDN上查看CQRS Journey项目:

http://msdn.microsoft.com/en-us/library/jj591569.aspx

  

澄清术语

     

术语saga通常用于讨论CQRS以引用a   在有界区域之间协调和路由消息的代码片段   上下文和聚合。但是,出于本指南的目的,我们   我更喜欢使用术语流程管理器来引用这种类型的代码   神器。这有两个原因:

     

有一个众所周知的,预先存在的术语saga的定义,其含义与通常所理解的含义不同。   与CQRS的关系。   术语流程管理器是对此类代码工件执行的角色的更好描述。

     

虽然术语saga经常用于CQRS   模式,它有一个预先存在的定义。我们选择使用   本指南中的术语流程管理器,以避免与此混淆   预先存在的定义。

     

与分布式系统相关的术语saga最初是   Hector Garcia-Molina和Kenneth在论文“Sagas”中定义   萨利姆。本文提出了一种机制,它称之为传奇   替代使用分布式事务来管理   长期运营的业务流程。该文件承认该业务   流程通常由多个步骤组成,每个步骤都是如此   涉及交易,可以实现整体一致性   通过将这些单独的事务分组为分布式   交易。但是,在长期运行的业务流程中,使用   分布式事务可能会影响性能和并发性   由于必须在持续时间内保持锁定而导致系统崩溃   分布式交易。

答案 2 :(得分:8)

Saga在进程管理器处没有状态。

另一个区别 - 进程管理器是状态机,Saga不是。

佐贺没有

  • 州机状态
  • 数据状态(一些持久数据)

..和Process Manager已经

  • 州机状态
  • 数据状态(一些持久数据)

在我的博客中阅读更多内容: http://blog.devarchive.net/2015/11/saga-vs-process-manager.html

答案 3 :(得分:4)

Saga和Process Manager是两种集成模式。它们非常相似,但不完全相同。

  • 传奇是一种模式,可以帮助您将跨越多个服务的每个业务交易作为一个传奇来实现。实际上,您将创建一系列本地事务,其中每个本地事务都会更新数据库并发布消息或事件以触发传奇中的下一个本地事务。有两种实现传奇的可能方法:编排(协调器告诉参与者要执行哪些本地事务)和编排(每个本地事务发布触发其他服务中本地事务的域事件)。使用Saga决定CQRS和EventSourcing的使用是非常普遍的。
  • 过程管理器是一个存在的处理单元,用于维护序列状态并根据中间结果确定下一步处理步骤。这是一个路由模式。更像是Orchestrator Saga。

答案 4 :(得分:2)

当在设计时可能不知道所需的步骤并且可能不是连续的时,Process Manager和saga都会通过多个处理步骤路由消息。

流程管理器模式是一个持久的事件调度程序,它封装了流程特定的逻辑,并维护一个中心控制点,决定流程完成后要执行的下一步操作。流程经理维护状态,例如说从客户处获得了付款,现在必须将订单发送给他们的事实将保留在流程管理器中。

佐贺经理模式。 封装流程逻辑,决定流程完成后要执行的操作。一个saga没有状态,因此完全基于传入消息或事件的内容决定下一步做什么。因此,在流程进行付款的情况下,该流程还会创建一条新消息,指示现在必须发送订单,包括需要发送的订单以及向谁发送订单。该邮件还包含其他付款信息,因此如果发送订单出错,付款将被退还。