Anycast против Unicast: что лучше выбирать в каждом случае

Про Anycast наверняка многие слышали. При этом методе сетевой адресации и маршрутизации один IP-адрес присваивается нескольким серверам в сети. Эти серверы могут находиться даже в удаленных друг от друга ЦОД. Идея Anycast в том, что, в зависимости от местоположения источника запросов, данные отправляются на ближайший (согласно топологии сети, точнее — протокола маршрутизации BGP) сервер. Таким образом, можно уменьшить количество сетевых переходов (hop) и задержку (latency).

По сути, объявляется один и тот же маршрут из нескольких центров обработки данных по всему миру. Таким образом, клиенты будут отправлены в «лучший» и «ближайший» исходя из маршрутов BGP, центр обработки данных. Почему все же именно Anycast? Зачем использовать Anycast вместо Unicast?

vb2jngdtp9sevqnizfyta1gfyos.jpeg


Unicast действительно подойдет для сайта с одним веб-сервером и умеренным объемом трафика. Однако если у сервиса миллионы подписчиков, то он обычно использует множество веб-серверов, каждый из которых имеет один и тот же IP-адрес. Эти серверы распределены географически для оптимального обслуживания запросов.

При таком сценарии Anycast даст улучшение производительности (трафик направляется пользователю с минимальной задержкой), обеспечит надежность сервиса (благодаря резервным серверам) и балансирование нагрузки — маршрутизация на несколько серверов эффективно распределит нагрузку между ними, улучшая скорость работы сайта.

Операторы предлагают клиентам различного вида балансирование нагрузки на основе Anycast и DNS. Клиенты могут указывать IP-адреса, на которые будут отправляться запросы в зависимости от географического местоположения сайта. Это дает возможность более гибко распределять запросы пользователей.

Предположим, есть несколько площадок, между которыми нужно распределить нагрузку (пользователей), например, интернет-магазин с 100 000 запросами в день или популярный блог. Для ограничения региона, откуда пользователи заходят на конкретную площадку, можно воспользоваться опцией Geo Community. Она позволяет ограничить регион, в рамках которого оператор будет анонсировать маршрут.

-owefr4nfwzxmdalacrdlpp-tga.png
cvgekyco9epar1gyzwxvcu38omk.png


Anycast и Unicast: отличия

Anycast часто используется в таких приложениях, как DNS (система доменных имен) и CDN (сети доставки контента), позволяя принимать решения о маршрутизации, повышающие производительность сети. Сети доставки контента используют Anycast, поскольку имеют дело с большими объемами трафика, а Anycast дает в этом случае ряд преимуществ (о них — ниже). В DNS Аnycast позволяет существенно повысить уровень надежности и отказоустойчивости сервиса.

tqzgvods1buzsck6vx4errx9joy.png


В Anycast IP при использовании BGP существует несколько маршрутов к конкретному хосту. На самом деле это копии хостов в нескольких центрах обработки данных, используемые для установления соединений с более низкой задержкой.

Итак, в сети Anycast один и тот же IP-адрес объявляется из разных мест, и сеть решает, куда направить запрос пользователя исходя из «стоимости» маршрута. Например, часто для определения кратчайшего маршрута передачи данных применяется протокол BGP. Когда пользователь отправляет запрос Anycast, BGP определяет наилучший маршрут для доступных в сети Anycast серверов.

Преимущества Anycast


Для использования технологии Anycast со стороны клиента не требуется никаких специальных серверов, сетей или специальных компонентов. Но есть у Anycast и минусы. Считается, что его внедрение — сложная задача, требующая дополнительного оборудования, надежных провайдеров и правильной маршрутизации трафика.

От чистого истока в прекрасное далёко


Хотя Anycast направляет пользователей на основе наименьшего количества переходов, это не обязательно означает минимальную задержку. Задержка — более сложная метрика, поскольку у одного перехода она может быть выше, чем десяти.

-zqvylo2epuihbqddpu-_msml4g.png


Пример: межконтинентальные коммуникации могут включать один переход с очень высокой задержкой.

Anycast в основном используется для служб на основе UDP, таких как DNS. Запросы пользователей направляются в «лучший» и «ближайший» ЦОД на основе маршрутов BGP.

gt7xz9dz4rs-bhtgxq4fwmh1q9g.jpeg


