6

RESTAPIにいくつかのスロットルを実装しようとしています。一般的なアプローチは、特定のしきい値を超えて要求をブロックすることです(応答あり403または429応答あり)。ただし、代わりに応答に遅延を追加するAPIを1つ見ました。

APIを呼び出すと、過去5分間の1秒あたりの平均呼び出し数(c / s)が確認されます。何が起こるかは次のとおりです。

  • 3c / sを超え、2秒の遅延を追加します

  • 5c / sを超え、4秒の遅延を追加します

  • 7c / sを超え、5秒の遅延を追加します

クライアントの観点からは、これはエラーを返すよりも優れていると思います。起こりうる最悪の事態は、速度が低下することです。

アプリサーバーに悪影響を与えることなく、これをどのように実現できるのか疑問に思っています。つまり、これらの遅延を追加するには、サーバーはリクエストを開いたままにしておく必要があります。これにより、サーバーはますます多くのリクエストプロセッサをビジー状態に保ちます。つまり、新しいリクエストを受信するための容量が少なくなります。

これを達成するための最良の方法は何ですか?(つまり、これは、アプリケーションサーバーに悪影響を与えないように、Webサーバー/ロードバランサーで実行できることですか?この目的で追加できるスロットリングレイヤーのようなものはありますか?)

私たちはDjango/Tastypieを使用していますが、問題はアーキテクチャ/概念レベルにあります。

4

1 に答える 1