Правильный способ хранения статического файла для балансировки нагрузки в Laravel App - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть приложение Laravel, которое пользователи могут загружать изображения, я собираюсь использовать балансировщик нагрузки на производстве (2 веб-сервера), поэтому, насколько я понимаю, я должен хранить статический файл в отдельном хранилище.Я использую дроплет digitalocean для веб-сервера и пространство digitalocean для хранения изображений.

Проблема, с которой я сталкиваюсь, заключается в том, что отклик веб-сервера очень медленный, это занимает около 5 секунд, поскольку необходимо проверить, доступен ли файл вПробел или нет для каждого ответа.

Например, чтобы получить ответ ниже, я должен проверить, существует ли логотип в пути или нет.

{
    "_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)];
    });
}

Я видел в документе сказано, что он использует HTTP для подключения пространства DO, а HTTP намного медленнее, чем традиционное блочное хранилище, он предназначен для больших файлов.

Что я могу сделать, чтобы улучшить производительность, если я должен использовать другой сервис?

...