私の Lotus Notes ワークフロー アプリケーションでは、スケジュールされたサーバー エージェントがあります (5 分ごと)。ユーザーがドキュメントに対してアクションを実行すると、サーバー側のエージェントもトリガーされます (このエージェントはサーバー側でドキュメントを変更します)。制作にあたっては、加工が不完全だったり、全く加工されていないこともあるというクレームを多くいただいております。サーバー構成を確認したところ、同時に実行できるエージェントは 4 つだけであることがわかりました。50,000 人を超えるユーザーを抱えるグローバル アプリケーションであるため、これらの問題で責任を負うことができる唯一のことは、実行されるエージェントの量ですが、それが正しいかどうかはわかりません (私は開発者であり、これらに関する知識が不足しています)。 . 私の推論が(同時エージェントで)正しいかどうかを見つけて、これを解決する方法を理解するのを手伝ってくれる人はいますか? 参考文献を教えてください。前もって感謝します!
1 に答える
覚えておくべき重要なこと。
サーバー上のスケジュールされたエージェントは、常に同じデータベースから 1 つのエージェントのみを実行します!
したがって、データベース A にエージェント X (5 分) と Y (10 分) があるとします。最初に X が実行されます。X が完了すると、次にスケジュールされている方 (X または Y) が次に実行されます。X + Y が同じデータベースにある場合、同時に実行することはできません。
これは、データベース エージェント内で発生する可能性のあるデッドロックを停止するための意図された動作です。
また、スケジュールできるエージェントの数に制限があるスケジュール キューもあります。たとえば、エージェント X を 5 分ごとに実行しているが、完了するまでに 10 分かかる場合、スケジュール キューは徐々にいっぱいになり、スペースが不足します。
では、これを回避するにはどうすればよいでしょうか。いくつかの方法があります。
オプション 1: サーバーでプログラム ドキュメントを使用します。
エージェントをスケジュールされた「実行しない」に設定し、プログラム ドキュメントにコマンドでエージェントを実行させます。
tell amgr run "dir/database.nsf" 'agentName'
プロ:
- 5 分以内のスケジュールでエージェントを実行できます。
- 同じデータベースで複数のエージェントを実行できます。
短所:
- エージェントが対話しているものを認識し、他のエージェントまたは同時に実行されているエージェント自体を処理するようにコーディングする必要があります。
- これを行うと、パフォーマンスに重大な影響が生じる可能性があります。サーバーで何が起こっているのか、それがサーバーにどのように影響するのかを認識する必要があります。
- 多数のデータベースがある場合、プログラム ドキュメント リストが乱雑になり、保守が困難になります。
- 「Tell AMGR」を介したエージェントは、サーバーで許可されているエージェントの実行時間を超えても終了しません。彼らは手動で殺さなければなりません。
- どのエージェントが実行中/実行されているかを判断する簡単な方法があります。
オプション 2: Web エージェントを呼び出すエージェントを作成します。
プロ:
- 5 分以内のスケジュールでエージェントを実行できます。
- 同じデータベースで複数のエージェントを実行できます。
- 別のエージェントを介して実行されるものをわずかに制御できます。
短所:
- サーバーで HTTP を実行する必要があります。
- これを行うとパフォーマンスに影響があり、複数のインスタンスが実行されている場合や他のエージェントがシステムとどのようにやり取りするかを認識する必要があります。
- サーバーで許可されているエージェントの実行時間を超えた場合、エージェントは終了しません。
- サーバー上で並行 Web エージェント/Web サービスを許可する必要があります。そうしないと、サーバーがハングする可能性があります。
オプション 3: スケジュールされたトリガーから別のトリガーに変更します。
たとえば「新着メールが届いたら」など。全体として、これは 3 つの選択肢の中でより良い選択肢です。
...
最後に、異なるデータベース間で複数のユーザーによって実行されることのない重要なエージェントでない限り、可能であれば「5 分ごとに実行」を使用することはほとんどありません。