2016-04-21 8 views
0

Я разрабатываю платформу анализа анализа в архитектуре микросервисов.Обмен огромными данными между микросервисами

Приложение работает, как показано ниже;

  • все отзывы о продукции, извлекаемые из электронной коммерции-сайта-а (сайт-а) в качестве файла Excel
  • Отзывы загружаются в систему с первенствует
  • Анализ агент может перечислить все отзывы, редактировать некоторые из них, удалить или одобрить
  • Аналитический агент может экспортировать все обзоры для сайта-a
  • Автоматические проверки на основе регулярного выражения применяются для каждого обзора при загрузке и редактировании.

У меня есть 3 микросервиса.

  • Отзывы: Ответственные за операции Обзор Crud плюс операций, аналогичных утвердить/отклонить ..
  • Validations: Ответственный за определение и применение правил проверки на рассмотрение.
  • Экспорт/Импорт: экспорт Экспорт услуг огромные файлы, указанные имя сайта (например, сайт-а)

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

Одним из возможных решений является

  • Когда служба проверки требует обзоров для сайта, он запрашивает шлюз, шлюз перенаправляет запрос Отзывы службы и реагирования приняты.

Два возможные недостатки этого подхода является

  • служба проверки знает о шлюзе? Это приносит зависимость?
  • в случае, если у меня есть 1b обзоров для сайта, получение всех отзывов через запрос на отдых может быть проблемой. (Или нет, я могу сделать запросы от разбитых на страницах службы проверки шлюза ..)

Так что лучшая практика для обмена больших объемов данных между микро-услугами без

  • разделения сущности
  • и dublicating данные

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

Редактировать 1: Вместо совместного использования объекта, использование хранилищ данных с API для отдыха может быть решением?Предположим, что я использую mongodb вместо совместного использования объекта объекта между микросервисами, я могу использовать интерфейс отдыха mongo (http://restheart.org/) и запрашивать данные, когда это возможно.

+0

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

ответ

0

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

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

Таким образом, я бы сказал, что ваша цель должна быть потоком. Пусть валидатор запросит все из Обзоров о сайте А, но не в одном объеме, а в потоке отдельных или небольших пакетов обзоров.

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

Валидатор не поддерживает этот поток, он производит только ошибки и сохраняет или отправляет их где-то; это должно соответствовать вашим требованиям без дублирования без обмена.

+0

фактически мы сначала реализуем данные совместного доступа через файловую службу. Исходный микросервис - это экспорт файла и загрузка в файловую службу и отправка URL-адреса файла для целевого микросервиса. Метод работал стабильно, но, поскольку его дизайн сложный, становится проблемой добавить новую услугу тем же способом. Усилия по разработке и тестированию высоки. Теперь мы переключились на потоковое вещание по очереди .. мы начали с кролика-mq, но планировали переключиться на kafka также :) В заключение мы применяем ваше предложение прямо сейчас .. – ygk

2

Ваша проблема здесь не в разделении огромных данных, а на границах, которые вы выбираете для разделения ваших микросервисов на основе.

Я могу сказать по вашим требованиям, что 3 микросервиса, которые вы выбрали для разделения (обзоры, проверки, импорт/экспорт), фактически работают в одном и том же контексте и в бизнес-домене .. который является Обзорами.

Я бы посоветовал вам пересмотреть свое дизайнерское решение и рассмотреть «Рецензии» как единый микросервис, который обрабатывает все операции с отзывами и логику как черный ящик.

+0

yes @Bishoy вы можете править. Но когда я начинаю комбинировать службы, которые работают в одном бизнес-домене, тогда он становится монолитом. Для меня валидация - это совсем другая логика и домен. На самом деле эта служба не знает, проверяет ли она проверку или нет, она просто применяет регулярное выражение в каком-либо поле. – ygk

+0

Вот хороший пример того, как решить, насколько велика микросервис: http: //www.ben- morris.com/how-big-is-a-microservice/ – Bishoy

+0

Я действительно считаю, что проверка не должна быть другой услугой, это не совсем другой домен. Разве это не зависит от домена, каковы правила проверки и т. Д.? Я думаю, что попытка разбить это делает все слишком сложным. @ygok – Kaj

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