このようにリクエストをオフラインで処理することは、大量のリクエストを処理する場合の一般的なパターンです。
これを行う必要があるか、または行うことができるかは、多くの要因に基づいています。
主な要因は、呼び出し元が要求に対する応答を同期的に確認する必要があるかどうかです。
私が言いたいのは、データベースが呼び出し応答の一部としてデータを正常にコミットしたかどうかを、呼び出し元が即座に絶対確実に知る必要があるということですか? その場合、リクエスト処理をオフラインにすることは実際には選択肢ではありません。
ただし、要求がオフラインで処理されることを示す応答を発信者に送信できる場合 (および必要な応答もオフラインで送信される場合) は、キューを使用することでアーキテクチャ全体に確実にメリットがあります。
最初に恩恵を受けるのは、フロントエンドの可用性の問題です。
短期間に数千のリクエストを処理していて、各リクエストがスレッドによって処理され、スレッドがデータベースにデータを挿入すると、着信リクエストを処理するために使用できるディスパッチャ スレッドが存在しないという問題が発生する可能性が非常に高くなります。
ただし、IIS が実行するバックエンド作業の量を減らすことによって (ローカル キューへの書き込みは、データベース呼び出しに比べて非常に安価です)、可用性に基づく障害の可能性も減らします。
次に、キューを使用すると、バックエンド処理のスループットを制御できるため、バックエンド トラフィックを調整する手段が得られます。
たとえば、リクエストをデキューしてデータベースに処理するシングルスレッドのキュー リーダー プロセスを作成できます。キューにメッセージが蓄積されていることがわかった場合は、キュー リーダー サービスのインスタンスをさらにホストすることで、キュー リーダー サービスをスケールアウトできます。
これが意味することは、一度にデータベースにアクセスするスレッドの数をより細かく制御できるため、データベースの競合の問題が発生する可能性が減少するということです。
そのため、キューイングを使用することで、適切に作成されたアプリケーションの特徴である障害が少なくなり、管理オーバーヘッドが軽減されます。これは特に、Web サーバーでデータベースをホストすることを検討している場合に役立ちます。
また、 CQRSと呼ばれるアーキテクチャ パターンを読んでおく必要があります。その中心的な原則の 1 つは、データベースへの書き込みをオフラインで行うことです。