Прокачайся в код-ревью: для первых 50 участников — курс бесплатный

время чтения: 4 мин

Как использовать Amazon CloudFront на проектах

Если вы хотите эффективно и быстро доставлять контент конечным пользователям, обратите внимание на Amazon CloudFront. В статье рассматриваются преимущества услуг AWS, разъясняется, что такое CDN, и приводится практический пример настройки и использования Amazon CloudFront.

Автор статьи — senior systems engineer EPAM Дэвид Хурадо.

Все чаще можно услышать о сервисах Amazon Web Services (AWS) и их облачных решениях, которые предлагают клиентам ряд преимуществ. Но если посмотреть на то, как эти сервисы интегрируются в сложные технологические архитектуры, можно побояться применять AWS в своих проектах, поскольку настройка кажется непростой. В этой статье мы попытаемся разобраться, как использовать один из самых известных сервисов AWS — Amazon CloudFront, чтобы сократить задержку доставки статического контента.

Внедрение облачных технологий с точки зрения управления проектами

Что такое сеть доставки контента и как она работает

Сеть доставки контента (англ. Content Delivery Network, CDN) — это сеть взаимосвязанных серверов в различных географических зонах. Ее цель — увеличение скорости доставки контента, например, исходных файлов сайта или мультимедийного контента. Эта территориально-распределенная сеть работает в основном на принципе кэширования, что значительно улучшает загрузку контента.

Кэширование в этой сети работает следующим образом:

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

На картинке наглядно показан процесс, описанный выше:

Кэширование в сети CDN
Источник изображения: cloudflare.com

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

Глобальная инфраструктура AWS

Регионы и зоны доступности AWS

Глобальная инфраструктура AWS относится к доступным по всему миру центрам обработки данных, через которые AWS обеспечивает возможность использования своих сервисов. Их инфраструктура состоит из регионов (англ. Regions), которые, в свою очередь, состоят из зон доступности (англ. Availability Zones). На рисунке показано текущее глобальное распределение инфраструктуры AWS:

Глобальное распределение инфраструктуры AWS
Источник изображения: aws.amazon.com

Регионы и зоны доступности, пожалуй, являются наиболее упоминаемыми элементами инфраструктуры AWS. Однако существует еще одна важная составляющая — AWS Edge Locations.

Пограничные локации AWS

Пограничные локации AWS (англ. Edge Locations) — еще одна часть глобальной инфраструктуры AWS, состоящая из специально разработанных центров обработки данных, которые предназначены для максимально быстрой доставки услуг. Amazon имеет большое количество таких дата-центров, распределенных по всему миру и находящихся к пользователям ближе, чем регионы или зоны доступности. Пограничные локации доступны в географических областях даже вне регионов AWS. Важно уточнить, что Edge Locations используются только некоторыми специфическими сервисами, включая CloudFront.

На рисунке вы можете увидеть расположение пограничных локаций Amazon CloudFront:

Расположение пограничных локаций Amazon CloudFront
Source image: aws.amazon.com

Amazon CloudFront

Принимая во внимание все предыдущие понятия, мы переходим к Amazon CloudFront. Это сервис CDN от AWS, который предоставляет нам быстрый и простой доступ ко всем преимуществам CDN и даже больше. CloudFront использует пограничные локации AWS в качестве своей сети серверов для глобальной доставки контента.

Как использовать сервис

Давайте рассмотрим небольшой практический пример того, как мы можем использовать сервис и его преимущества. В качестве исходного сервера я буду использовать хранилище Amazon S3, в которое уже загружена фоновая картинка (wallpaper). Хранилище S3 находится в восточной части США (Северная Вирджиния).

Amazon S3 bucket

Когда я открываю эту картинку в своем браузере с помощью встроенных инструментов разработчика, я вижу, сколько времени требуется для получения контента из моего местоположения (Колумбия):

Сколько времени требуется для получения контента

В среднем после нескольких тестов общее время варьируется от 250 до 350 мс. Теперь настроим дистрибуцию CloudFront для хранилища S3 и посмотрим, каковы ее преимущества.

Настройка дистрибуции CloudFront

Создать дистрибуцию CloudFront довольно просто: укажите источник контента и введите его название:

Создание дистрибуции CloudFront

AWS позволяет мне создать собственную сеть CDN, просто указав домен источника (мое хранилище S3) и название дистрибуции CloudFront (tech-talk-cloudfront-distribution):

Создание собственной сети CDN

После создания дистрибуции вы получите URL, который можно использовать для запроса контента вместо исходного URL, предоставленного исходным сервером. Теперь, запрашивая контент через CDN вместо прямого запроса к исходному серверу, мы получим следующие результаты:

В нашем первом запросе контента через CDN мы получим схожее — если сравнивать с непосредственным запросом к исходному серверу — время ответа (400 мс). Это связано с тем, что мы делаем первый запрос из моего географического местоположения. Но теперь мы видим новый заголовок в списке с названием X-Cache и значением "Miss from cloudfront":

Miss from cloudfront

Это означает, что CloudFront не нашел копию контента в кэше, который вы запрашиваете, и контент пришлось запросить напрямую у исходного сервера. Это нормально, учитывая описанный ранее процесс, но это также означает, что CloudFront сам отправил копию контента в ближайшую локацию, откуда был ответ. В дальнейшем все запросы, которые совершаются из той же географической области для этого контента, будут обрабатываться этой пограничной локацией. Мы можем увидеть новый статус X-Cache "Hit from cloudfront", а также значительное улучшение времени, которое после нескольких тестов варьировалось от 60 до 100 мс:

Hit from cloudfront

Таким образом Amazon CloudFront помогает сократить задержку доставки контента.

Выводы

Amazon CloudFront — это сервис CDN от Amazon Web Services, использующий глобальную инфраструктуру AWS для быстрой доставки контента. Он имеет ряд плюсов, включая улучшенную безопасность и снижение затрат на пропускную способность. Лично я рекомендую сервис из-за его преимуществ и простоты использования: он отлично подходит для проектов, таких как сайты, приложения для стриминга контента (например, видео или музыки), распространение обновлений программного обеспечения и др.

Теперь я предлагаю вам самостоятельно изучить этот сервис и познакомиться с его многочисленными достоинствами. Вы можете начать с тестирования концепции, так как сервис входит в бесплатную версию AWS.