在Laravel App中存储静态文件以实现负载平衡的正确方法

时间:2018-12-19 08:50:03

标签: laravel storage load-balancing digital-ocean

我有一个Laravel应用程序,用户可以上传图像,我将在生产环境中使用负载均衡器(2个Web服务器),因此据我了解,我必须将静态文件存储在单独的存储中。我将digitalocean液滴用于Web服务器和digitalocean空间来存储图像。

我面临的问题是Web服务器响应非常慢,大约需要5秒钟,因为它必须检查文件在DO空间中是否可用,而不是针对每个响应都可以。

例如,要获得以下答复,我必须检查路径中是否存在徽标。

{
    "_id": "5c18fe1fbfaa6a5ae1141e08",
    "title": "Test Even 2",
    "organization_id": 2,
    "logo": {
        "360": "https://ezpwe.sgp1.digitaloceanspaces.com/events/5c18fe1fbfaa6a5ae1141e08/logo/360.png",
        "480": "https://ezpwe.sgp1.digitaloceanspaces.com/events/5c18fe1fbfaa6a5ae1141e08/logo/480.png",
        "720": "https://ezpwe.sgp1.digitaloceanspaces.com/events/5c18fe1fbfaa6a5ae1141e08/logo/720.png"           
    }
}

使用此代码

public function getLogoAttribute($value)
{
    $path = "events/{$this->id}/logo";
    $files = collect(Storage::files($path));

    return $files->isEmpty() ? null : $files->mapWithKeys(function ($file) {
        return [File::name($file) => Storage::url($file)];
    });
}

我在document中看到,它使用HTTP连接DO空间,并且HTTP比传统的块存储要慢得多,它是为大型文件设计的。

我应该怎么做才能提高性能,我应该使用其他服务吗?

0 个答案:

没有答案