Микросервисы - как узнать DNS IP?

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

Чего я не понимаю: Как микросервисы узнают, где живет DNS?

По сути, DNS — это просто «специальная» служба, и у меня может быть один или несколько ее экземпляров, верно? Так что я не должен жестко кодировать его конечную точку или должен? Допустим, да. А что, если экземпляр DNS переместить в другое место? Должен ли я вручную изменить его местоположение в конфигурации?

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


person Miroslav Gregor    schedule 29.04.2017    source источник


Ответы (4)


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

В случае микросервисов хост-ОС (или хост-контейнер) будет настроен для DNS через DHCP. Код микросервиса использует функции DNS ОС для разрешения адресов.

https://en.m.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol

person Luke Ryan    schedule 29.04.2017

Ручная настройка DNS возможна, как указано в других ответах, но я бы рекомендовал использовать инфраструктуру, которая во всех отношениях поддерживает обнаружение службы. Например, kubernetes имеет встроенную поддержку DNS и позволяет очень легко предоставлять сервис, который может состоять из любого количества модулей.

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

Дополнительные сведения см. в официальных документах.

person Oswin Noetzelmann    schedule 29.04.2017
comment
Полностью согласен с тем, что обнаружение служб превосходит DNS во многих отношениях. - person Luke Ryan; 30.04.2017

Вы можете использовать свою локальную сеть для обнаружения сервисов, через DHCP и еще много чего. Но для этого необходимо, чтобы все службы уже были «зарегистрированы» на этом DNS-сервере.

Микросервисы могут находить друг друга через обнаружение сервисов, на стороне сервера или клиента. Если вы выберете обнаружение службы на стороне клиента, вы можете использовать такие инструменты, как Consul, которые предоставляют множество замечательных функций. Одной из них является конечная точка DNS, которая позволяет выполнять запросы через SRV записей с <serviceName>.consul.service доменными именами.

Consul имеет собственную конечную точку DNS, вы можете настроить свои службы для ее использования (обычно на локальном порту 8600, поскольку агенты Consul работают локально).

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

person MichaC    schedule 30.04.2017

Известное решение имени хоста. Фиксированная часть будет именем домена службы, например xservice.com. Вы можете запросить этот хост, используя стандартные инструменты DNS (например, dig в вашей оболочке и т. д.).

Наконец, в DNS, связанном с xservice.com, вы добавляете запись SRV с дополнительными сведениями.

В записи SRV перечислены все сведения об услуге, в том числе:

  • символическое имя службы;
  • каноническое имя хоста машины, предоставляющей услугу;
  • порт TCP (или UDP), на котором доступна служба.

Есть и много другой информации. Полный список см. в Википедии.


Пожалуйста, имейте в виду, что это несколько статичное решение. Если вы ищете более динамичный ответ, то ответ Освин может подойти лучше :-)

person Paulo Mattos    schedule 29.04.2017