バックグラウンドプロセスの管理
アクティビティとバックグラウンドプロセス
アクティビティを使用すると、システムプロセスタスクを柔軟に自動化できます。 たとえば、ある組織が、7日後に期限が切れる商品を20%割引でオファーする場合を考えてみます。 ジョブスケジューラーは、このタスクを実行するために1日1回アクティビティを実行します。 このプロセスを有効にするには、まず、レポートの日付から7日後に期限切れとなる商品をフィルタリングするレポートを構成します。 次にレポートを実行し、期限切れの商品に割引を適用し、データベースで商品の価格を更新するジョブスケジューラーアクティビティを作成します。
次のビデオは、ジョブスケジューラーが起動するたびに開始するアクティビティを示しています。
動画のスクリプト
ジョブスケジューラーは、午前12時に発効し、7日後に有効期限が切れる製品のリストを含むレポートを作成します。 レポートは、7日後に期限が切れる商品を取得します。 ジョブスケジューラーは、製品をロックし、期限切れの製品に割引を適用します。 ジョブスケジューラーは、データベースへの更新をコミットします。 アップデートが完了すると、ジョブスケジューラーは待機し、24時間後に再起動します。
バックグラウンド処理のデータベーストランザクション
キュープロセッサーとジョブスケジューラーでは、データベースオブジェクトに対する読み取り/書き込みのトランザクションの扱いが異なります。 ビデオに示されているように、ジョブスケジューラーは、7日後に期限が切れるアイテムを特定し、割引を適用し、変更を保存してコミットするステップをアクティビティに含めます。 ジョブスケジューラーは、アクティビティを使用してデータベースオブジェクトで実行する読み取り/書き込み操作を管理します。 キュープロセッサーは、データベースオブジェクトに対する読み取り/書き込みのトランザクションを自動的に管理します。 キュープロセッサーがオブジェクトを更新する必要がある場合、アクティビティに、処理の一部としてデータベースへの読み取り/書き込みオブジェクトを実行するステップを含めてはなりません。
バックグラウンド処理設定のベストプラクティス
キュープロセッサーやジョブスケジューラーは、アクティビティを使用して処理ロジックを実装するバックグラウンドジョブです。 これらのアクティビティでは、数秒以内に処理が終了することが想定されています。 アクティビティの完了に時間がかかる場合は、次のベストプラクティスを使用して、シャットダウン処理中にワークアイテムに影響が出ないようにします。
小規模なワークアイテムを作成する
大規模なワークアイテムを小規模なワークアイテムに分解します。 キュープロセッサーにキューを実行し、個別に処理します。 バックグラウンドタスクがパフォーマンス機能の異なる複数のタスクに分割される場合、それらを区分し、それぞれを個別にスケーリングすることを検討します。
チェックポイントを使用する
アクティビティロジックが、データを破損したりアプリケーションに不整合を起こしたりすることなく、正常に再起動を処理できるようにするには、ジョブの状態を永続ストレージに保存したり、ユースケースに適したキューにメッセージとして保存したりして、チェックポイントを使用します。
次の図に示すように、ワークオブジェクトをNew、In-Progress、およびProcessedの状態にすることができるシナリオを考えます。 処理対象のワークオブジェクトレコードをすべて読み取り、1つずつループさせ、現在のワークオブジェクトのステータスを「In-Progress」に指定し、ビジネスロジックを継続し、処理が完了したら、状態を「Processed」に変更できます。
ビジネスロジックとトランザクションロジックを分離する
ジョブスケジューラーのアクティビティを構成する際には、ビジネスロジックとトランザクションロジックを分離します。 たとえば、勤続記念日を迎えた社員に、会社がお祝いの手紙を送る場合を考えてみます。 ビジネスロジックは、勤続記念日を迎える従業員を特定します。 トランザクションロジックは、手紙を送信するプロセスを実行します。 ロジックを分離することで、アクティビティがロックを取得できない場合にプロセスを調整できます。 ロジックを分離するために、ビジネスロジック用に1つのアクティビティを作成し、トランザクション ロジック用に2つ目のアクティビティを作成することができます。
バックグラウンドプロセスの管理
キュープロセッサーやジョブスケジューラーは、さまざまな理由でアイテムを正しく処理できないことがあります。 たとえば、プロセスにセキュリティーアクセスがないか、別のユーザーやプロセスがすでにオブジェクトをロックしているため、プロセスがエントリーのロックを取得できない場合です。
キュープロセッサーは、オブジェクトをキューに入れてから処理します。 次の図に示すように、プロセスが失敗し、システムでキューのエントリーをコミットできない場合、システムではそのエントリーを失敗ステータスにし、プロセスが破損していることが示されます。 また、システムでは、プロセスが開始した変更が元に戻されます。
Admin Studioでは、Queue Processorランディングページを使用して、アプリケーションのキュープロセッサールールをトレースおよび監視します。 エラーが発生した場合、SysAdmin4ロールを持つユーザーは、実行中のプロセスをトレースし、破損したキューのアイテムを調べることで、キュープロセッサーの問題をトラブルシューティングできます。
ジョブスケジューラーは、あらかじめ設定された時刻にアイテムがプロセスされるようトリガーを発行します。 ジョブスケジューラーはアイテムをキューに入れません。 ジョブスケジューラープロセスの問題をトラブルシューティングするために、失敗したプロセスのトレースを実行できます。 また、ジョブスケジューラールールの統計情報集計を管理するようパフォーマンスツールを構成することもできます。
以下のインタラクションで理解度をチェックしてください。
このトピックは、下記のモジュールにも含まれています。
- バックグラウンド処理 v6