自动发现gridnode并将一些作业共享到新的网格,该网格从作业执行的中间开始

时间:2012-01-31 09:26:04

标签: gridgain

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

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

2 个答案:

答案 0 :(得分:1)

要迁移处于执行中期的作业,您需要让作业监听拓扑事件并通过停止某些作业(在拆分中)并使用checkpoint&组合来迁移它们。自定义故障转移SPI。

这不仅仅是几行代码而是相当先进的用例。我会考虑缩短工作时间和/或减少“大小”,以更好地利用不断变化的拓扑结构。

答案 1 :(得分: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的文档。

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