使用生成的状态机管理动态条件依赖关系



问候SO居民!

我正在尝试对一个已经超出其原始设计的现有NodeJS应用程序进行彻底修改。我正在努力寻找的解决方案远远超出了我的经验。

该系统有大约50个独特的异步任务,这些任务被定义为它知道如何执行的各种有限状态机。每个任务都有一组开始执行所需的参数,这些参数可以由交互式提示、数据库或以前完成的异步任务的结果提供。

我有一个UI,用户可以在其中定义一个有向图("流"),指定他们想要运行的任务和执行它们的顺序,以及与顶点和边相关的其他属性,例如在调用子任务之前要评估的额外条件。这些信息存储在第三个普通形式的PostgreSQL数据库中,作为"父+子+属性值"配置,这似乎运行得很好。

由于排列、条件和可能的失败点的数量之多,我倾向于将"流"表达为状态机。我只是对图论和状态机有足够的知识来实现它们,但实际上没有任何背景。

我想我要做的是在收到根服务的用户输入后的流运行时,以某种方式将图+属性的数据库表示编译成某种状态机。

为了在不久的将来使问题进一步复杂化,我希望能够"暂停"流,将其状态保存到内存中,并在未来某个时间将其加载到另一个工作者上,然后继续执行。

我想我已经接近一个可行的解决方案了,但如果你们中的一个善良的灵魂宽恕一个盲目的傻瓜,并给我指明正确的方向,我将永远欠你们的债。

几年前,我解决了与学士学位和文凭论文类似的问题。我设计了一个Cascade,一个可执行的结构,它形成了一个生长的面向非循环的图。你可以在我的论文"自生成程序——块的级联"中读到这一点。

基本思想是,每个块都有输入和输出。最初,一些块被插入到级联中,并且输入被连接到其他块的输出以形成非循环图。当一个块被执行时,它读取其输入(级联将传递连接输出的值),然后该块设置其输出。它还可以在级联中插入额外的块,并将其输入连接到已经存在的块的输出。这应该等于您的任务启动另一个任务并向其传递一些参数。将输出设置为值的另一种选择是转发来自另一个输出的值(在您的情况下,等待其他任务的结果,因此可以启动助手子任务)。

最新更新