多任务工作流使用不正确的参数值

如果并行任务运行在同一个集群使用Scala的同伴对象可以使用错误的值由于共享JVM的一个类。

写的拉杰夫kannan Thangaiah

去年发表在:2022年12月5日

问题

使用键值参数在一个多任务工作流是一种常见的用例。是很正常的并行运行多个任务,每个任务可以有不同的参数值相同的关键。这些键值参数在每个任务使用的代码和阅读。

例如,假设您有四个任务:task1,task2,task3,task4在一个工作流程的工作。表名是关键参数,参数值是什么员工,部门,位置,联系人

每个任务运行工作时,你希望自己的参数。但是如果应用程序代码使用Scala的同伴对象,你可能会注意到一个任务的参数被应用于所有其他任务,而不是各自的参数对于每个任务得到应用。这会产生不一致的结果。

使用我们的例子中,如果任务并行运行使用Scala的同伴对象,任何一个任务参数(例如,task4参数联系人)可能会作为表名传递给其他三个任务。

导致

当同伴对象应用程序代码中使用,有一个可变状态的伴星并发修改。因为所有任务运行在相同的集群中,这类被加载一次,所有任务运行在相同的Java虚拟机(JVM)。

解决方案

你可以减轻这个问题通过应用这些解决方案之一。最好的选择取决于您的特定的用例。

  • 按顺序运行工作(添加依赖关系的任务)。
  • 每个任务安排在不同的集群。
  • 重写的代码加载配置你显式地创建一个新的对象,而不是使用伴星的共享状态。
这篇文章有用吗?