ADC

如何限制每个用户或客户端设备的带宽消耗

您的网站、应用程序或文件托管服务可用的网络和服务器资源有限,无法为其所有用户提供服务。最重要的资源之一是带宽。只有一部分用户群消耗大量带宽会导致网络拥塞,降低其他用户的资源可用性。为防止网络拥塞,您可能需要使用临时拒绝服务技术来限制客户端的带宽消耗,例如,如果客户端请求在请求之前的固定时间段内超过了预先配置的带宽值,则使用 HTML 页面响应客户端请求。

通常,您可以调节每台客户端设备或每个用户的带宽消耗。此用例演示了如何在一小时内将每个客户端的带宽消耗限制在 100 MB 以内。该用例还演示了如何使用提供用户名的自定义标头,将每位用户的带宽消耗量在一小时内调整为 100 MB。在这两种情况下,通过将流标识符中的间隔参数设置为 60 分钟,可以跟踪一小时移动时间段内的带宽消耗。这些用例还演示了如何导入 HTML 页面以发送给已超过限制的客户端。在这些用例中,导入 HTML 页面不仅可以简化响应者操作的配置,还可以简化所有需要相同响应的响应者操作的配置。

使用命令行界面限制每个用户或客户端设备的带宽消耗

在命令行界面中,执行以下任务以配置操作分析,以限制客户端或用户的带宽消耗。每个步骤都包括示例命令及其输出。

  1. 设置您的负载平衡配置。配置负载平衡虚拟服务器 mysitevip,然后配置所需的所有服务。将服务绑定到虚拟服务器。以下示例创建了十个服务并将这些服务绑定到 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 页面,然后在 responder action crossed_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. 配置响应程序策略。配置响应程序策略 myrespol1 与规则 ANALYTICS.STREAM(“myidentifier”).COLLECT_STATS 和操作 NOOP。然后,配置策略 myrespol2 以确定客户端或用户是否已超过 100 MB 的限制。策略 myrespol2 配置了响应者操作 crossed_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 标识符命令查看为指定标识符收集的统计信息。以下输出显示客户端的统计信息。

    > 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-->
    
如何限制每个用户或客户端设备的带宽消耗