2015-06-03 2 views
0

Я реализую архитектуру микросервиса, управляемую событиями. Представьте себе следующий сценарий:Обмен данными с микросервисами

  • чата обслуживание: Возможность видеть разговоры и отправку сообщений. В беседах может быть несколько участников.
  • Служба регистрации и регистрации: Предложения по регистрации новых пользователей и логин.
  • Служба пользователя: Получение/обновление профилей пользователей.

регистрации, Войти служба выдает следующее событие с вновь созданного объекта пользователя: registration-new login-success logout-success

Служба чата затем прослушивает registration-new и хранит несколько полей пользователя в своем кэше REDIS , Он также прослушивает на login-success и сохраняет токен, а на logout-success удаляет токен.

Служба пользователей имеет следующее событие: user-updated. Когда это увольняется, слушатель в службе чата обновляет данные, соответствующие идентификатору пользователя, в redis. Как и чат-сервис, служба пользователя также прослушивает login-success и logout-success и делает то же самое, что и в чате.

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

+0

Когда вы говорите: «Это кажется немного противоречивым, чтобы быть ОБЩИНЫ данными повсюду». Вы имеете в виду «дублирование» или «распространение»? Потому что «совместное использование» обычно означает наличие общего репозитория, доступного каждому. –

ответ

0

Похоже, что другого выхода нет. Архитектура микросервисов ставит много стресса, избегая обмена данными, чтобы не создавать зависимости. Это означает, что каждый микросервис будет дублировать данные. Это также означает, что должен существовать способ получения данных из других контекстов. Предпочтительные методы стремятся к возможной согласованности, такие как отправка сообщений в источник событий или системы AMQP и подписка на них. Вы также можете использовать синхронные методы (вызовы RPC, распределенные транзакции). Это создает дополнительные технологические зависимости, но если вы не можете принять конечную согласованность, это может быть единственным способом.

+0

Это может быть не полный ответ, но это тоже не так, кто-то, кто имеет downvoting, должен сказать, почему или предложить альтернативный ответ. – Matt

+0

@Matt Спасибо за поддержку! Я не понимаю, почему мой ответ неполный, не могли бы вы уточнить? –

+0

Да, честно говоря, я думаю, что это полно, я думаю, кто-то, кто голосовал, всегда должен сказать, почему – Matt

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