简单的 Apache 模块可以根据机器负载来限制请求吗?

简单的 Apache 模块可以根据机器负载来限制请求吗?

我有一台 Apache 服务器,它使用 mod_wsgi 为 django 应用程序提供服务。我想知道是否有一种简单的方法可以根据机器的负载在 apache 级别限制请求。

理想情况下,我想要一个 Apache 模块,如果负载低于某个数字,则一切正常。但是,如果负载高于某个数字,则 X% 的 IP 地址将在 Y 分钟内提供静态 html 页面。有这样的软件吗?

我们正在寻找一种“穷人的节流系统”。我们可以快速轻松地投入使用。基于机器负载的节流是好的,因为这意味着事情最终会恢复正常。

我们的 Web 应用程序进行了大量处理,因此限制带宽的因素不会影响这一点,我们想要“限制”的不是带宽,而是请求。理想情况下,我们希望一些现有请求(即基于 IP 地址的请求)能够持续一段时间(以便它们能够完成其工作)。

答案1

我从未亲自设置过,我知道这不是您正在寻找的(即它不是 Apache 模块),但有一个名为流量控制的工具。鉴于 tc 是通过简单的命令行调用的,您似乎可以将其集成到您自己的脚本中,并根据 top 的负载输出或您监控负载的其他任何内容来启动您想要的节流。

此页面上有一个示例脚本:http://wiki.openvz.org/Traffic_shaping_with_tc

答案2

免责声明:我是清漆的粉丝。

我不知道有任何官方的 Apache 模块可以本地执行此操作。

如果后端(django)在指定时间内没有响应,则可以提供静态 html。

如果你真的想根据平均负载为 10% 的访问者提供静态文件,我想可以这样做虚拟模组(我想你必须自己写)。

相关内容