我正在构建一个 Web 服务端点,人们将向该端点发布 xml 文件,它每秒将承受超过 1K 个请求的冲击。
现在他们通过 http post 发送这些 xml 文件,但其中大多数都会受到速率限制。
问题是,速率限制将由 Web 应用程序通过查找 xml 中的 source_id 来完成,如果每分钟超过 x 个请求,则不会进一步处理。
我想知道我是否可以以某种方式在处理过程中尽早进行速率限制检查,从而节省通过管道到我的 Web 服务器并消耗资源的 50K 文件。
负载均衡器能否以某种方式发出调用来验证速率使用情况?
如果可能的话,我可以将 source_id 放在主机头中,这样 XML 文件也不必被解析并加载到内存中。
是否可以只查看主机头而不将整个 50K xml 文件加载到内存中?
我真的很欣赏您的见解,因为这需要对整个 tcp/ip 堆栈等有更多的了解。
答案1
有两种基本类型的可能性:
1) 您正在与不会配合您设计的恶意攻击者打交道。在这种情况下,您为什么关心Host
他们发送了什么标头?通过 IP 限制他们的速率。
2) 您正在与合作客户端打交道,这些客户端施加的负载超出了您的预期。在这种情况下,只需接受请求并向他们发送回复,告诉他们退出。
如果您遇到更复杂的情况,不属于这两个简单类别之一,那么最佳解决方案可能取决于具体情况。
答案2
您可以使用类似模块通过 apache 阻止它。或者,如果您想尽早将其切断,您可以使用 iptables 字符串匹配通过正则表达式阻止事物。
答案3
这就是碳命令/实用程序的作用是 - 虽然需要花点功夫,但值得付出努力。我用它来限制传输到我们公司 LAN 外的 DMZ 中的服务器的速率。
以下是一些帮助我了解情况的链接...
Tc 过滤器 - 端口范围计算掩码值: http://mailman.ds9a.nl/pipermail/lartc/2007q4/021739.html
限制单个主机或网络掩码的速率: http://lartc.org/howto/lartc.ratelimit.single.html