Автоматически обнаруживать узел сетки и делиться некоторыми заданиями с новой сеткой, которая началась в середине выполнения задания - PullRequest
0 голосов
/ 31 января 2012

Изначально я запустил три узла сетки, и у меня более 200 заданий в моей Java-программе. Я поделился всеми заданиями с узлами сетки. Однажды, если я запущу приложение, еще один узел будет представлен через Eclipse, и он также участвует в выполнении заданий. Это означает, что один узел выполняет 50 заданий параллельно. Когда все узлы выполняют свои задания, я запустил другой узел в то время и планировал поделиться некоторыми заданиями для этого узла, которые находятся в неполном состоянии.

Как мы можем это сделать ...

Ответы [ 2 ]

1 голос
/ 04 августа 2012

Чтобы перенести задания, находящиеся в середине выполнения, вам нужно заставить свои задания прослушивать события топологии и реагировать, останавливая некоторые задания (в разделении) и перенося их, используя комбинацию контрольных точек и настраиваемых SPI аварийного переключения.

Это больше, чем несколько строк кода, а скорее предварительный вариант использования.Я хотел бы сократить время выполнения работ и / или уменьшить их размер, чтобы лучше использовать меняющуюся топологию.

0 голосов
/ 18 марта 2013

Мой опыт работы с 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.

(редактировать: конечно, вы должны использовать одинаковые настройки для каждого узла)

...