Когда объединить несколько приложений, чтобы упростить их интеграцию данных?

StackOverflow https://stackoverflow.com/questions/3856108

Вопрос

Укороченная версия:

У нас есть несколько команд, которые каждый разрабатывает несколько приложений. Они должны поделиться некоторыми данными. Должны ли мы объединить эти приложения в одну большую, чтобы упростить интеграцию данных или мы должны держать их отдельными и использовать механизм обмена / кэширования данных?

Дольше версия:

У нас есть ряд команд, каждый которых работает над набором приложений. Многие из этих приложений должны делиться данными. Одним из вариантов является использование асинхронных сообщений, имеющих одну систему записи - где все пишеты происходят - и транслировать, что данные для любых других систем, которые это нужно. Эти системы будут хранить биты данных, которые им нужны в кеше только для чтения (в их базе данных).

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

Другой вариант - решить, что эти приложения имеют слишком много данных, и что накладные расходы из обмена сообщениями / кэшированием слишком высоки. В этом случае вы можете решить объединить эти три приложения в одно большее приложение. Затем вы полностью устраняете проблему интеграции данных, поскольку вы не переместите интеграцию в сервис / транзакционный слой / транзакционный слой / транзакционный слой приложения. Другими словами, MyGiantApp все еще может быть разделен (банки, контексты приложения и т. Д.) в различные модули, которые говорят друг с другом через API транзакционных услуг другого модуля. В нашем случае мы будем использовать весну, почти как на сервисной шине, с вызовом метода вместо веб-сервисов или обмена сообщениями Async.

Хотя этот второй вариант упрощает интеграцию данных, оно усложняет разработку. Теперь X команды должны работать на одной базе кода. Это может быть несколько ослаблено, используя ветви, непрерывную интеграцию и отдельные библиотеки / контексты и т. Д., Но в конце дня это еще один плачевный артефакт, который мы все здание. Также, теперь ошибки одной команды могут продвигаться легче распространяться до всего приложения; Одно приложение, выдувное, куча может взять все.

Как бы вы решили, когда использовать решение № 1 и когда использовать решение № 2?

Это было полезно?

Решение

Я положил это в отдельный ответ, так как его фокус совершенно отличается от моего первого.

Звучит так, как будто вы думали вещи и хорошо понять как вашу проблему, так и решение. Позвольте мне другую трещину (что я думаю, это) ваш ключ вопрос ...

Как бы вы решили ...

Вернитесь к основам: начните с того, что вы знаете, чтобы быть правдой.
У вас есть мастерская доски с соответствующими людьми из вашей команды (ы), в которой вам нужно:

  • Создайте список соответствующих ограничений.
  • Результаты перечисления Вы не хотите (одиночное неразумное приложение и т. Д.).
  • Также рекомендуется, но, возможно, не существенно: определить риски и потенциальные воздействия (как часть ограничений или нежелательных результатов).
  • Перечислите результаты, которые вы хотите (обмен данными, простое развертывание и т. Д.).
  • Расставлять приоритеты на желаемых и нежелательных результатах (очень важно) и не удивляйтесь, если они меняются в ходе обсуждения.

Эта информация должна быть достаточно, чтобы начать создание структуры для обсуждения и разбиения.

Есть также некоторые дополнительные вещи, которые вы можете сделать впрошению этого семинара (или как часть этого в зависимости от политической и социальной динамики вашей ситуации).

  • Определите цели системы - как в «бизнесе», так и в «архитектурном» смысле. (Подсказка: двое должны выровнять - или, по крайней мере, не конфликт).
  • Если есть четкое видение для системы или вашего бизнеса, что должен Помогите (но имейте в виду, что они не всегда существуют, и хорошие даже реже).
  • См. Бизнес / стратегические планы для систем, находящихся на вашей работе - и рассмотреть рынок, тенденции и т. Д. Что вы думаете, что может случиться с заявками в будущем? Думать впереди архитектурно нет так же, как ягни на уровне кода, и тщательное рассмотрение будущего может повлиять на размытия, которые вы делаете сейчас.

Другие советы

Привет - не уверен, если я охвачу точные очки, которые вы хотите ответить, но это начало; Попросите уточнения, если хотите, и я буду обновлять свой ответ соответственно.

С точки зрения управление данными Возможно, вы захотите начать думать вместе Управление основными данными строки Первая мысль, что прыгает к уму, что вы не хотите непоследовательны Справочные данные; Это будет предложить вам использовать один общий экземпляр данных - в качестве альтернативы, вы можете иметь несколько копий, при условии, что процессы управления и опекуны вокруг того, что данные кристально понятно.

С точки зрения интеграция, Повторное использование зависит от нефункциональных требований различных систем. Одно общий сервис позволяет легко управлять данными (в том, что есть только одна копия для беспокойства), но это означает, что он может стать бутылкой; Далее распространяется на правило «слабая ссылка в цепочке» - каково влияние, если общий сервис снизится?

Возможные варианты решения

Трудно знать, что рекомендую без более информации, но мои мысли:

  • Держите ваши три приложения отдельными.
  • Используйте один общий сервис для общих данных.
  • Доступ к общим данным может быть через «Сервис» - это даст вам наибольшее управление и варианты.
  • Общий сервис может существовать как единый экземпляр - или - у вас могут быть экземпляры Mutliple службы развернутого (но только один экземпляр дБ).

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

Еще одна вещь - думая о том, что существует одна «услуга» в коммерческом смысле, не исключает множественные способы технического выставления и потребления его.

Вы думали о параллелизме, транзакциях, ...

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top