我更像是一名 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_pattern
Squid 中的配置指令;尤其是选项。
答案2
下面我的大部分评论都集中在这样的假设上:根据您的描述,内容是在后端进行轮询的。
需要修改该代码。这是一个糟糕的架构,任何中等负载都可能使网站完全瘫痪。在大多数情况下,这对第三方网站来说也是不礼貌的。
如果网站的 DNS 出现故障,或者他们的网站出现故障,则可能会阻止所有 Apache 子进程等待响应。届时,您的网站将不可用。根据代码的编写方式,可能会出现更糟糕的后果。
我认为最合理的方法是通过脚本定期轮询数据并使用这些结果。存储这些数据的最佳位置可能是数据库。
Web 代理是一种非常笨拙的解决方案,我甚至无法认为它是可以接受的。
如果尚不可用,本地 DNS 缓存可能会有助于稍微减少开销。
我看到的一个可能的解决办法是修改 www.thirdparty.com 的 /etc/hosts 以指向内部 Web 服务器,该服务器显示通过上述每晚运行的 cron 脚本下载的内容。
虽然这可能有效,但你不应该这么做。应用程序需要更改。