多任務工作流使用不正確的參數值

如果並行任務運行在同一個集群使用Scala的同伴對象可以使用錯誤的值由於共享JVM的一個類。

寫的拉傑夫kannan Thangaiah

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

問題

使用鍵值參數在一個多任務工作流是一種常見的用例。是很正常的並行運行多個任務,每個任務可以有不同的參數值相同的關鍵。這些鍵值參數在每個任務使用的代碼和閱讀。

例如,假設您有四個任務:task1,task2,task3,task4在一個工作流程的工作。表名是關鍵參數,參數值是什麼員工,部門,位置,聯係人

每個任務運行工作時,你希望自己的參數。但是如果應用程序代碼使用Scala的同伴對象,你可能會注意到一個任務的參數被應用於所有其他任務,而不是各自的參數對於每個任務得到應用。這會產生不一致的結果。

使用我們的例子中,如果任務並行運行使用Scala的同伴對象,任何一個任務參數(例如,task4參數聯係人)可能會作為表名傳遞給其他三個任務。

導致

當同伴對象應用程序代碼中使用,有一個可變狀態的伴星並發修改。因為所有任務運行在相同的集群中,這類被加載一次,所有任務運行在相同的Java虛擬機(JVM)。

解決方案

你可以減輕這個問題通過應用這些解決方案之一。最好的選擇取決於您的特定的用例。

  • 按順序運行工作(添加依賴關係的任務)。
  • 每個任務安排在不同的集群。
  • 重寫的代碼加載配置你顯式地創建一個新的對象,而不是使用伴星的共享狀態。
這篇文章有用嗎?