Существует ли стандартный инструмент, похожий на DNS, но для сопоставления имен с комбинациями имени хоста / номера порта? - PullRequest
2 голосов
/ 05 февраля 2012

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

По тем же причинам, по которым DNS работает лучше, чем ручное поддержание /etc/hosts на каждой машине, я хотел бы иметь централизованную систему для регистрации и поиска этих комбинаций имени хоста / порта.

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

Не могу себе представить, что я первый, кто нуждался в таком инструменте, но пока мой Google-фу подвел меня. Есть ли что-то для этого построенное? Или я должен просто установить Kyoto Tycoon или ZooKeeper и сам написать логику кэширования / поиска / отработки отказа?

Ответы [ 3 ]

3 голосов
/ 05 февраля 2012

DNS поддерживает записи SRV, предназначенные именно для этого (расположение службы.)

Записи SRV имеют следующую форму (любезно предоставлено Википедией):

_service._proto.name TTL class SRV priority weight port target
  • услуга: символическое название желаемой услуги.
  • proto: транспортный протокол желаемой услуги; обычно это TCP или UDP.
  • name: имя домена, для которого эта запись действительна.
  • TTL: стандартное время DNS для живого поля.
  • class: стандартное поле класса DNS (это всегда IN).
  • priority: приоритет целевого хоста, более низкое значение означает более предпочтительный.
  • вес: относительный вес для записей с одинаковым приоритетом.
  • порт: порт TCP или UDP, на котором находится служба.
  • target: каноническое имя хоста машины, предоставляющей услугу.

Большинство современных DNS-серверов поддерживают записи SRV.

1 голос
/ 05 февраля 2012

Avahi рекламирует услуги (по портам), которые предлагает каждая машина. (он же Apple Bonjour)

Не уверен, что это именно то, что вы ищете, но определенно в этом ключе. Концепция заключается в том, что каждая машина объявляет, какие службы запущены на каждом порту.

Но это ограничено реализацией локальной сети, которая, я не уверен, соответствует вашим требованиям.

Чтобы добавить еще немного мяса к этому ответу, вот пример файла службы для Avahi, рекламирующего веб-страницу:

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h Web Server</name>
  <service>
    <type>_http._tcp</type>
    <port>80</port>
  </service>
</service-group>
0 голосов
/ 15 марта 2012

Лично я считаю, что zookeeper отлично подходит для этого варианта использования. Эфемерные узлы означают, что очистка регистрации не является проблемой, освобождая вас от использования динамического распределения портов на стороне сервера, а наблюдение поможет перебалансировать сопоставления клиент-сервер. Тем не менее, использование zookeeper для регистрации на стороне сервера и использование DNS-записей SRV для поиска на стороне клиента (с использованием моста zookeeper to dns) будет хорошо работать в большинстве случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...