Closed chenxushao closed 11 months ago
单机则没有问题
多机部署为什么会出现另外的机器没有Action的情况呢,部署的代码应该都是同一套吧
注册 Action 是注册在内在中的 ActionMap中。 有没有可能调度在另一台机器去跑呢?
多机部署为什么会出现另外的机器没有Action的情况呢,部署的代码应该都是同一套吧
你好。是同一套代码。
func (e DefExecutor) runAction(taskIns entity.TaskInstance) error { act := ActionMap[taskIns.ActionName] if act == nil { return fmt.Errorf("action not found: %s", taskIns.ActionName) }
主要是这块报错了。
我看文档上写,leader 会分发任务给 worker。假如这个 reginsterAction 是在另外机器执行的,但是执行却到另一个 worker,是不是会出现这种情况,因为 action 的存储不是集中存储的。
不知道是不是我没理解?
多机部署为什么会出现另外的机器没有Action的情况呢,部署的代码应该都是同一套吧
你好。是同一套代码。
func (e DefExecutor) runAction(taskIns entity.TaskInstance) error { act := ActionMap[taskIns.ActionName] if act == nil { return fmt.Errorf("action not found: %s", taskIns.ActionName) }
主要是这块报错了。
我看文档上写,leader 会分发任务给 worker。假如这个 reginsterAction 是在另外机器执行的,但是执行却到另一个 worker,是不是会出现这种情况,因为 action 的存储不是集中存储的。
不知道是不是我没理解?
我看框架的实现里,注册 action,只是将 action 放在内存中的 Map 里。 // RegisterAction you need register all used action to it func RegisterAction(acts []run.Action) { for i := range acts { mod.ActionMap[acts[i].Name()] = acts[i] } }
另外还有一个问题,workKey,在多机场景下,必须每台机器不一样是吗?
另外还有一个问题,workKey,在多机场景下,必须每台机器不一样是吗?
对的,一般建议使用k8s的StatefulSet
来部署workflow,每个pod的序号都是不同的,可以参考#31
多机部署为什么会出现另外的机器没有Action的情况呢,部署的代码应该都是同一套吧
你好。是同一套代码。
func (e DefExecutor) runAction(taskIns entity.TaskInstance) error { act := ActionMap[taskIns.ActionName] if act == nil { return fmt.Errorf("action not found: %s", taskIns.ActionName) }
主要是这块报错了。
我看文档上写,leader 会分发任务给 worker。假如这个 reginsterAction 是在另外机器执行的,但是执行却到另一个 worker,是不是会出现这种情况,因为 action 的存储不是集中存储的。
不知道是不是我没理解?
你理解的没错,Action是在内存里面的,但是一般情况下master和worker都是使用同一套代码编译出来的二进制,如果它们使用了不同的代码编译而来就会出现你描述的问题。
Fastflow的Action是具体的代码块,因此它只能存在代码中(我们也可以使用 go plugin 来实现插件化,但是现在尚未支持)
你好,多机时,会报action not found:。 翻看了源代码,ActionMap 是定义的一个全局变量。 var ( ActionMap = map[string]run.Action{}
)
Action 的注册,是将 Action 放到这个 Map 中,相当于数据是存储在本机内存中。 在程序中,我是这么注册Action 的。
// 注册 action fastflow.RegisterAction(actions)
那么,如果是多机执行,这个 Dag 被调度到另外一台机器时,另外一台机器的内在中(邓全局的ActionMap)显然就没有相关的 Dag 数据。 目前,在多机情况下,能够稳定复现action not found:。不知道是不是我自己还有别的点没有考虑到。
诚盼解惑。