0

最初我启动了三个网格节点,我的 java 程序中有 200 多个工作。我已将所有作业共享到网格节点。一旦我运行应用程序,将通过 eclipse 引入另一个节点,它也参与作业的执行。这意味着一个节点正在并行执行 50 个作业。当所有节点都在执行它们的作业时,我当时已经启动了另一个节点,并计划与该节点共享一些处于不完整状态的作业。

我们怎么能这样做......

4

2 回答 2

1

要迁移正在执行的作业,您需要让您的作业侦听拓扑事件并通过停止某些作业(在拆分中)并使用检查点和自定义故障转移 SPI 的组合来迁移它们来做出反应。

它不仅仅是几行代码,而是高级用例。我会考虑使工作的持续时间更短和/或“大小”更小,以更好地利用不断变化的拓扑。

于 2012-08-04T14:37:35.917 回答
0

我使用 Gridgain 的经验告诉我,工作定义对于处理时间非常重要。当您生成具有小尺寸的作业时,通信开销很大并且所有可能都会变慢(您还可能遇到结果收集缓存大小或超时的其他问题)。另一方面,当您选择的作业规模太大时,慢速节点可能会在其他节点空闲时阻塞进程。很难找到最适合工作的尺码。

作业窃取可能有助于在作业被发送到网格节点后更好地分配作业。将当前处理的作业限制为一个数字,并使工作节点能够窃取队列中超过此作业数量的所有内容,这是使用以下代码完成的。使用 xml 文件也可以进行此配置。

public class ConfigGrid {

        // config jobStealing
        public static GridConfigurationAdapter JobStealing(
                    GridConfigurationAdapter cfg, 
                    int waitJobsThreshold, 
                    int activeJobsThreshold, 
                    boolean stealingEnabled) 
        {
            GridJobStealingCollisionSpi spi = new GridJobStealingCollisionSpi();

            // Configure number of waiting jobs
            // in the queue for job stealing.
            spi.setWaitJobsThreshold(waitJobsThreshold);

            // Configure stealing attempts number.
            spi.setMaximumStealingAttempts(10);

            // Configure number of active jobs that are allowed to execute
            // in parallel. This number should usually be equal to the number
            // of threads in the pool (default is 100).
            spi.setActiveJobsThreshold(activeJobsThreshold);

            // Enable stealing.
            spi.setStealingEnabled(stealingEnabled);

            // Override default Collision SPI.
            cfg.setCollisionSpi(spi);

            return cfg;
        }   

在您的主要功能中,您可以像这样调用它:

GridConfigurationAdapter cfg = new GridConfigurationAdapter();
// config job stealing
cfg = ConfigGrid.JobStealing(cfg, numberOfJobs, setActiveJobs, stealingEnabled);
GridFactory.start(cfg);

有关更多设置,请阅读有关 GridJobStealingCollisionSpi 的文档。

(编辑:当然你必须在每个节点上使用相同的设置)

于 2013-03-18T14:04:08.543 回答