Content Delivery Network

«Мегашоп» уже весьма геораспределён — у него есть кластеры серверов и распределённое облачное кэширование. Но вопрос с доступностью решён ещё не окончательно: нужно подумать о скорости, с которой пользователи будут получать данные из кэша. В Yandex Cloud для увеличения этой скорости есть сервис доставки контента — CDN (Content Delivery Network), механизм работы которого основан на разделении данных по системе доменных имён (DNS). Разберём его и настроим CDN для «Мегашопа».

Методы разделения данных на основе DNS

Есть два метода разделения данных на основе DNS — каждый со своими особенностями.

GeoDNS

GeoDNS (solitary traffic directors, global traffic directors) — это метод географических доменных имён, который использует алгоритм определения геокоординат по IP-адресу пользователя. Клиент отправляет запрос, DNS-сервер определяет местоположение пользователя по IP-адресу и находит ближайшую точку присутствия.
Точка присутствия (пограничный узел, Point of presence, PoP) — это базовый компонент CDN. Здесь находятся копии или кэшированные версии контента, полученного от основного источника. Их количество и географическое расположение влияет на эффективность использования CDN. Чем ближе они к пользователям интернет-ресурса, тем быстрее доставляется им контент. Чем больше их количество, тем меньше нагрузка на исходный сервер.
GeoDNS позволяет:
  • Оптимизировать трафик и обеспечить надёжную балансировку нагрузки.
  • Блокировать посетителей веб-сайта по странам.
  • Выдавать контент адресно в зависимости от геоположения посетителя. Например, Кинопоиск покажет пользователю из Турции совсем иное, чем из Москвы
☝ GeoDNS позволяет контролировать, кто именно получает доступ к вашему ресурсу в зависимости от географического положения. Это позволяет ограничивать доступ из определённых стран, обеспечивая соблюдение региональных законов. Именно такой способ CDN используется в Yandex Cloud.

Anycast

Anycast — это метод сетевой адресации и маршрутизации, при котором один IP-адрес присваивается нескольким серверам в сети. Серверы при этом находятся в разных точках присутствия.
В зависимости от местоположения источника запросов данные отправляются на ближайший сервер. Так можно уменьшить количество сетевых переходов и задержку в передаче данных. Запрос DNS-клиента будет отправляться от одной точки присутствия к другой, пока не достигнет первого авторитетного сервера имён.
Найти такой сервер можно с помощью инструмента nslookup.
Anycast DNS можно представить как единый IP-адрес с несколькими точками присутствия. Он позволяет повысить производительность и устойчивость DNS, но не даёт контролировать трафик в зависимости от страны или региона.

Механизм работы CDN

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

Как работает CDN

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

Архитектура CDN

Схема работы CDN достаточно проста:
Основной сервер, или сервер-источник, — это тот самый сервер, откуда CDN берёт контент.
CDN, или пограничные серверы, хранят копии контента, который предоставляют пользователям по запросу. Эти серверы находятся в точках присутствия. У них может быть своя база данных.
Кэш — кэш пограничных серверов. Он помогает доставлять контент быстрее, когда пользователь делает первый запрос. Когда исходный контент меняется на сервере-источнике, на нём запускается процесс обновления или удаления копий контента в кэше пограничных серверов.

Реализация CDN в Yandex Cloud

В качестве основного сервера для размещения данных можно использовать один из трёх вариантов:
  • Бакет из Yandex Object Storage, в том числе настроенный как хостинг статического сайта. Object Storage — это S3-подобное объектное хранилище. Такое решение подойдёт как для сервисов с высокой нагрузкой, которым необходим быстрый и надёжный доступ к данным, так и для проектов с менее строгими требованиями к системе хранения.
  • L7-балансировщик нагрузки из Yandex Application Load Balancer. CDN-серверы будут обращаться к балансировщику по одному из его IP-адресов, который нужно выбрать в настройках источника.
  • Собственный сервер или другой ресурс, доступный по доменному имени. Например, если источник — сервер с доменным именем files.example.com, то за файлом /static/common.css CDN-серверы будут обращаться к серверу по адресу files.example.com/static/common.css.

