ADC

ユーザーまたはクライアントデバイスごとの帯域幅消費量を制限する方法

Web サイト、アプリケーション、またはファイルホスティングサービスでは、すべてのユーザーが利用できるネットワークリソースとサーバーリソースには限りがあります。最も重要なリソースの 1 つは帯域幅です。一部のユーザーのみが帯域幅を大量に消費すると、ネットワークが混雑し、他のユーザーが利用できるリソースが低下する可能性があります。ネットワークの混雑を防ぐには、一時的なサービス拒否の手法を使用して、クライアントの帯域幅消費を制限する必要がある場合があります。たとえば、要求に至るまでの一定期間にあらかじめ設定された帯域幅値を超えた場合に、HTML ページでクライアント要求に応答するなどです。

一般に、帯域幅の使用量はクライアントデバイスごとまたはユーザーごとに調整できます。このユースケースは、1 時間の間にクライアントあたりの帯域幅消費量を 100 MB に制限する方法を示しています。このユースケースでは、ユーザー名を提供するカスタムヘッダーを使用して、1 時間にわたってユーザー 1 人あたりの帯域幅消費量を 100 MB に調整する方法も示しています。いずれの場合も、1 時間の移動期間における帯域幅消費量の追跡は、ストリーム識別子のインターバルパラメーターを 60 分に設定することで実現されます。ユースケースでは、制限を超えた HTML ページをインポートしてクライアントに送信する方法も示しています。HTML ページをインポートすると、これらのユースケースでのレスポンダーアクションの設定が簡単になるだけでなく、同じレスポンスを必要とするすべてのレスポンダーアクションの設定も簡単になります。

コマンドラインインターフェイスを使用してユーザーまたはクライアントデバイスごとの帯域幅消費を制限するには

コマンドラインインターフェイスで、次のタスクを実行して、クライアントまたはユーザーの帯域幅消費を制限するアクション分析を設定します。各ステップには、サンプルコマンドとその出力が含まれています。

  1. 負荷分散構成を設定します。負荷分散仮想サーバー mysitevip を構成し、必要なすべてのサービスを構成します。サービスを仮想サーバーにバインドします。次の例では、10 個のサービスを作成し、そのサービスを mysitevip にバインドします。

    > add lb vserver mysitevip HTTP 192.0.2.17 80
     Done
    > add service service[1-10] 192.0.2.[240-249] HTTP 80
    service "service1" added
    service "service2" added
    service "service3" added
    .
    .
    .
    service "service10" added
     Done
    > bind lb vserver vserver1 service[1-10]
    service "service1" bound
    service "service2" bound
    service "service3" bound
    .
    .
    .
    service "service10" bound
     Done
    <!--NeedCopy-->
    
  2. ストリームセレクタを設定します。以下のストリームセレクターのいずれかを設定します。

    • クライアントごとの帯域幅消費を制限するには、クライアントの IP アドレスを識別するストリームセレクターを設定します。

       > add stream selector myselector CLIENT.IP.SRC
        Done
       <!--NeedCopy-->
      
    • ユーザー名を提供する要求ヘッダーの値に基づいてユーザーごとの帯域幅消費を制限するには、ヘッダーを識別するストリームセレクターを設定します。次の例では、ヘッダーの名前は UserHeader です。

       > add stream selector myselector HTTP.REQ.HEADER(“UserHeader”)
        Done
       <!--NeedCopy-->
      
  3. ストリーム識別子を設定します。ストリームセレクターを使用するストリーム識別子を設定します。間隔パラメータを 60 分に設定します。

    > add stream identifier myidentifier myselector -interval 60 -sampleCount 1 -sort BANDWIDTH
     Done
    <!--NeedCopy-->
    
  4. レスポンダアクションを設定します。帯域幅消費制限を超えたユーザーまたはクライアントに送信する HTML ページをインポートし、そのページをレスポンダーアクション crosssed_limits で使用します。

    > import responder htmlpage http://.1.1.1/stdpages/wait.html crossed-limits.html
    This operation may take some time, Please wait...
    
     Done
    > add responder action crossed_limits respondwithhtmlpage crossed-limits.html
     Done
    <!--NeedCopy-->
    
  5. レスポンダポリシーを設定します。ANALYTICS.STREAM (「myidentifier」) .COLLECT_STATS というルールとアクション NOOP を使用してレスポンダーポリシー myrespol1 を設定します。次に、クライアントまたはユーザーが 100 MB の制限を超えているかどうかを判断するポリシー myrespol2 を設定します。ポリシー myrespol2 には、レスポンダーアクション crosssed_limits が設定されています。

    > add responder policy myrespol1 'ANALYTICS.STREAM("myidentifier").COLLECT_STATS' NOOP
     Done
    > add responder policy myrespol2 'ANALYTICS.STREAM("myidentifier").BANDWIDTH.GT(104857600)' crossed_limits
     Done
    <!--NeedCopy-->
    
  6. レスポンダーポリシーを負荷分散仮想サーバーにバインドします。統計データのみを収集するポリシー myrespol1 の方が優先度が高く、GOTO 式が NEXT である必要があります。

    > bind lb vserver mysitevip -policyName myrespol1 -priority 1 -gotoPriorityExpression NEXT
     Done
    > bind lb vserver mysitevip -policyName myrespol2 -priority 2 -gotoPriorityExpression END
     Done
    <!--NeedCopy-->
    
  7. 構成をテストします。複数のクライアントまたはユーザーからのテスト HTTP リクエストを負荷分散仮想サーバーに送信し、stat stream identifier コマンドを使用して、指定された識別子について収集された統計を表示して、構成をテストします。次の出力は、クライアントの統計を表示します。

    > stat stream identifier myidentifier -sortBy BandW –fullValues
    Stream Session statistics
                              Req           BandW
    192.0.2.30                5000          3761
    192.0.2.31                29            2602
    192.0.2.32                25            51
    
                              RspTime       Conn
    192.0.2.30                2             0
    192.0.2.31                0             0
    192.0.2.32                0             0
     Done
    >
    <!--NeedCopy-->
    
ユーザーまたはクライアントデバイスごとの帯域幅消費量を制限する方法

この記事の概要