当前位置: 首页 > 知识库问答 >
问题:

Cadence中有哪些不同的服务,历史记录服务如何作为核心工作流引擎工作?

丁淇
2023-03-14

该文档展示了Cadence工作流服务的基本架构:它有三个不同的微服务:FE、MS和HS。那么它们是什么以及它们是如何一起工作的呢?

共有2个答案

董嘉祯
2023-03-14

我的Systems@Scale演讲解释了Temporal的整体架构以及选择这种架构的原因。

弘康安
2023-03-14
  • FE代表前端服务。大多数用户只需要知道这是Cadence服务。它主要用于将请求路由到正确的历史记录服务(HS)或匹配服务(MS)
  • 匹配服务用于将工作流/活动任务与工作流/活动工作者匹配。匹配从历史记录服务获取了任务。如果工作人员处于活动状态,任务将立即匹配,这称为“同步匹配”。如果工作线程不可用,匹配将持续到数据库中,然后在工作线程返回时重新加载任务(称为“异步匹配”)
  • 历史服务是cadence工作流引擎的核心逻辑。与其他服务相比,这是最复杂的服务。文章的其余部分将解释它如何与其他服务一起工作,作为工作流引擎的核心服务
  • 图中缺少另一个内部服务“辅助服务”。通常我们称之为“系统工人服务”“不同于客户端工作流工作者和活动工作者。该服务实现要维护的系统工作流和Cadence服务本身-是的,Cadence使用Cadence来实现自己。示例包括:启用功能时存档历史的存档工作流;父级关闭策略工作流-在父级工作流关闭时帮助关闭子级WF;批处理程序工作流提供执行诸如信令/终止等批处理操作的功能

因此,让我们以 helloworld 工作流为例,了解历史记录服务如何与其他工作流协同工作。

  • Golang Helloworld样本
  • JavaHelloworld样品

在愉快的情况下(没有超时),这个helloworld工作流将做出两个决定:

    < li >作为第一个决定,它安排了一个活动 < li >作为第二个决定,它完成了工作流
func helloWorldWorkflow(ctx workflow.Context, name string) error {
    ao := workflow.ActivityOptions{
        ...
    }
    ctx = workflow.WithActivityOptions(ctx, ao)
    var helloworldResult string

        // on executing this line, worker will respond decision result of scheduling the helloworld activity, and then `Get` will block until activity is completed by activity worker         
    err := workflow.ExecuteActivity(ctx, helloWorldActivity, name).Get(ctx, &helloworldResult)
    if err != nil {
        return err
    }

        // on executing this line, worker will respond decision result of completing the workflow 
    return nil
}

以下是历史记录服务如何与其他服务一起工作的时间线。这里用括号告诉历史事件是写的:[历史事件名称]

  • 当历史记录服务收到启动工作流请求时,它会将工作流实体和历史记录与决策任务(以及一些超时任务,我们将在将来讨论)一起保存到任务队列中。[工作流执行启动事件][决策任务调度事件]
  • 决策任务在内部也称为“转移决策任务”。(在指标中,有一个“转移活动任务决策”计数器增加)。因为它将被转移到匹配的服务。(“活跃”意味着它在全球域中处于活跃状态,我们将在以后的帖子中对此进行介绍)
  • 传输队列处理器不断轮询传输任务队列。在获得转移决策任务后,将任务推送到匹配引擎。
  • 假设有一个活动的工作流工作线程轮询(称为“轮询决策任务 API”)用于 hello world 工作流任务。然后,工作人员将收到任务并对其进行处理。[决策任务启动事件]
  • 作为决策任务的结果,将计划一个活动。“响应决策任务已完成”API 将调用具有结果的历史记录服务。
  • 历史记录处理请求 — 它记下决策 [决策任务已完成事件] [活动任务计划事件]
  • 历史记录服务还会将传输活动任务写入传输任务队列
  • 传输任务队列处理器将轮询队列并获取任务。它会将活动任务推送到匹配引擎。
  • 同样,假设活动工作线程处于活动状态 — 将“轮询活动任务”API 称为“你好世界活动”。工作人员将获得任务并对其进行处理。[活动任务已启动事件]
  • 你好世界活动很简单,工作人员会很快完成它。它将通过调用“响应活动任务已完成”API 请求返回结果
  • 历史记录将处理请求。它记下历史记录事件并安排另一个传输决策任务。[活动任务已完成事件][决策任务调度事件]
  • 再次重复决策任务处理 — 传输任务队列会将其推送到匹配服务,然后工作流工作者将从匹配引擎获取决策任务。[决策任务启动事件]
  • 作为决策任务的结果,helloworld 工作流将通过调用“响应决策任务完成”API 来决定完成工作流。
  • 当历史记录服务处理请求时,它会记下历史记录事件并完成工作流。[决策任务已完成事件][工作流执行已完成事件]

这是helloworld工作流的示例历史记录。与上面完全相同。

  • 工作流执行开始事件
  • 决策任务计划事件
  • 决策任务启动事件
  • 决策任务完成事件
  • 活动任务计划事件
  • 活动任务启动事件
  • 活动任务完成事件
  • 决策任务计划事件
  • 决策任务启动事件
  • 决策任务完成事件
  • 工作流执行完成事件
 类似资料:
  • 对于cadence来说,历史服务是一个响铃,因此如果一个新的历史服务被添加到历史服务中,每个历史服务将知道一个新的历史服务要加入。但是前端服务需要将请求路由到历史服务。前端服务如何知道还有一个历史服务要加入?

  • 问题内容: 目前,我们正在评估BPM引擎,我非常感谢社区的投入。我正在做我自己的尽职调查,但也想听听基于实施案例的建议。 我的主要评估标准如下 开源和OEM友好许可证 生产装置(成功的故事很有帮助) 提供商业支持 开放标准支持-BPMN 根据输入动态创建/组装工作流程 可嵌入的 目前,我正在评估Activiti和JBPM。Bonita开放式BPM似乎也不错,但从未使用过。你们在Bonita上有任何

  • 服务工作者可以做哪些web工作者做不到的事情?或者反之亦然? 看来web工作者是服务工作者功能的一个子集。这是正确的吗?

  • 我正在研究一个需要工作流/流程引擎的解决方案。我的工作流包含一些基于Java的进程(类)和一些Linux Shell脚本。流程不会是静态的,每个流程的执行取决于前一个流程的状态/结果,将有多条路径,路径将由前一个流程的状态确定。 我尝试查看jBPM,但没有找到合适的支持来调用shell脚本。请根据我的要求为我推荐一个合适的替代方案。 非常感谢。

  • 我正在尝试将大量文件从服务器A传输到服务器B。我已经在A上设置了FTP(使用FileZilla)。 当我尝试从PC连接到A时,它工作正常。但当我尝试从B连接到A时,它不起作用。FTP用户登录,但目录列表命令一直处于停滞状态。 防火墙端口21已打开。我尝试了多台服务器、不同的FTP客户端,但没有用。除了FileZilla,我还尝试了内置FTP服务的ISS,得到了相同的结果。 使用相同凭据从本地完美连

  • 我一定错过了一些简单的东西,但是我很难将Autowired属性分配给bean。这里贴出的所有类似答案似乎都围绕着三种解决方案之一: null 我试图制作一个最简的bean来表示我的DAO并将其注入到Web服务中。 DAO接口: DAO实现: 我错过了什么?