Пример: рабочая станция DNS-клиента с IP-адресом Anycast DNS 123.10.10.10, выполняет разрешение DNS для ближайшего из трех серверов имен DNS, развернутых с использованием того же IP-адреса Anycast. В случае сбоя маршрутизатора R1 или сервера A пакеты DNS-клиента будут автоматически перенаправлены на следующий ближайший DNS-сервер через маршрутизаторы R2 и R3. Кроме того, маршрут к нашему серверу A будет удален из таблиц маршрутизации, что предотвратит дальнейшее использование этого сервера имен.

Сценарии развертывания


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

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


CDN на основе Anycast


Вернемся теперь к использованию Anycast в сетях доставки контента. Anycast, безусловно, представляет собой интересную сетевую концепцию и получает все большее признание у провайдеров CDN нового поколения.

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

CDN объединяет все серверы в одну сеть и обеспечивает более быструю загрузку контента. Иногда удается сократить время ожидания пользователя на 5–6 секунд. Целью CDN является оптимизация доставки путем предоставления контента с сервера, который находится ближе всего к конечному пользователю. Это очень похоже на Anycast, где выбирается ближайший сервер в зависимости от местоположения конечного пользователя. Казалось бы, каждый поставщик услуг CDN по умолчанию будет использовать Anycast, но в действительности это не так.

Приложения, использующие протоколы, такие как HTTP/TCP, полагаются на устанавливаемое соединение. Если будет выбран новый узел Anycast (например, при отказе сервера), то обслуживание может быть прервано. Именно поэтому Anycast ранее рекомендовался для таких служб без установления соединения как UDP и DNS. Тем не менее Anycast хорошо работает и для протоколов, ориентированных на соединение, например, TCP отлично функционирует в режиме Anycast.

Некоторые провайдеры CDN применяют маршрутизацию на основе Anycast, другие предпочитают маршрутизацию на основе DNS: ближайший сервер выбирается в зависимости от того, где расположен DNS-сервер пользователя.

Гибридные инфраструктуры и инфраструктуры с несколькими центрами обработки данных — еще один пример применения Anycast. Получаемый от провайдера адрес Load Balancing IP позволяет распределять нагрузку между IP-адресами разных сервисов клиентов в ЦОД провайдера. Благодаря технологии адресации любому устройству, это обеспечивает лучшую производительность при значительном трафике, отказоустойчивость и помогает оптимизировать время отклика при большом числе пользователей.

В гибридных инфраструктурах с несколькими центрами обработки данных можно распределить трафик между серверами или даже виртуальными машинами на выделенных серверах.

Таким образом, имеется огромный выбор технических решений для построения инфраструктуры. Можно также настроить балансирование нагрузки по IP-адресам в нескольких центрах обработки данных, используя адресацию любому устройству группы для оптимизации работы сайта.

Можно распространять трафик в соответствии с собственными правилами, определяя «вес» каждого из распределенных серверов в каждом ЦОД. Такая конфигурация особенно полезна, когда имеется распределённый серверный парк, а производительность сервисов неодинакова. Это позволит чаще распределять трафик для повышения производительности серверов.

Для создания системы контроля при помощи команды ping есть возможность конфигурировать зонды. Это позволяет администратору определить собственные процедуры контроля и получать более четкое представление о состоянии каждого компонента в инфраструктуре. Таким образом можно определять критерии доступности.

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

Есть возможность добавить сертификаты SSL для балансирования нагрузки, шифрования передаваемых данных и безопасности связи между посетителями сайта и корпоративной инфраструктурой. В случае балансирования нагрузки между ЦОД также можно применять SSL.

Услугу Anycast с балансированием нагрузки адресов можно получить у провайдера. Эта функция поможет улучшить алгоритм взаимодействия пользователей с приложениями в зависимости от местоположения. Достаточно объявить, какие сервисы имеются в ЦОД, и трафик будет перенаправлен на ближайшую инфраструктуру. Если есть выделенные серверы, например, во Франции или в Северной Америке, то клиенты будут направлены на ближайший сервер в сети.

Один из вариантов использования Anycast — оптимальный выбор точки присутствия оператора (PoP). Приведем пример. LinkedIn (заблокированный в России) стремится не только улучшать производительность и скорость своих продуктов — мобильных и веб-приложений, но и совершенствовать сетевую инфраструктуру для ускоренной доставки контента. Для этого динамической доставки контента LinkedIn активно использует PoP — точки присутствия. Чтобы направить пользователей к ближайшему PoP, применяется Anycast.

