複数のスロットルAPIリクエストに使用するデザインパターンは何ですか?
-
01-10-2019 - |
質問
スロットル制限で複数のWebサービスを使用するWebサイトを書いています。 IE Amazonは1秒あたり1つのリクエスト、もう1つは5000/日です。
ユーザーが何かを行うとき、上記のサービスに1つ以上のリクエストをトリガーし、利用可能な場合は(ブラウザに)結果を返す必要があります。
ソリューションは、サービスを簡単に追加/削除できるように柔軟である必要があります。
私はFIFOキーリングシステムについて考えましたが、以前のものの前に実際に処理する資格がある場合は、後のリクエストがいくつかあります。
私はデザインパターンを求めていますが、適切なテクノロジーの提案は、特に.NET、特に大歓迎です。
ありがとう!
解決 2
ご意見ありがとうございます。基本的に、私はリクエストを拒否したくありません。それらをキューにして、処理されたときにユーザーに表示したいと思います。注文システムのようなものです。
0:00:01 Amazonリクエストが入っています - >次のスロットは2秒で(0:00:03)
0:00:02 xリクエストが入っています - >このサービスで利用可能な次のスロットは5秒(0:00:07)
0:00:03 Amazonリクエストが入っています - >次のスロットは2秒で(0:00:05)
最初に2つのAmazonリクエストを引き出すキューシステムが必要です。私の質問は、各サービスとスロットリングに適した一般的なテクノロジー(すなわちサービスブローカー)に個別のキューを作成するかどうかにあると思います。上記の例のためにFIFOではないため、一般的なデザインパターン(つまり、プロデューサー/消費者など)を探していました。
これまでのところ、それは各サービスのFIFOキューのように見え、それ自体のスロットリングで、前進する方法のように見えます。
他のヒント
あなたが問題を見ている場所を完全に理解しているかどうかはわかりません。から
いくつかの後の要求は、実際に以前のものの前に処理する資格がある場合があります。
私はあなたが今、満足することはできないが、まもなく作業するかもしれないバッファリクエストを心配していると推測します。
次のようなリクエストを受け取りました
{ Amazon, X }
そして、(たとえば)Xのために、スロットルは今その要求を満足させることはできません。
私の最初の質問は、リクエストが独立しているのか、それはAmazonリクエストをすぐに処理してXリクエストをキューにすることができるでしょうか?もしそうなら、それぞれのサービスの単純なFIFOキューは確かに仕事をします。おそらく、最大サイズのキューが必要になる必要があります(HTTPがタイムアウトを要求すると、何時間も待ちきれません)。
Xリクエストを発行することができるまでAmazonリクエストを発行することを延期している場合、事態はより複雑になります。事実上、会議のスケジューリングの問題があると思います。 AmazonとXの両方が無料の場合、スロットを見つける必要があります。したがって、キューの何らかのリストを作成することができます。各キューは、その時間単位でサービスのリクエストを満足させるためのものです。
Amazon(3 per sec)
09:05:31 - request A, B, C
09:05:32 - request D, E, F
09:05:33 - request G - - <=== slots available
--- <=== times and slots available
X (2 per min)
09:05 - request M, N
09:06 - request O <=== slot available
ここで{Amazon、X}には09:06に利用可能なスロットがあります
Amazon(3 per sec)
09:05:31 - request A, B, C
09:05:32 - request D, E, F
09:05:33 - request G - - <=== slots available
--- <=== times and slots available
09:06:01 - request P
X (2 per min)
09:05 - request M, N
09:06 - request O, P
個人的には、私はもっと簡単なものから始めます。1つのサービス制限に達したためにリクエストが今すぐ満足できない場合は、リクエストを拒否します。