Play Microservices - API-шлюз и сервисный сервис - PullRequest
0 голосов
/ 14 декабря 2018

Мы планируем разработать несколько микросервисов на основе игровой среды.Они будут предоставлять остальные API-интерфейсы, и многие из них будут использовать кластер / кластерный разделение akka под капотом.

Мы хотели бы иметь шлюз API, который предоставляет API-интерфейс наших внутренних служб, но мы сталкиваемся содна большая проблема:
- Несколько экземпляров каждого сервиса будут работать под некоторыми ip и портом.
- Как шлюз API узнает, где запущены экземпляры сервисов?
- Может быть, есть что-то балансировочное?- как для игры, которая отслеживает все запущенные сервисы?

Какое решение (я) могло бы заполнить место для "API Gateway" / "Load Balancer"?

enter image description here

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Вы ищете следующие компоненты,

  1. Реестр служб : Весь смысл этого компонента в том, чтобы отслеживать, «какая служба работает на каких адресах»».Это может быть так же просто, как простая база данных, в которой хранятся записи для всех запущенных служб и их экземпляров.Обычно служба оркестровки отвечает за регистрацию новых экземпляров службы в реестре служб.Другой выбор может состоять в том, чтобы сами экземпляры уведомляли реестр служб об их существовании.

  2. Проверка работоспособности службы : Этот компонент в основном отвечает за выполнение периодических проверок во время выполнения для зарегистрированных экземпляров службы и сообщает реестру службы, если какой-либо из них не работает.Реализация реестра служб может затем пометить эти экземпляры как «неактивные» до тех пор, пока они не обнаружат, что они будут работать средством проверки работоспособности службы в будущем (если вообще когда-либо).

  3. Разрешение службы : это концептуальный компонент, отвечающий за предоставление клиенту возможности каким-либо образом получить доступ к работающим экземплярам службы.

Весь вышеперечисленный компонент называется Обнаружение службы .

В вашем случае у вас есть load-balancers, который может выступать в качестве формы ServiceDiscovery.

Я не думаю, что load-balancers сильно изменится со временем, если вам не потребуется оченьпродвинутая архитектура, поэтому ваш API-шлюз может просто «знать» URL для балансировщиков нагрузки для всех ваших сервисов.Таким образом, вам не действительно нужно реестр служб слой.

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

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

Если вы живете в экосистеме AWS, а ваши балансировщики нагрузки - ELB, то вам нужно разобраться вэто уважение.

0 голосов
/ 02 января 2019

Основываясь на ответах Ивана и Сарвеша, мы провели некоторое исследование и обнаружили проекты netflix OSS. Eureka может использоваться как сервисный локатор, который хорошо интегрируется с API-шлюзом Zuul .К сожалению, документации по конфигурации немного, поэтому мы посмотрели дальше ...

Теперь мы наконец выбрали Kubernetes в качестве Orchestator.

  • Kubernetes знает обо всех запущенных контейнерах, поэтому естьнет необходимости во внешнем сервисном локаторе, таком как Eureka.
  • Traefik - это шлюз API, который использует API kuberentes для обнаружения всех запущенных экземпляров микросервисов и выполняет балансировку нагрузки
  • Управление Akka находит все узлы через API kubernetes и выполняет для нас загрузку кластера.
0 голосов
/ 14 декабря 2018

Вопрос, который вы задаете, не имеет отношения к игровой среде.И нет единого ответа, который бы решал то, что вам нужно.

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

Мы создаем сервисы с akka-http и используем akka-cluster, но используем несвязанные технологии для предоставления и запуска сервисов.

Извлечение

...