Причина в том, что в случае Unycast каждая PoP LinkedIn имеет уникальный IP-адрес. Затем пользователи назначаются PoP в зависимости от их географического местоположения с помощью DNS. Проблема в том, что при использовании DNS около 30% пользователей в Соединенных Штатах перенаправлялись к неоптимальному PoP. Благодаря поэтапному внедрению Anycast неоптимальное назначение PoP упало с 31% до 10%.

ruqe_d_0ud6nx3r0siikw0abp_c.png


Результаты пилотного теста показаны на графике, где ось Y — это процент оптимального назначения PoP. По мере «наращивания» Anycast во многих штатах США наблюдалось улучшение в процентах трафика к оптимальной PoP.

Мониторинг сети Anycast


Теоретически сети Anycast просты: нескольким физическим серверам назначается один и тот же IP-адрес, который BGP использует для определения маршрута. Но реализация и проектирование платформ Anycast сложны, особенно этим «славятся» отказоустойчивые сети Anycast. Еще более сложен эффективный мониторинг сети Anycast для быстрого выявления и локализации неисправностей.

Если сервисы используют для обслуживания своего контента стороннего провайдера CDN, им очень важно отслеживать и проверять производительность сети. При мониторинге CDN на основе Anycast основное внимание уделяется измерению сквозных задержек и характеристик предпоследнего перехода, чтобы понять, какой центр обработки данных обслуживает контент. Анализ заголовков HTTP-сервера — это еще один способ определить, откуда поступают данные.

dunzkudyse8o2mr6uin8yva4bsk.png


Пример: заголовки ответа HTTP, указывающие расположение сервера CDN.

Например, CloudFlare использует собственный заголовок CF-Ray в сообщениях HTTP Response, который включает указание центра обработки данных, к которому поступил запрос. В случае Zendesk заголовок CF-Ray для региона Сиэтла представляет собой CF-RAY: 2a21675e65fd2a3d-SEA, а для Амстердама — CF-RAY: 2a216896b93a0c71-AMS. Чтобы определить, где находится контент, также можно использовать HTTP-X-заголовки из HTTP-ответа.

Другие методы адресации


Существуют и другие методы адресации для маршрутизации пользовательских запросов к конкретной конечной точке сети:

ajideg7kwtv4pqvgp_hsfpv0c6u.png


io58z-ocgmtkbpkfxddmbvs86vw.png


o4itpt-qtc4wbquolytcz70zx60.png


Unicast, Multicast и Broadcast.

Использование технологии Anycast повышает уровень надежности, отказоустойчивости и безопасности DNS. Используя данную технологию, операторы предлагают своим клиентам услуги по различным видам балансирования нагрузки на основе DNS. В панели управления можно указывать IP-адреса, на которые будут отправляться запросы в зависимости от географической локализации. Это даст клиентам возможность более гибко распределять запросы пользователей.

Некоторые операторы применяют средства мониторинга маршрута на каждой точке присутствия (POP): система автоматически анализирует наиболее короткие местные и глобальные маршруты для точек присутствия и перенаправляет их через географические местонахождения с самой низкой задержкой с нулевым временем простоя.

На данный момент Anycast — наиболее стабильное и надежное решение для построения высоконагруженных DNS-сервисов, к которым предъявляются высокие требования по устойчивости и надежности.

Домен .ru поддерживает 35 серверов Anycast DNS, сгруппированных в 20 узлов, распределенных по пяти Anycast-облакам. При этом используется принцип построения по географическому признаку, т.е. Geocast. При размещении узлов DNS предусматривается их вынос в географически разнесенные локации, приближенные к наиболее активным пользователям, максимальная концентрация российских провайдеров в точке размещения узла, а также наличие свободных емкостей и удобство взаимодействия с площадкой.

Как построить CDN?


CDN — сеть серверов, ускоряющая доставку пользователям контента. Сеть доставки контента объединяет все серверы в одну сеть и обеспечивает более быструю загрузку контента. В скорости загрузки важную роль играет расстояние от сервера до пользователя.

CDN позволяет использовать серверы, которые находятся к целевой аудитории ближе всего. Это сокращает время ожидания, помогает ускорить загрузку контента сайтов для всех посетителей, что особенно критично для сайтов с файлами большого объема или мультимедиа-сервисов. Типичные области применения CDN —  электронная коммерция и сфера развлечений.

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

Как создать CDN с помощью DNS? Настройка CDN с использованием собственного решения Anycast может быть достаточно дорогим проектом, но есть более дешевые варианты. Например, можно использовать GeoDNS и обычные серверы с уникальными IP-адресами. С помощью сервисов GeoDNS можно создать CDN с функциями геолокации, в которой решения принимаются на основе реального местоположения посетителя, а не местоположения ресолвера DNS. Можно настроить свою DNS-зону так, чтобы показывать IP-адреса американских серверов посетителям из США, а европейские посетители будут видеть IP-адрес из Европы.

