web-dev-qa-db-ja.com

クォータを使用して分散プロキシを実装するにはどうすればよいですか?

着信HTTPリクエストを処理するスケーラブルプロキシ(Linux/C/C++、Nginxモジュール、またはカスタムHTTPサーバー)を開発し、着信リクエスト自体に含まれるパラメーター(IP、たとえば、時間)または外部要因(したがって、外部要因を取得できるNginxモジュールを使用します)。

ただし、注意が必要なのはクォータに関することです。たとえば、1日の割り当てが超過したときに、IPから発信されたプロキシ要求をブロックできればと思います。

クォータの実装は難しくありません。ただし、クォータを分散環境(理想的にはすべてが共有されている-何もない)で機能させることは簡単ではありません。実際、クォータ状態はすべての分散プロセスで共有して、続行する必要があるかどうかを知る必要があります。中央クォータハンドラーを持つということは、ロックを使用することを意味します。これは、パフォーマンスがすぐに落ちると思います。プロキシ要求が処理されるたびにクォータステータスをロックすることは、私には解決策のようには見えません。

ヒントはありますか?

1
SCO

分散Erlang/OTPを試してみることができます。プロキシロジックはErlangで記述します。

Mnesiaテーブルで「クォータ」を維持できます。 Mnesiaは、ネットワーク全体のさまざまなErlangノードに分散できます。読み取りまたは書き込み中にテーブルをロックする必要があるかどうかを制御することもできます。

1
atulindore2