web-dev-qa-db-ja.com

複数のユーザーのWebサービス要求をスロットルするためのキューとしてSQLデータベースを使用するサンプルデザインを探す

新しいエントリの作成、エントリの変更、データのリクエストなどのリクエストを受け取るWebサービスへのリクエストを複数のユーザーがキューに入れるシステムを設計しています。使用するWebサービス呼び出しの多くは、階層データをパラメーター(c#オブジェクト構造と一致するように設計された階層)として受け取りますが、許可されるエントリタイプのリストのリクエストなど、他のパラメーターはパラメーターを必要としません。 Webサービスには5秒程度のスロットル要件があり、複数のユーザーが使用するWebサービスログインは1つだけなので、キューが必要です。

webサービスから返されたxmlデータは最終的に返され、独自のサーバーアプリによって解析され、なんらかの応答テーブルに挿入されるので、ユーザーアプリはリクエストが受信されたことがわかり、返されたデータも取得できます。

基本的な画像は

ユーザーアプリ(複数のユーザー)->サービスリクエストキュー<->サーバーアプリ<-> Webサービス

同様に戻ってくる応答

ユーザーアプリ(複数のユーザー)<-サービス応答キュー<->サーバーアプリ<-> Webサービス

enter image description here

私はユーザーアプリとサーバーアプリを自分で作成し、SQLサーバーを使用するサービスリクエストキューとレスポンスキューを設計する方法のハンドルを取得し、それ以降、これらのキューが持つテーブルの数を把握しようとしています。要求と応答は階層形式で送られ(要求に応じて異なる階層タイプも返されます)、非階層形式の両方です。

このようなオブジェクトは、外部WebサービスAPIによって指定されます。ユーザーは、このオブジェクト構造のさまざまな関連形式でさまざまなタイプのリクエストを送信します。これは、キューシステム/キューに格納され、その後、Webサービスのスロットル要件を満たすためにデキューするためにサーバーアプリによってピックアップされます。また、サーバーアプリは、時間が経過しすぎて、リクエストに欠陥があるか、関連性がないと思われる場合や、ユーザーアプリがウェブサービスからのデータストリームと同期していない場合など、無関係なリクエストをキャンセルする場合もあります。 enter image description here

誰かがこの目的のために使用されている複数のユーザーのsql serverキューの簡単な例を持っていますか?このトピックに関する良い本はありますか?それともWebチュートリアル? Webサービスの複数のユーザーを抑制するために必要なようです...

5
fa1c0n3r

私はこれを2008年から2009年のプロジェクトとして1日あたり100万回以上の呼び出しを処理する必要があるWebサービス(請求)として正確に行いました。 SQL Serverテーブルをキューとして使用し、そのプロジェクトからの教訓を記事 キューとしてのテーブルの使用 に抽出しました。私がそこに示したルールに固執し、特にホイッスルやベルをテーブルに追加しようとせず、それをキューとして排他的に使用してください。負荷がかかっている状態で、バッチデキュー(1つのDB操作で100のWebサービスコールリクエストをデキューする)とアプリでディスパッチを処理する(デキューリクエストをメモリ内リストに配置し、Webコールハンドラーが作業をピックアップする)ことが重要な問題であることがわかりましたこのリストから)。 Webサービス呼び出しを非同期で実行することが重要です。また、 ServicePointManager.DefaultConnectionLimit

10
Remus Rusanu

SQL Serverの組み込み " Service Broker "機能の使用を検討しましたか?開発者が非同期のキューシステムを実装できるように設計されています。

2
darin strait