2016-01-17 4 views
2

Мой вопрос связан с микросервисами & сервисное открытие службы, которая распространяется между несколькими хостами.микросервисы и обнаружение службы со случайными портами

Установка выглядит следующим образом:

  • 2 Докер хостов (Host A & хоста B)
  • сервер Consul (обнаружение услуг)

Давайте предположим, что у меня есть 2 услуги:

  • сервис А
  • услуга Б

Сервис Б развернут в 10 раз (со случайными портами): 5 раз на хост А и 5 раз на хост B.

Когда услуги А осуществляет связь с сервисом B, например, он посылает запрос на serviceB.example.com (жесткий код).

Чтобы получить IP-адрес и порт, служба A должна запросить сервер Consul для записи SRV.

Он получит 10 пар ip: port, для которых клиент должен применять некоторую логику балансировки нагрузки.

  • Есть ли более простой способ справиться с этим, если бы я не разрабатывал библиотеку клиентских решений (+ LB)?
  • Есть ли что-то вроде этого уже реализовано где-то?
  • Я делаю все это неправильно?

ответ

0

Предлагаю вам ознакомиться с Kontena. Он решит эту проблему из коробки. Каждая служба будет иметь внутренний DNS, который вы можете использовать при общении между службами. Kontena также имеет встроенный load balancer, который очень прост в использовании, что упрощает создание и масштабирование микросервисов.

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

Kontena является проект с открытым исходным кодом и код отображается на Github

0

Если вы ищете минимальную настройку, вы можете обернуть значения, которые вы получаете от Consul, через ribbon, балансировщик нагрузки на основе Netflix.

Вы найдете его как module for Spring Cloud.

Я не нашел последнюю дату автономного примера, только ссылку chrisgray's dropwizard-consul implementation, что использует его в Dropwizard контекста. Но это может послужить отправной точкой для вас.

0

Есть несколько вариантов:

  • Балансировка нагрузки на клиенте, как вы предлагаете, для которого вы будете должны найти службы библиотеки обнаружения готовых сборки, которая работает с SRV записей и обрабатывает балансировки нагрузки и цепь ломка. Другой ответ предложил Netflix 'ribbon, который я не использовал и будет интересен только в том случае, если вы на JVM. Обратите внимание: если вы создаете свои собственные, вам может быть проще просто использовать HTTP API Консула для обнаружения служб, чем записи DNS SRV. Таким образом, вы можете «следить» за изменениями, а не кэшировать список и позволить ему устаревать.
  • Если вы не хотите изобретать это конкретное колесо, другим популярным и простым вариантом является использование экземпляра HAProxy в качестве балансира нагрузки. Вы можете интегрировать его с консулом через consul-template, который будет автоматически следить за новыми/неудачными экземплярами ваших сервисов и обновлять конфигурацию LB. Затем HAProxy обеспечивает надежную балансировку нагрузки и проверку работоспособности с множеством опций (http/tcp, различные алгоритмы балансировки и т. Д.). Одна из возможных настроек - иметь локальный экземпляр HAProxy на каждом докере-хосте и фиксированный порт, назначенный статически для каждой логической службы (может хранить его в Consul KV), поэтому вы подключаетесь к localhost:1234 для службы A, например, и localhost:2345 для службы B. Локальный экземпляр означает, что вы не платите за дополнительную поездку туда и обратно к экземпляру loadbalancer, а затем к фактическому экземпляру службы, но это может и не быть проблемой для вас.

 Смежные вопросы

  • Нет связанных вопросов^_^