0

最初に3つのグリッドノードを開始し、Javaプログラムで200を超えるジョブを使用しています。すべてのジョブをグリッドノードに共有しました。アプリケーションを実行すると、eclipseを介してもう1つのノードが導入され、ジョブの実行にも参加します。これは、1つのノードが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 に答える