【发布时间】:2013-11-22 21:31:46
【问题描述】:
所以我有一个有趣的情况,我不知道如何解决它。
我们有一个流程来汇总查看我们的销售数据,然后通过 Google Chart 构建图表。为了避免重创数据库(或谷歌),它每 30 分钟运行一次。它查看前一个文件以确定它是否达到了 30 分钟的阈值,如果是,则构建新文件。我们在负载均衡器后面有两台服务器。因此,两台服务器都必须有权访问相同的位置来存储此文件。我们使用通过 NFS 安装的 EBS 共享来完成此操作(我们的整个设置都在 AWS 中)。这个过程工作得很好。
问题有时是 EBS 共享速度缓慢或断开连接。然后,这会导致连锁反应,整个内部工具都在等待处理这个文件(除非您关闭通知)。我已经阅读了一些讨论stream_set_timeout 的线程(例如this one),但不清楚您将如何使用它来加载文件(它不完全是流)并且我一直无法找到任何示例。
这是一个 sn-p,让您了解 PHP 文件在做什么
$file = '/ebs/path/to/image.png';
$newfile=false;
if(!is_file($file)) $newfile=true;
elseif(filemtime($file)+1800 < time()) {
$newfile=true;
unlink($file);
}
if(!$newfile){
$i=imagecreatefrompng($file);
header('Content-Type: image/png');
header('Expires: ' . gmdate('D, d M Y H:i:s', filemtime($file) + $timeout) . ' GMT');
imagepng($i);
imagedestroy($i);
exit;
} else {
// Build and output a new file here
}
如何为此脚本创建超时?
【问题讨论】:
-
根本原因是“EBS速度慢或断开连接”,所以最终的解决方案是解决这个问题。 AWS 是否能胜任这项任务是另一个问题。
标签: php amazon-web-services timeout nfs