Назад | Перейти на главную страницу

Практический Anycast

я прочел Как я могу отправлять посетителей на ближайший сервер с помощью DNS? пост, но есть еще кое-что на практическом уровне, которого я не понимаю.

Скажем, у меня два сервера. Один в Нью-Йорке, другой в Париже. Оба они имеют разные IP-адреса 1.1.1.1 и 1.1.1.2, которые были назначены им интернет-провайдером (или хостинговыми компаниями).

Какие шаги мне нужно выполнить, чтобы люди в Европе, когда они печатали http://blabla.com:8080 будет переведен на IP ближайшего сервера по отношению к клиенту?

Моя конечная цель - увеличить скорость написанного мной приложения TCP-Socket, направляя пользователей к ближайшему серверу.

ОБНОВЛЕНИЕ: Спасибо, ребята, за ответы. Думаю, мне нужно еще многому научиться: \, прежде чем я действительно смогу достичь этого.

Вам необходимо использовать службу, которая будет основывать ответ DNS на их местоположении. Либо передано на аутсорсинг DNS-компании, либо создано самостоятельно. Я думаю, что вам действительно нужна технология Global Server Load Balancing (GSLB), а не AnyCast.

Большинство DNS-компаний предлагают это как услугу.

PowerDNS кажется популярным решением для DIY GSLB: http://www.powerdns.com/auth.html

Amazon AWS Route53 - это надежный и недорогой глобальный балансировщик нагрузки, использующий anycast. Это, безусловно, самый простой путь.

Если вы хотите самостоятельно настроить Anycast DNS, вам потребуется получить IP-адрес, и несколько центров обработки данных будут рекламировать этот IP-адрес в своих BGP. Обычно люди покупают диапазоны IP-адресов в соответствии с их полномочиями, однако я видел некоторые центры обработки данных, которые готовы сдавать в аренду IP-адреса людей и позволять им рекламировать их из других центров обработки данных.

Типичная настройка состоит в том, что каждый сервер имеет свой собственный уникальный IP-адрес и произвольный адрес. Например:

У Лондона есть 1.1.1.1 и 3.3.3.3 В Нью-Йорке есть 1.1.1.2 и 3.3.3.3

DNS-сервер работает на каждом сервере, прослушивающем 3.3.3.3, и выдает уникальный IP-адрес для этого сервера.

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

Если у вас всего два сервера, один в Северной Америке, а другой в Европе, вы можете решить запустить и приложение TCP-сокета, и свой DNS самостоятельно.

С DNS вы можете использовать что-то вроде Split-Horizon DNS подход, который может быть достигнут либо за счет интегрированной функциональности вашего DNS-сервера, либо через брандмауэр, который перенаправляет разные диапазоны IP-адресов на разные запущенные экземпляры вашего сервера (вы можете запустить две разные копии сервера на вашем локальном компьютере, который будет слушать на разных локальных IP-адресах).

Имея только один узел NA и один узел ЕС, вы, вероятно, сможете получить ожидаемые результаты в ≈90% случаев, отвечая на запросы DNS от IP-адресов RIPE и AfriNIC с помощью A запись вашего хоста в Европе и запросы с IP-адресов из блоков / 8, администрируемых ARIN, APNIC, LACNIC и остальной частью адресного пространства / 8 с A запись вашего сервера в Северной Америке. Это будет иметь некоторые неправильные результаты в определенных ситуациях (некоторые блоки / 8 разделяются между Европой и Северной Америкой, некоторое адресное пространство является произвольным и т.д.), но худшее, что может произойти, - это небольшая дополнительная задержка для затронутой стороны, поэтому, это не должно иметь большого значения.

(И да, должен быть способ упростить эти вещи, но пока кажется, что его нет.)