Я читал статьи вроде: В чем разница между API-шлюзом и пограничной службой?, но до сих пор не понимаю, в чем точная разница между обнаружением сервисов (скажем, Eureka) и сервисным шлюзом (Zuul)? Есть указатели?


Шлюз служб (также известный как шлюз API) получает запросы от клиентов. Это (единственная) услуга, которую видят клиенты. Но он сам по себе не знает, как делать то, что хотят клиенты, поэтому должен перенаправить запрос в другую службу. Он проверяет URL-адрес и извлекает имя службы, которая фактически будет обслуживать запрос, серверную службу. Эта внутренняя служба может находиться на другом компьютере. Он может иметь динамический адрес или порт, который может время от времени меняться по разным причинам (выход из строя узлов, добавление новых узлов в сеть и т. д.).
Итак, шлюз не знает, куда направить запрос. Это работа службы обнаружения сервисов (Eureka). Eureka знает, на каком узле расположен узел и на каком адресе и порту каждая служба прослушивает запросы. Шлюз спрашивает Eureka, где он может найти серверную службу (отправляя ей только ее имя). После ответа Eureka шлюз пересылает запрос на этот адрес.
Сервисный шлюз работает на сетевом уровне 7 (HTTP), а обнаружение сервисов работает на сетевом уровне 4, если быть точным.
Зуул работает на уровне 7, а Эврика - на уровне 4.
Пожалуйста, обратитесь к Kong Gateway - универсальное решение
API-шлюз
В Api Gateway мы должны зарегистрировать службы с их URL-адресом и соответствующими шаблонами
нравится:
id: order-service
uri: http://localhost:9003/
predicates:
- Path=/order/**
Но проблема в том, что у нас может быть несколько экземпляров на разных портах. Нравится
uri: http://localhost:9003/
uri: http://localhost:9004/
uri: http://localhost:9005/
В этом случае шлюз не сможет выполнить маршрутизацию к другим экземплярам.
Обнаружение услуг
В случае обнаружения службы нам нужно будет зарегистрировать клиентские службы для обнаружения службы (это еще одна служба). Нравится
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka/
Теперь все клиенты будут автоматически регистрироваться для обнаружения сервисов, поэтому даже при наличии нескольких экземпляров сервисный регистр позаботится об этом.
@ Эберт Торибио - Пожалуйста, опубликуйте теорию, чтобы поддержать свой ответ.