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