2011-01-31 4 views
11

Quartzのクラスタリング、特に火災/ジョブがクラスタ内でどのように実行されるかについて、いくつか質問があります。ジョブを実行するためにQuartzクラスタ内のノードを選択してください。

  1. クォーツはジョブ実行時にノードを優先しますか?前回と同じジョブを実行したノードは、常に、あるいは決してそうではありません。

  2. ジョブを実行するノードを指定することはできますか?

答えて

9

「これは依存している」ものです。

クォーツ1.xでは、ジョブの実行は、多かれ少なかれランダムなノードで常に(のみ)行われるという答えです。 「ランダム性」は実際にノードが最初に到達した場所に基づいています。 「ビジー」スケジューラ(実行するジョブが常にたくさんある場合)では、クラスタノード間でかなりバランスの取れた負荷が得られます。ビジーでないスケジューラ(たまにジョブを起動するだけ)では、ジョブ実行が完了するたびに次のジョブが実行されるため、ノードがすべてのジョブを起動しているように見えることがあります。次のジョブを実行する傾向があります)。

クォーツ2.0(ベータ版)では、標準クォーツの場合の答えは上記と同じです。 Terracottaの人々はTerracottaJobStoreのEnterprise Editionを構築しています。これはより複雑なクラスタリング制御を提供します。ジョブのスケジュール設定時に、クラスタのどのノードがジョブの実行に有効であるかを指定するか、ノード特性/ 「使用可能なRAMが100 MB以上あるノード」としてください。これはehcacheと一緒にも動作し、 "Xでキーされたデータがローカルであるノードで"実行するジョブを指定することができます。

+0

感謝を。 – ButterflyCoder

0

私はSpring + AOP + memcachedを使用している私のWebアプリケーションでこの問題を解決しました。私の仕事は、仕事がすでに実行されている場合、彼らが横断するデータから知っているので、避ける必要があるのは、同時に2つ以上のノードが走っていることだけです。

あなたはここでそれを読むことができます。詳細について

http://blog.oio.de/2013/07/03/cluster-job-synchronization-with-spring-aop-and-memcached/

関連する問題