0

24 時間年中無休で実行される多数のバックエンド プロセス (Java アプリケーション) があります。これらのバックエンドを監視する (つまり、プロセスが応答していないかどうかを確認し、SMS/EMAIL 経由で通知する) ために、別のアプリケーションを作成しました。

古いバックエンドは定期的にハートビートをログに記録し、この新しいアプリケーションは定期的に行っているかどうかを確認し、必要に応じて通知します。

さて、2つのオプションがあります

  • スケジュールされたタスクとして実行し、(たとえば)15分ごとに実行され、ジョブの実行後に停止するか、
  • 15 分のスリープ時間で別のバックエンド プロセスとして実行します。

現時点で予想できる問題は、この監視アプリケーションが応答しない状態になったらどうなるかということです。だから、私の質問は、両方のケースに違いはありますか、それとも両方が同じですか? 私の場合、どのオプションがより適していますか?

これは特定のケースであり、これまたはこれと同じではないことに注意してください

環境: LINUX サーバーでホストされる Java

4

3 に答える 3

1

スケジュールされたタスクとは、システム スケジューラによってトリガーされることを意味しますか、それとも既存のバックエンド プロセスのスケジュールされたスレッドとしてトリガーされることを意味しますか?

予期しない終了または無応答状態をキャプチャするには、スレッドではなく別のプロセスを実行するのが最適です。ただし、スケジュールされたスレッドを使用すると、IPC オーバーヘッドが少なくなり、所有プロセスとのより緊密なやり取りが可能になります。

私は両方を実装します。各バックエンド プロセスでローカル状態の記録を維持し、各プロセスでスケジュールされたタスクがスレッドをトリガーして、そのノードの現在の状態を更新します。この更新は、別のプロセスと通信するよりもコストがかからないため、かなり頻繁に行うことができます。

別の「監視アプリ」プロセスを使用して、すべてのバックエンド プロセスに関する情報を定期的に収集します。これはあまり頻繁に発生しないはずです。状態は各バックエンド プロセスで保持されるため、プロセスが常に実行されているか、cron ジョブによってスケジュールされているかは重要ではありません。バックエンドの 1 つが応答しなくなった場合、この監視アプリは応答がないことを判断し、意味のあるプローブを実行して問題の原因を特定できます。SMS/E メール ユーティリティにレポートを送信するように通知するのは、このコンポーネントです。

于 2012-04-16T10:32:00.843 に答える
0

テラコッタhttp://terracotta.org/products/quartz-schedulerのクォーツスケジューラを見て、状態を維持できるので、バックエンドプロセスに行きます

一時的な状況に対して回復力があり、単純なラップを提供するだけでよいため、quartz.properties ファイルでスレッド化を正しく行えば、モニター アプリは堅牢になります。

于 2012-04-16T09:52:40.263 に答える