什么出站HTTP节stream解决scheme存在?

我正在寻找一种方法来灵活地pipe理出站HTTP / HTTPSstream量,尊重网站策略,并且可以部署在我们数据中心networking的“边缘”。

例如,我们使用几个具有“每秒不超过4个请求”或“每天最多5万个请求”等限制速率的Web API。在公司中有许多人使用这些类似的各种服务,所以我不能集中pipe理软件中的所有请求。 人们以不同的时间表和不同的强度运行这些东西。 我们很好(满足内部需求),但是我们意识到 – 总体来说,我们可能会陷入产生如此多的并发stream量的情况,以至于我们被网站阻止。 (虽然这是无意的)

我所期望/希望的是,我们可以利用networking硬件世界中已经存在的带宽pipe理/stream量整形解决scheme,并随后在数据中心networking的边缘部署这样的解决scheme。

理想情况下,我可以编写L4或L7路由规则,这样可以确保我们的数据中心不会产生超过 – 例如4 req / sec的出站数据。 其余的请求在理想情况下也会在硬件上排队等待一段合理的时间,而队列容量超出的情况将被拒绝。 我意识到没有免费的午餐,节stream不会解决一个根本的内在需求(请求)与供应(网站策略)问题。 但是,节stream将使我们能够在某个窗口(比如说一天)“平滑”请求,以便我们能够以适当的方式利用外部服务,同时最大限度地利用我们的使用。

有没有人知道这样的networking级带宽pipe理解决scheme? 如果是这样,它是否也支持不仅基于HTTP请求中的URL而且还有一些额外的HTTP头的规则?

netfilter的function几乎是无限的。 在这一个我会使用iptables中的限制模块。 请注意:在不丢包的情况下,没有办法限制TCP / IP的速率。 您可以将数据包排队,但最终当队列满了时,数据包将被丢弃。 所以我们要删除SYN包。 我到目前为止还没有尝试过,可能是因为很长的重试超时,没有人这样做,即浏览器可能被locking。

限制

该模块使用令牌桶filter以有限的速率进行匹配。 使用此扩展名的规则将匹配,直到达到此限制(除非使用“!”标志)。 例如,它可以与LOG目标组合使用,以提供有限的日志logging。

– 限制率最大平均匹配率:指定为一个数字,带有可选的“/秒”,“/分钟”,“/小时”或“/天”后缀。 默认是3 /小时。

–limit-burst number匹配的最大初始包数:每次达到上面指定的限制时,该号码将被重新充值一次,直至达到该数目; 默认是5。

  1. 我们设置了一个新的链接来进行连接限制。 对于4 /秒,它将返回到调用者链,其余的将被丢弃。
  2. 到80端口的新连接被发送到新链。
iptables -N CONNRATELIMIT iptables -A CONNRATELIMIT -m limit --limit 4/sec -j RETURN iptables -A CONNRATELIMIT -j DROP iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j CONNRATELIMIT 

我用次链只是为了展示这个概念。 您也可以在路由器上执行此操作,然后您必须为每个要限制的服务器或实体创build一个链。 并使用FORWARD而不是INPUT。

排队

在这个解决scheme中没有“长时间”排队。 你可以玩极限爆破参数。 将SYN数据包发送到排队规则也是可能的:设置要复杂得多,我不知道它是如何使SYN数据包丢弃更好的。

url匹配

URL匹配也是可能的,在这种情况下,你会丢弃这个数据包,并通过等待重传来延迟连接, 最近我已经对这个模块做了这样的事情,但是我用它来防止暴力攻击和端口扫描。 所以我不在乎我连接的限制。 正确处理连接将变得困难!