1

複数のサーバーへのリクエストをレート制限できるレート リミッター システムを作成したいと考えています。このために、すべてのサーバーがこれらのカウンターをチェックおよび更新できるように、カウンター (IP アドレスごとに 1 つのカウンター) を作成したいと考えています。

私の質問: 最善のアプローチは何ですか。1 つのマップを作成し、クライアントの IP アドレスをキーとして使用し、その IP のカウンターは Java オブジェクトになります。そのオブジェクトはマップ エントリの値になります。

また

各 IP アドレスのマップを作成し、カウンター名をキーとして使用し、カウンター値をエントリの値 (int) として使用します。

私の最優先事項はスピードです。カウンター オブジェクトの取得とインクリメントは、非常に高速に行う必要があります。

それで何が一番いいの?多数の小さな地図か、1 つの大きな地図か?

誰かがこれで私を助けてくれることを願っています。

よろしく、

マールテン

4

1 に答える 1

0

レート制限カウンターは、システム内で最も論争の的となるオブジェクトの 1 つになる可能性があります。Hazelcast マップが十分に機能するかどうかはわかりません。

AtomicNumberHazelcast 1.9のインターフェイスを見てみるとよいかもしれませんが、これらのオブジェクトを任意に多数作成できるかどうか (または、作成したオブジェクトを破棄できるかどうかもわかりません) はわかりません。

最善の策は、HAProxy または同様のロード バランサーを使用して、アプリ サーバーの前にスロットリング ルールを実装することです。

于 2010-12-24T00:52:54.973 に答える