Преимущества и ограничения CDN

Преимущества CDN:
  • Улучшает SEO, поскольку сайты загружаются быстрее, что улучшает их видимость в поисковых системах.
  • Позволяет избежать дополнительных расходов на инфраструктуру, так как не требуется покупать новое оборудование или увеличивать мощность сервера-источника.
  • Повышает доступность сайта за счёт резервирования серверов друг другом, что гарантирует непрерывность работы сайта.
  • Открывает доступ к подробной статистике о трафике в реальном времени.
  • Делает сайт доступным из любой точки мира благодаря глобальному покрытию CDN.
  • Снижает нагрузку на сервер-источник.
Ограничения CDN:
  • Проблемы с динамическим контентом CDN хорошо справляется со статическим контентом, но не может оптимизировать динамический контент, который должен обрабатываться на сервере.
  • Задержки при обновлении контента После обновления контента на основном сервере может пройти некоторое  время, прежде чем изменения отобразятся на серверах CDN, что временно  замедлит доступ к новому контенту.
  • Блокировка по IP-адресам В некоторых странах возможны блокировки сайтов по IP-адресам, включая адреса CDN, что может привести к недоступности множества сайтов.
  • Зависимость от провайдера Если у CDN-провайдера возникают технические проблемы, это может повлиять на доступность многих сайтов, которые пользуются его услугами.

Как настроить CDN в облаке

CDN в облаке получится настроить только при наличии доменного имени. В этой практике будем считать, что у вас его нет, поэтому вы настроите CDN на базе object storage-сайта.
В контексте объектного хранилища файлы и каталоги называются объектами. Эти объекты располагаются в корзинах-бакетах. Система хранения объектов в корзине организована по плоскому принципу, однако инструменты с графическим интерфейсом позволяют работать с объектным хранилищем как с иерархической файловой системой.

Практика

🔍 Перед тем как вы начнёте выполнять практику, загляните в раздел Биллинг и проверьте, сколько средств от гранта осталось. Их должно хватить на все задания в этой теме, но всё равно стоит следить за расходами.
  1. Сначала создайте бакет:
  1. Выставьте параметры и обязательно поставьте публичный доступ на чтение:
  1. После создания откройте бакет и пройдите по пути Настройки → Веб-сайт:
  1. Впишите туда главную страницу, которую скоро будете загружать:
  1. Откройте вкладку Объекты и нажмите Загрузить.
  1. Загрузите туда тестовый файл index.html:
JSON
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Главная страница</title>
  </head>
  <body>
    Привет
  </body>
</html> 
На вкладке веб-сайт был адрес — https://testcdn.website.yandexcloud.net/. С ним вы будете работать.
  1. Теперь пора настраивать CDN. Зайдите в консоль и выберите Cloud CDN:
  1. Подключитесь к провайдеру:
  1. Создайте CDN-ресурс:
  1. Настройте параметры:
Как источник используйте ваш бакет. Как доменное имя — testcdn.website.yandexcloud.net. Ещё можно настроить собственные TLS-сертификаты и ограничения по IP-адресам. Нажмите Создать.
  1. Всё готово:
В списке CDN-ресурсов можно увидеть параметры этого конкретного ресурса:
  1. Теперь изучим дополнительные настройки. В меню слева выберите Кэширование. Можно поменять время жизни кэша в зависимости от ваших потребностей:
  1. Проверьте — всё работает:
Готово — CDN настроен. Теперь инфраструктура вашего решения для «Мегашопа» максимально масштабирована и готова практически ко всему! Вот такой она получилась:
💡 Как только выполните последний пункт задания, удалите кластер. Это нужно, чтобы ресурсы не расходовались впустую и не было лишних расходов.
Это можно сделать на странице списка Object Storage:
И на странице CDN:
Дальнейшее развитие — это миграция в облака уже конкретно инстансов приложения, api gateway и consul, а ещё настройка балансировки. Одним из вариантов может быть миграция сразу в Kubernetes, где многое из этого уже есть. Но это всё — уже совсем другая история.

