如何使用 Squid 缓存代理消除瓶颈

如何使用 Squid 缓存代理消除瓶颈

我更像是一名 LAMP Web 开发人员,试图帮助系统操作员。当我加入一个项目时,我继承了一些旧的 PHP 意大利面代码。其中一些代码会发送到第三方网站(我们称之为 thirdparty.com)并使用 HTTP-GET 请求下载内容。不幸的是,代码的设计方式要求它每分钟需要执行几次。当我们使用“netstat -a”查看服务器上的瓶颈时,我们发现与 thirdparty.com 的连接一直在运行,而这些内容每天收集一次就足够了。

我需要知道的是 Squid 代理缓存服务器是否是我们需要的解决方案?我猜这可能让我们让它在网络上假装是 thirdparty.com。如果 Web 服务器需要查询 thirdparty.com,它会转而访问 Squid。然后 Squid 可以确定它是否需要从缓存中提供内容,或者是否需要转到 thirdparty.com 获取新内容。

这是我们需要的解决方案吗?其次,这是否易于配置并且仅用于缓存 thirdparty.com 请求?

答案1

是的,Squid 可以达到这个目的。

唯一棘手的部分可能是如果根据标头判断,thirdparty.com 的响应不可缓存,则说服 Squid 缓存该响应。

如果是这种情况,请查看refresh_patternSquid 中的配置指令;尤其是选项。

http://www.squid-cache.org/Doc/config/refresh_pattern/

答案2

下面我的大部分评论都集中在这样的假设上:根据您的描述,内容是在后端进行轮询的。

需要修改该代码。这是一个糟糕的架构,任何中等负载都可能使网站完全瘫痪。在大多数情况下,这对第三方网站来说也是不礼貌的。

如果网站的 DNS 出现故障,或者他们的网站出现故障,则可能会阻止所有 Apache 子进程等待响应。届时,您的网站将不可用。根据代码的编写方式,可能会出现更糟糕的后果。

我认为最合理的方法是通过脚本定期轮询数据并使用这些结果。存储这些数据的最佳位置可能是数据库。

Web 代理是一种非常笨拙的解决方案,我甚至无法认为它是可以接受的。

如果尚不可用,本地 DNS 缓存可能会有助于稍微减少开销。

我看到的一个可能的解决办法是修改 www.thirdparty.com 的 /etc/hosts 以指向内部 Web 服务器,该服务器显示通过上述每晚运行的 cron 脚本下载的内容。

虽然这可能有效,但你不应该这么做。应用程序需要更改。

相关内容