С помощью GeoDNS можно возвращать разные ответы DNS в зависимости от IP-адреса пользователя. Для этого DNS-сервер настраивают так, чтобы он возвращал разные IP-адреса в зависимости от исходного IP-адреса в запросе. Обычно для определения региона, из которого делается запрос, используется база данных GeoIР. Геолокация с применением DNS позволяет отправлять пользователям контент с ближайшего сайта.

GeoDNS определяет IP-адрес клиента, пославшего запрос DNS, или IP рекурсивного DNS-сервера провайдера, который используется при обработке клиентского запроса. По IP клиента и базе GeoIP определяется страна/регион. Затем клиент получает IP-адрес ближайшего CDN-сервера. О настройке GeoDNS можно подробнее прочитать здесь.

Anycast или GeoDNS?


Хотя Anycast — отличный способ доставки контента в глобальном масштабе, ему не хватает специфичности. Вот тут на выручку и приходит GeoDNS. Этот сервис позволяет создавать правила, которые отправляют пользователей на уникальные конечные точки в зависимости от их местоположения.

v1tfvgcfce97bjptietbqt_bexg.png


Пример: пользователи из Европы направляются к другой конечной точке.

Также можно запретить доступ к доменам, отбросив все запросы. Это, в частности, быстрый способ отсечь злоумышленников.

GeoDNS дает более точные ответы, чем Anycast. Если в случае Anycast кратчайший маршрут определяется по числу хопов, то в GeoDNS маршрутизация для конечных пользователей происходит в зависимости от их физического местоположения. Это уменьшает задержку и повышает точность при создании гранулярных правил маршрутизации.

При переходе на домен браузер обращается к ближайшему серверу DNS, который, в зависимости от домена, выдает IP-адрес для загрузки сайта. Предположим, интернет-магазин пользуется популярностью в CША и в Европе, а DNS-серверы для него есть только в Европе. Тогда пользователи из США, которые хотят воспользоваться услугами магазина, будут вынуждены отправлять запрос к ближайшему серверу, а так как он находится очень далеко, ждать ответа придется долго — загрузка сайта будет не быстрой.

При размещении GeoDNS-сервера в США пользователи будут обращаться уже к нему. Ответ будет быстрым, что повлияет на скорость загрузки сайта.

В ситуации с существующим DNS-сервером в США при переходе к данному домену пользователя из США он обратится к ближайшему серверу, который выдаст нужный IP. Пользователь направится на сервер, который содержит контент сайта, но так как серверы с контентом находятся далеко, он его быстро не получит.

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

Определение точного местоположения, определенного IP-адреса — не всегда легкая задача: тут действуют многие факторы, и владельцы диапазона IP-адресов могут принять решение объявить его на другом конце света (тогда придется подождать, пока база данных обновится, чтобы получить правильное местоположение). Подчас провайдеры VPS назначают адреса, которые предположительно находятся в США, для VPS в Сингапуре.

В отличие от использования адресов Anycast, распределение выполняется во время разрешения имен, а не во время подключения к серверу кэширования. Если рекурсивный сервер не поддерживает клиентские подсети EDNS, то используется местоположение этого рекурсивного сервера, а не пользователя, который будет подключаться к серверу кэширования.

Клиентские подсети в DNS — это расширение DNS (RFC7871), которое определяет, как рекурсивные DNS-серверы могут отправлять информацию о клиенте на DNS-сервер, в частности информацию о сети, которую сервер GeoDNS может использовать для более точного определения местоположения клиента.

Большинство используют DNS-серверы своего интернет-провайдера или DNS-серверы, которые географически близки к ним, но если кто-то в США по какой-то причине решит использовать DNS-ресолвер, расположенный в Австралии, он, скорее всего, получит IP-адрес сервера, ближайшего к Австралии.

Если вы хотите использовать GeoDNS, важно знать о таких особенностях, поскольку в некоторых случаях это может увеличить расстояние между серверами кэширования и клиентом.

Резюме: если вы хотите объединить несколько VPS в CDN, то лучший вариант развертывания — использование связки DNS-сервера с функцией GeoDNS + Anycast «из коробки».

de0yl-6ppopvisr_a80b4yuhjj8.png

© Habrahabr.ru