我们有一个应用程序可以解析来自外部源的数据并将其本地化,保存和调整图像大小作为该过程的最后一步。鉴于我们处理的规模 [迄今为止 200 万张图像],我们一直在使用 Rackspace 文件来托管数据......
require('/var/libs/rackspace/cloudfiles.php');
$auth = new CF_Authentication('xxx', 'yyyy');
$auth->authenticate();
$conn = new CF_Connection($auth,true);
$container = $conn->get_container('some container');
foreach ($lotsofitems as $onitem){
// check the record
// save the image to disk with cURL
// resize it into 4 more versions
// post it to rackspace
if(file_exists('/var/temp/'. $image_id . '_full'. $image_type)){
$object = $container->create_object($image_id . '_full' . $image_type);
$object->load_from_filename('/var/temp/'. $image_id . '_full' . $image_type);
unlink('/var/temp/'. $image_id . '_full' . $image_type); // remove the temp save
}
if(file_exists('/var/temp/'. $image_id . '_big'. $image_type)){
$object = $container->create_object($image_id . '_big' . $image_type);
$object->load_from_filename('/var/temp/'. $image_id . '_big' . $image_type);
unlink('/var/temp/'. $image_id . '_big' . $image_type); // remove the temp save
}
if(file_exists('/var/temp/'. $image_id . '_med'. $image_type)){
$object = $container->create_object($image_id . '_med' . $image_type);
$object->load_from_filename('/var/temp/'. $image_id . '_med' . $image_type);
unlink('/var/temp/'. $image_id . '_med' . $image_type); // remove the temp save
}
// delete the original
// repeat
}
在优化了我们的解析器、GD 等之后,我们对这个过程进行了基准测试,处理图像大约需要 1 秒,但是将 5 个图像变体传输到 Rackspace 的每个项目需要 2-5 秒,有时会达到 10+。
- 获取图片:1341964436
- 得到图片:1341964436
- 调整大小的图像:1341964437
- 一张图片:1341964446
- 阴天图片:1341964448
- 完成图片:1341964448
一些额外的点:
- 我们的处理服务器也在 Rackspace 的云上。
- 共有 5 个图像版本,大小从 30kb 到 2kb 不等
- 所有图像在传输之前保存到磁盘并在传输后删除
- 我们的容器 [我们使用几个整体,但每个项目一个] 启用了 CDN
有人对批量转移到 Rackspace 有建议吗?我们应该在一定的持续时间/请求数量后重新连接吗?以其他方式优化我们的连接?或者它只是关于分叉进程并运行大量调用。