
私が構築している Web サービス エンドポイントには、ユーザーが XML ファイルを投稿する場所があり、1 秒あたり 1,000 件を超えるリクエストが殺到します。
現在、これらの XML ファイルは http post 経由で送信されていますが、その大部分はレート制限されています。
問題は、レート制限は Web アプリケーションによって xml 内の source_id を検索することによって実行され、1 分あたりのリクエスト数が x を超えると、それ以上処理されなくなることです。
処理の早い段階でレート制限チェックを何らかの方法で実行し、50K のファイルがパイプラインを経由して Web サーバーに送られ、リソースを消費するのを防ぐことができるかどうか疑問に思っていました。
ロードバランサーは、レートの使用状況を確認するために何らかの方法で呼び出しを行うことができますか?
これが可能であれば、source_id をホスト ヘッダーに配置すれば、XML ファイルを解析してメモリにロードする必要がなくなります。
ホスト ヘッダーだけを確認し、50K の XML ファイル全体をメモリにロードしないことは可能ですか?
これには、TCP/IP スタック全体などに関するより詳しい知識が必要なので、あなたの洞察に本当に感謝します。
答え1
基本的に 2 つの可能性があります。
1) 設計に協力しない敵対的な攻撃者と対峙している場合。この場合、攻撃Host
者が送信するヘッダーを気にする必要はありません。IP によってレート制限をかけてください。
2) 協力的なクライアントが、必要以上の負荷をかけている場合。 この場合は、リクエストを受け入れて、クライアントに手を引くように伝える返信を送信します。
これら 2 つの単純なカテゴリのいずれにも当てはまらない、より複雑な状況の場合、最善の解決策はその状況によって異なる可能性があります。
答え2
同様のモジュールを使用して、Apache 経由でブロックできます。または、より早くブロックしたい場合は、iptables 文字列マッチングを使用して、正規表現経由でブロックすることもできます。
答え3
これがtcコマンド/ユーティリティは、少し練習が必要ですが、努力する価値はあります。私は、会社の LAN から離れた DMZ 内のサーバーへの転送速度を制限するためにこれを使用しています。
ここに、私を軌道に乗せてくれたリンクをいくつか示します...
Tc フィルター - ポート範囲のマスク値の計算: http://mailman.ds9a.nl/pipermail/lartc/2007q4/021739.html
単一のホストまたはネットマスクのレート制限: http://lartc.org/howto/lartc.ratelimit.single.html