我想在普罗米修斯监控当前运行的节奏工作流的数量。
我检查了由不同的cadence服务(如< code>cadence_history 、< code>cadence_worker 、< code>cadence_frontend等)导出的指标,我能找到的唯一与工作流相关的指标是:
activity_end_to_end_latency直方图
(workflowType是标签之一)
工作流成功计数器
因此,似乎有一些指标可以分析已完成的工作流程,但没有关于当前工作流程的信息。我是对的还是我错过了什么?
这意味着我必须自己导出所需的指标,我看到了两种可能的解决方案:
< li >创建标尺并在我的工作流程开始和停止时增加/减少标尺,例如:
func MyWorkflow(ctx workflow.Context) error {
mymetrics.gauge.Inc()
if err := workflow.ExecuteActivity(ctx, someActivity).Get(ctx, nil); err != nil {
mymetrics.gauge.Dec()
return err
}
// ...
mymetrics.gauge.Dec()
return nil
}
这种方法的缺点是由用户手动终止的工作流将不能被正确地度量。
< li >创建一个prometheus exporter,并使用< code > cadence . client . listowelconflow
函数收集正在运行的工作流数量。然而,cadence文档说“大量使用这个API可能会导致巨大的持久性压力”,所以我认为在prometheus exporter内部调用它是一个非常糟糕的主意。
你认为还有其他可能的解决办法吗?
因此,似乎有一些指标可以分析已完成的工作流程,但没有关于当前工作流程的信息。我是对的还是我错过了什么?
这是正确的。没有发出类似的度量。
但是,节奏文档说“大量使用此API可能会导致巨大的持久性压力”
如果您使用ElasticSearch的高级可见性,情况就不一样了。
但是如果使用高级可见性,应该使用“CountWorkflowExecution”API来代替。这将更有效地计算打开的工作流。
如果使用基本可见性,如果数量过大,则可能是持久性的性能问题。因为您必须迭代页面才能获得数字。
可以运行不需要连接到cadence服务器的本地活动。是否有适当的方式在本地运行工作流,以防发生cadence中断?我正在使用Go客户端。
每个工作流都应在单独的工作流类中实现? 是否建议实现一个通用工作流类,在该类中,我们将使用传递给工作流的参数调用活动和触发计时器? 在我们的用例中,我们将从UI创建工作流,它将由最终用户创建。所以我们不能一开始就定义我们的工作流程。 这是推荐的方法吗?
temporal.io如何与cadenceworkflow.io?如果根据节奏工作流服务启动一个新项目,应该使用什么?
历史回放如何在抑扬顿挫中发挥作用? 我有一个按顺序调用两个活动的工作流。 比方说,第一个活动完成了,第二个活动有100行代码。如果应用服务器在执行activity2中的第50行代码时重新启动,它会从第50行开始执行吗?如果是,cadence内部正在发生什么神奇的事情? 我的hello活动中有上面的代码。此代码将运行4分钟,当条件满足时,它将在文件中写入数据 我启动了一个工作流,并在打印后退出了节奏
假设我们需要在用户完成购物车后生成订单。 这是我们生成订单的步骤: 生成一个处于挂起状态的订单(订单微服务) 授权用户信用(会计微服务) 将购物车的状态设置为关闭(购物车微服务) 批准订单(订单微服务) 为此,我们只需创建一个节奏工作流,为每个步骤调用一个活动。 问题1:如果用户再次打开购物车或刷新页面,客户端如何检测到购物车正在创建订单?(注意:假设我们的工作流还没有被工人执行) 我的问题1解决
这可以被认为是在节奏工作流的循环中调用相同活动的后续问题:在活动迭代的情况下,工作流如何恢复?是继续调用第i个活动(跳过已经调用的活动)还是从0重新开始?如果是这样,如何编写工作流以跳过调用的活动(0-'k')?