2016-02-11 6 views
3

У меня есть пара услуг в моей микросервисной архитектуре.Как обращаться с общими источниками данных с использованием архитектуры микросервисов

Два сервиса (служба A, служба B) получили разные api и предоставляют различные логики домена. Однако они разделяют некоторую логику, которая должна быть возвращена - пользовательское состояние от Redis.

  • Когда состояние пользователя изменяется Iam публикации от 3-го обслуживания всех моих микро-услуг

решения:

  1. я мог бы создать еще одну услугу, которая будет отвечать за " user-state "и будет содержать все пользовательские данные в Redis. Недостатки: У моих клиентов будет дополнительный вызов для каждого запроса api (чтобы получить пользовательское состояние).

  2. Дублируйте источник данных пользовательского состояния для каждого микросервиса (содержащий более одного экземпляра redis) и возвращайте его независимо для каждого запроса. Недостатки: я собираюсь дублировать свои данные и дублировать Redis экземпляров (каждый microservice будет доступ к его собственной)

  3. один REDIS источник данных, а все услуги собираются использовать его. Недостатки: Тиражирование Redis-логика (для извлечения данных) между службами и нарушить принцип microservices, используя один общий источник данных

Что вы предлагаете делать?

ответ

1

Я обязательно пойду с номером 1, если вы захотите сохранить архитектуру микросервисов солидной; в случае, когда вы видите «Пользователь/Пользовательское состояние» как полностью отдельный продукт, который может функционировать сам по себе.

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

Если это не так, то 2 будет хорошим решением. вы столкнетесь с проблемами, связанными с целостностью данных и проблемами репликации, но это один из методов.

+0

Проблема здесь в том, что с использованием этого подхода: 1. если пользователь действительно должен действовать со своим результатом, он может даже стоить мне 3-го вызова (например, обновить данные пользователя из пользовательской службы), поэтому, если iam выполняет второй вызов, чтобы проверить состояние, которое я мог бы вместо этого запросить прямо из пользовательского сервиса , Поймай меня? – rayman

+0

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

+0

Вы думаете, что 3 будет лучше, чем 2? в то время как дублирование пользовательских данных (только пользовательское состояние) для каждой службы – rayman