2

今日、プラットフォームの構築は、JPA、Guice、JSR303Bean検証を使用して非常に迅速に行われます。何かを作るのはかなり簡単です。

Guiceを使用していて、JVMマシンのクラスター内でシングルトンとしてポーラープロセスを使用していたとします。どうすれば簡単にそうすることができますか

  1. クラスターが起動したとき(3台のマシン)、その1台だけがシングルトンを起動しました
  2. シングルトンが実行されているマシンに障害が発生すると、他のマシンの1つがシングルトンを起動しました

これは、今日の図書館ではそれほど難しいことではありませんよね?よく見ると、jgroupsが答えだと思いますが、他の人から聞きたいと思います(Jbossはこれまでに見たもののjgroupsを使用しています)。

4

4 に答える 4

1

私はと分散ロックに行きます。ヘーゼルキャストとシングルトンを見てください。

おそらくもそのトリックを行うことができます。

于 2012-04-05T18:35:42.407 に答える
1

アプリケーションで使用可能な中央データベースがある場合は、データベーステーブルの行にペシミスティックロックを使用できます。特定のサーバーノード上のすべてのシングルトンは、特定のテーブル行でペシミスティックロック(Oracleでは「SELECTFORUPDATE」によって取得)を取得しようとします。シングルトンがロックを取得すると、必要なことは何でもできます。それ以外の場合は、ロックを待つだけです。動作中のシングルトンインスタンスがダウンすると、待機中の別のシングルトンがロックを取得して動作を開始します。インスタンスが有効である限り行レベルのロックが保持されるようにするには、コミットまたはロールバックによってトランザクションを終了しないように注意する必要があります。

あるいは、動作中のシングルトンは定期的にタイムスタンプを保存し、他の待機中のシングルトンはこのタイムスタンプが特定の時間間隔で更新されていることを確認します。それがもう更新されない場合、別のシングルトンがそのタイムスタンプの「所有者」を取得して、それ自体で動作を開始できます。このアプローチでは、ロックを保持するための専用のデータベース接続は必要ありませんが、タイムアウトを待機する必要があるため、別のクラスターメンバーへの引き継ぎは遅くなります。

-ロバート

于 2012-04-10T13:15:44.010 に答える
1

多くの人が提案しているように、JGroups(アプリサーバーなし)を使用してこれを実現できます。実装例はhttp://speakingjava.blogspot.in/2014/10/how-to-execute-singleton-task-in-cluster.htmlにあります。

于 2014-10-16T16:17:31.497 に答える
0

私はこれをもっと調べていました。JBossはjgroupsを使用しているように見えますが、これは十分に単純なようであり、それも同様の方法である可能性があります。

于 2012-04-10T12:46:00.903 に答える