限制单个 HTTP 请求的带宽,同时不限制总带宽

限制单个 HTTP 请求的带宽,同时不限制总带宽

看看类似的工具TC,奇迹塑造者,HTB康卡斯特,所有这些工具似乎都在网络接口或至少是用于限制带宽的“连接组”级别上运行。我想不是限制一组连接的带宽,但限制单个连接的最大速率。

具体来说:是否有可用的工具可以用来调整单个 HTTP 请求的最大下载速率?

细节

我想要做的是模拟从 S3 上的存储桶中获取数据的缓慢请求。我发现对于远离数据中心的请求,单个项目的下载通常很慢(<500 kb/s),但并行下载的下载速度> 5 mb/s。

我可能可以通过在这些请求中添加延迟来实现这一目标(这会减慢串行请求的速度,但不会减慢整体带宽),但更直接的解决方案会很棒。

答案1

根据你的要求我想建议它是一个备受推崇的 HTTP 缓存服务器。它位于 Web 服务器层的前面,并将内容缓存在 RAM 中,以便尽快处理后续请求。

以下参考文章很好地演示了如何在 CentOs 上的 Web 服务器上安装和配置 varnish。

有两个配置文件需要编辑,/etc/sysconfig/清漆/etc/varnish/default.vcl

编辑默认.vcl您可以优化您的带宽问题。我已经安装在我的服务器上。

作为示例,配置如下所示。

backend web1 {
    .host = "PUBLIC_IP_ADDRESS";
    .port = "80";
    .probe = {
        .url = "/";
        .interval = 5s;
        .timeout = 1s;
        .window = 5;
        .threshold = 3;
    }
}

进一步参考: 在 CentOS 6 上设置 Varnish 4 作为缓存服务器和负载均衡器

答案2

限制率nginx的设置正如其他响应者所建议的,似乎克服了鱿鱼和清漆中的一些问题。来自文档:

限制向客户端传输响应的速率。速率以每秒字节数指定。零值禁用速率限制。该限制是按请求设置的,因此如果客户端同时打开两个连接,则总体速率将是指定限制的两倍。

对于我的场景,我希望限制单个请求的大文件传输下载字节的速率没有限制客户端的总带宽,这正是我所需要的。

乌贼

鱿鱼的延迟池对客户端进行分组(通常按 IP)并使用分桶速率限制。然而甚至文档说

您无法限制单个 HTTP 请求的连接速度。

清漆的vmod_vsthrottle(同样地libvmod 节流阀)采用令牌桶算法并采用任意密钥。这个实现看起来很酷,但是看起来没有一个好的方法来减缓流量。相反,超过限制(以请求/秒为单位)的请求会被响应为类似第429章

相关内容