Задание 1

Компания готовится обновить корпоративный портал. Численность сотрудников — 1 700 человек, и в ближайший год планируется сильное расширение штата.
Какой инструмент подойдёт для оптимизации получения аватаров пользователей?
Аватары, то есть изображения пользователей, — это статический контент. Поэтому CDN для этого подойдёт.

Задание 2

Какой инструмент подойдёт для оптимизации получения предпочтений пользователей из их профилей?
Позволит быстро получать информацию. Предпочтения меняются не настолько часто, чтобы постоянно перечитывать их из базы. При необходимости кэш всегда можно инвалидировать и перечитать актуальную информацию из базы.
CDN — инструмент быстрого получения статического контента и плохо подходит для динамической информации.
Вариант хороший, но только в случае in-memory базы данных. Тогда она работает как кэш.

Итоги

  • Распределять данные на основе DNS можно двумя способами. GeoDNS использует алгоритм определения геокоординат по IP-адресу пользователя. Клиент отправляет запрос, DNS-сервер определяет местоположение пользователя по IP-адресу и находит ближайшую точку присутствия. Это позволяет выдавать пользователям контент в зависимости от их геоположения. Именно такой метод использует Yandex Cloud. Anycast — это метод сетевой адресации и маршрутизации, при котором один IP-адрес присваивается нескольким серверам в сети. Серверы при этом находятся в разных точках присутствия. Этот метод позволяет повысить производительность и устойчивость DNS, но не даёт контролировать трафик в зависимости от страны или региона.
  • Content Delivery Network, или CDN, — это распределённые узлы хранения и доставки информации. Сервис представляет собой систему, которая в ответ на запросы от клиента запрашивает, получает и кэширует данные от источника и отдаёт их клиенту. Использование CDN значительно снижает нагрузку на источники хранения информации в интернете и ускоряет её доставку пользователю.
  • Когда пользователь заходит на сайт, запрос направляется к ближайшему CDN-серверу. Если запрашиваемая информация кэширована на нём, данные сразу отдаются пользователю. Если данные запрашиваются впервые или они устарели, CDN-сервер сначала загружает их с сервера-источника, а затем отдаёт клиенту.
  • CDN улучшает скорость работы, пользовательский опыт и доступность сервисов. Однако есть у него и ограничения: сложности с динамическим контентом, зависимость от провайдера, задержки обновления контента и риск блокировки по IP.
  • В Yandex Cloud есть готовый инструмент для быстрой настройки CDN. Вы это сделали и тем самым завершили формирование масштабированной и геораспределённой инфраструктуры «Мегашопа».

Что почитать по теме

Статья о поиске авторитетного сервера для имён для DNS-зоны
Документация про бакеты в Yandex Cloud
Документация про хостинг статических сайтов в Yandex
L7-балансировщик нагрузки из Yandex Application Load Balancer
Документация о CDN в Yandex Cloud
Статья на Хабре с подробностями об устройстве CDN

Курсы

Подробнее о курсе

Входной тест

Как всё устроено

Микрофронтенды и разбивка монолитной системы на микросервисы

Шардирование и репликация

Создание микросервисов, построение пайплайна CI/CD

Кеширование, построение мониторинга и адаптация к высокой нагрузке

Переход на Hybrid cloud и Multi-cloud, создание AI/ML чат-бота

Создание highload в realtime-среде

Переход на event-driven архитектуру, объединение сервисов через SSO

Как пройти аудит безопасности и соответствовать его требованиям

Работа с требованиями и стейкхолдерами

Соответствие продукта требованиям data privacy, планирование сложной миграции

Адаптация к большому объему данных, построение BI и создание технологического роадмапа для продукта

Завершающий модуль