【发布时间】:2021-10-16 01:48:31
【问题描述】:
我有一个简单的图像处理服务器来处理图像的身份验证、调整大小、裁剪等。 如果它最近做了一个相对较大的操作,例如调整图像大小,它会将调整后的新版本上传回 Cloud Storage,下次再次需要精确大小时会使用它。
我的问题是,下次有人请求该图像,或者服务器“直接”从 Google Cloud Storage 存储桶中提供未更改的图像时,我的 PHP 服务器“传递”图像数据的最佳方法是什么给用户,使用尽可能少的处理和内存?
现在我当前的工作代码归结为:
if ($image->exists()) {
header("Content-Type: image/jpeg");
echo $image->downloadAsString();
}
从外观上看,这似乎是一种糟糕的做事方式。但我不知道,所以我问。
编辑: 我不是在寻找最有效的方式来为客户提供一般或任何更大的方案中的图像,我正在寻找我可以在 PHP 中使用的最有效的函数来完成我想要做的事情尽可能少的延迟、CPU 使用率和内存。
“我正在尝试做的事情”是:在运行的 PHP 脚本中,验证用户是否可以访问图像,检查调整大小的图像是否存在,如果存在,将其中继到客户端。如果没有,请调整图像大小,将其发送回云存储以供以后检索,然后将调整大小的图像发送给用户。我现在唯一关心的部分是如何将数据从存储桶传递给用户。
假设包括存储桶本身在内的所有服务器都在同一个区域中。我没有使用框架。我需要通过网络服务器提供服务,对于那些我不需要的服务,我使用负载均衡器直接从云存储提供服务。我没有使用 CDN。
【问题讨论】:
-
用更多细节编辑您的问题。 1)你使用的是Laravel之类的框架吗? 2) 存储在 Google Cloud Storage 中的对象是否公开? 3) 您是否需要通过 Web 服务器提供文件,或者您可以使用公共访问或签名 URL 直接从 Cloud Storage 服务对象? 4) 你在使用 CDN 吗? 5)根据您问题中的信息,很难确定最有效。一般来说,考虑到成本和延迟,最有效的方法是将对象直接从 Cloud Storage 提供给客户端。