首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cadence中有哪些不同的服务,历史记录服务如何作为核心工作流引擎工作?

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

Stack Overflow用户
提问于 2021-09-26 02:45:06
回答 2查看 108关注 0票数 0

这个doc展示了Cadence工作流服务的基本架构:它有三个不同的微服务: FE、MS和HS。那么它们是什么,它们是如何协同工作的呢?

EN

回答 2

Stack Overflow用户

发布于 2021-09-26 02:45:06

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

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

  • 作为第一个决策,它调度一个活动作为第二个决策,它完成了

代码语言:javascript
复制
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
}

这是历史记录服务如何与其他服务一起工作的时间表。这里使用括号来告诉历史事件是写的:HistoryEventName

  • 当历史记录服务收到启动工作流请求时,它会将工作流实体和历史记录保存到数据库中,同时将决策任务(以及一些超时任务,我们将在以后讨论)保存到任务队列中。因为它将被转移到匹配服务。(" active“表示它在全局域中处于活动状态,我们将在以后的帖子中介绍这一点)
  • 传输队列处理器保持轮询传输任务队列。在获得转移决策任务时,它会将该任务推送到匹配engine.
  • Assuming。对于hello world工作流任务,有一个活动的工作流工作线程轮询(调用“PollForDecisionTask API”)。通过results.
  • History处理请求,历史服务调用“RespondDecisionTaskCompleted”API -它写下决策DecisionTaskCompletedEvent
  • History服务,还写下传输活动任务到传输任务queue
  • Transfer任务队列处理器将轮询队列并获得任务。它将推送activity任务以匹配engine.
  • Again,,假设activity worker处于活动状态--为hello world活动调用“PollForActivityTask”API。再次对决策任务进行DecisionTaskScheduledEvent
  • Repeat处理--传输任务队列将其推送到匹配服务,然后工作流工作者从匹配引擎中获取决策任务。DecisionTaskStartedEvent
  • As决策任务的结果,helloworld工作流会通过调用RespondDecisionTaskComplete接口做出完成工作流的决定。
  • 历史记录服务处理请求时,记录历史事件,完成工作流。DecisionTaskCompletedEvent

This is the sample history of the helloworld workflow。它和上面的完全一样。

  • WorkflowExecutionStartedEvent
  • DecisionTaskScheduledEvent
  • DecisionTaskStartedEvent
  • DecisionTaskCompletedEvent
  • ActivityTaskScheduledEvent
  • ActivityTaskStartedEvent
  • ActivityTaskCompletedEvent
  • DecisionTaskScheduledEvent
  • DecisionTaskStartedEvent
  • DecisionTaskCompletedEvent
  • WorkflowExecutionCompletedEvent
票数 1
EN

Stack Overflow用户

发布于 2021-09-26 20:27:22

我的Systems@Scale talk解释了时态的整体架构,以及选择这种架构的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69331430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档