Как оптимизировать скорость загрузки из корзины AWS S3? - PullRequest
0 голосов
/ 05 ноября 2019

Мы храним пользовательские загружаемые файлы в корзинах AWS S3 в регионе Северная Вирджиния. Наши клиенты скачивают файлы из этих ведер по всему миру. Размер файла колеблется от 1 до 20 ГБ. Для файлов большего размера клиенты, находящиеся за пределами США, сталкиваются с жалобами на медленную или прерванную загрузку. Как мы можем оптимизировать эти загрузки?

Мы думаем о следующих подходах:

  1. Ускоренные загрузки (более высокие затраты)
  2. использование CloudFront CDN с источником S3 (Поскольку наши загрузки состоят из разных файлов, каждый файл, загружаемый один или два раза, будет помогать CDN, так как в первый раз он будет получать данные только из США.
  3. Использование akamai в качестве CDN (то же самое, что иCloudFront, единственное, что мы имеем более выгодную цену с akamai на уровне организации)
  4. В зависимости от местоположения пользователя (мы знаем, где произойдет загрузка), мы можем сохранить файл в определенном сегменте, который былсоздан в этом регионе AWS.

Итак, я хочу рекомендации с точки зрения стоимости + скорость загрузки. Что может быть лучшим вариантом для дальнейшего изучения?

1 Ответ

1 голос
/ 05 ноября 2019

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

С другой стороны, вы получаете что-то еще, используя CloudFront или S3 Transfer Acceleration (последний по сути такой же, как первыйодин без кэширования): запросы поступают в сеть AWS уже на грани, поэтому вы можете избежать использования перегруженных сетей от местоположения пользователя до местоположения вашей корзины S3, что обычно является основной причиной медленных и прерванных загрузок.

Хранение данных в зависимости от местоположения пользователя также улучшит ситуацию, хотя крайние местоположения CloudFront обычно ближе к пользователю, чем в следующем регионе AWS с S3. Еще одна причина, по которой файлы не распределяются по различным сегментам S3 в зависимости от местоположения пользователей, - это накладные расходы на управление: вам нужно управлять несколькими сегментами S3, хранить каждый файл в правильном сегменте и указывать каждому пользователю правильный сегмент. Хотя хранение можно упростить с помощью S3 Replication (вы можете использовать фильтр только для репликации объектов в конкретную целевую корзину, предназначенную для этой корзины), затраты на управление несколькими конечными точками для нескольких клиентов остаются. Кроме того, хотя вы заявляете, что знаете местоположение клиентов, что произойдет, если клиент действительно изменит свое местоположение и вдруг захочет загрузить объект, который теперь хранится на другом конце света? У вас снова возникнет та же проблема.

В вашей ситуации я бы, вероятно, выбрал вариант 2 и настроил CloudFront перед S3. Я бы предпочел CloudFront, а не S3 Transfer Acceleration, поскольку он дает вам больше гибкости: вы можете использовать свой собственный домен с HTTPS, позже вы сможете перенастроить источники при изменении расположения файлов и т. Д. В зависимости от того, как далеко вы хотите зайти. Вы можете даже объединить это с репликацией S3 и иметь несколько источников для вашего дистрибутива CloudFront, чтобы направлять запросы на разные файлы в сегменты S3 в разных регионах.

Какое решение выбрать, зависит от вашего варианта использования и ограничений. Одно ограничение кажется вам дорогим, другим может быть, например, максимальный размер файла 20 ГБ , поддерживаемый CloudFront, если у вас есть файлы, которые нужно распространять больше этого размера.

...