Java で複雑な Web アプリケーションを使用しています。を含む:
- Maven によって保存および管理されるさまざまなライブラリ モジュール
- クラウド内の多数のサーバーにスケーリングする Web モジュール
- データベース: sql + nosql
- データベースを操作するためのさまざまなスケジュールされたジョブ。
このスケジュールされたジョブを開発および管理する方法についてアドバイスが必要です。私の要件:
- Web層はAmazon ec2 insansesで自動的にスケーリングされるため、ジョブはWebモジュールから分離する必要があります。
- 一部のジョブはお金を扱う非常に重要な作業を行うため、ジョブの結果、ジョブの状態、ログなどを監視するための非常に優れたツールが必要です。非常に迅速な修正プログラムを作成する機能と、停止\開始\キャンセルする機能が必要です (フリーズした場合)何らかの理由で)特定のジョブをリアルタイムで個別に実行します。
- すべてが正常に機能する場合、継続的デリバリー (CD) を使用する必要があります。つまり、ジョブは CI サーバー上に構築され、test\production サーバーに自動的にデプロイされます。スケジュールされた時間の構成もバージョン管理下にある必要があります。
私はいくつかの解決策を見ました:
- obsidianのようなジョブサーバー。このようなモンスター ソリューションを使用するのは良い考えだとは思わないでください。
- クォーツ。要件番号 2 と 3 をマージする簡単な方法が見つかりません。Quartz を使用すると、ジョブをリアルタイムで管理したり、ジョブ用の優れた CD ビルドを作成したりできます。一緒じゃない。多分私は何かが恋しいですか?
- すべてのライブラリを使用してジョブ jar を宛先サーバーにデプロイし、スクリプトを実行します。そのスクリプトを cron から実行します。このソリューションは醜く見えます。まず、CI プロセスをクリーンに維持するために、デプロイのたびに CI サーバーからすべてのライブラリを test\production サーバーにデプロイする必要があります。第二に、それはまったく良い考えだとは思いません。私は何かが恋しいと本当に思っています。この通常の問題には良い解決策があります。
アドバイスをいただけますか?通常、開発者は CD プロセスでスケジュールされたジョブをどのように管理しますか?