Микросервис, сервисный реестр, API-шлюз и обмен данными

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

Чтобы объяснить вам мои вопросы, я покажу вам мою настоящую маленькую архитектуру:

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

Описание моего домена

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

В монолитном приложении я бы использовал эту архитектуру: - Уровень представления с Mobile / Angular-Ember - Бизнес-уровень с REST API с NGINX перед ним - DAL со стандартной базой данных MySQL - Масштабируемость будет применяться только по оси X

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

В схеме в каждой службе есть единственный URL-адрес HTTP, предоставляемый соответствующим API.

Вопросы

а / В (1) поток «мобильный» отправить запрос http наHttp: //myDomain.or/auth.

На мой взгляд, APIGateway может запросить стандартный реестр служб (Eureka, ZooKeeper или что-то еще), который может определить, доступен ли AuthSrv и может ли он получить свой сетевой адрес. Затем ApiGateway может запросить AuthSrv и ответить на сервер

Это хороший способ заставить это работать? Нет ли проблемы с задержкой при работе с машинами X для доступа к данным?

б / Flux (2) обращается к реестру сервисов. Как может реестр служб понять, что все запросы на / auth, даже для дочерних URL-адресов, например / auth / other (если он был выставлен), связаны с этим сервисом по этому адресу ip: port?

с / Поток (3) показывает, что в реестре служб есть доступный AuthSrv. (3-бис) показывает другое: AuthSrv недоступен. В небольшом приложении мы можем признать, что иногда теряем несоответствие, но в большой системе, где сотни сервисов связаны, как мы можем справиться с дефицитом сервисов?

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

В стандартной архитектуре я бы имел:

{
   billingInformations:{...},
   billingUser:ObjectId("userId")
}

В микросервисной архитектуре кто-то рекомендовал использовать:

{
    billingInformations:{...},
    billingUser:"/user/12365" // URL corresponding the the user Resource in the other service
}

Это лучший способ справиться с «обменом данными между службами», а не соединять службы?

е / Когда я должен предпочесть использование протокола AMQP вместо протокола HTTP в данном конкретном случае?

Спасибо за продвижение

Ответы на вопрос(1)

Ваш ответ на вопрос