база данных посредник хороший дизайн системы? - PullRequest
2 голосов
/ 03 июня 2009

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

Почти каждое приложение имеет некоторую базовую (если не обширную) зависимость от данных базы данных, будь то исторические данные, рассчитанные по дням значения или различные параметры. поскольку вся среда стала более обширной, мне стало интересно, стоит ли вставлять посредника между всеми клиентскими и серверными приложениями и базой данных, своего рода «посредником в базе данных». любое приложение, которому нужны значения из базы данных, делает запрос посреднику данных вместо функции-оболочки dll, которая вызывает хранимый процесс.

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

Один (кажущийся) плюс в том, что было бы тривиально настроить тестовую среду, поскольку это повлекло бы за собой просто настройку тестового брокера данных, и не было бы поддержки строк соединения db локально где-либо еще. Кроме того, я размышлял над созданием языка мини-запросов, чтобы вам не приходилось перечислять функции для каждого набора данных, который вы могли бы запросить (вместо GetX () и GetY (), был бы Get ("name = X")

Я переусердствую в этом, или, может быть, это достойная архитектура?

edit: спасибо за все замечательные комментарии, отличная пища для размышлений.

Ответы [ 7 ]

5 голосов
/ 03 июня 2009

Это зависит от того, чего вы пытаетесь достичь. Согласно Rocky Lhotka , вы должны добавлять уровень только в том случае, если вы вынуждены все время пинать и кричать.

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

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

2 голосов
/ 03 июня 2009

только вы можете ответить на эти вопросы:

  • Каковы преимущества этого?
  • Каковы проблемы / риски, связанные с этим?
  • Вам нужно это, чтобы сделать тестирование более простым или даже возможным?
  • если вы сделаете это изменение и когда оно выйдет в эфир и выйдет из строя, вас уволят?
  • если вы внесете изменения и они начнут действовать, вы получите повышение?
  • и т.д ...
1 голос
/ 03 июня 2009

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

  • В качестве хранилища транзакций (типичный OLTP-материал)
  • В качестве промежуточной очереди (отправленные, но необработанные транзакции)
  • Как хранилище исторических данных (результаты обработанных транзакций)
  • в качестве уровня взаимодействия (непереведенные команды или транзакции, выполненные из других систем)

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

Вторым недостатком является то, что вы должны серьезно продумать целостность всех ваших таблиц. В типичной среде SOA вы полностью контролируете изменение данных. Когда вы предоставляете его через таблицы базы данных, вы должны учитывать, что любое приложение с правильными учетными данными будет иметь возможность изменять данные. Из-за этого вы должны тщательно рассмотреть утилитарные реализации ограничений. Если бы у вас был единственный сервис, управляющий постоянством, вы могли бы значительно ослабить ограничения на базу данных и применить их в коде.

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

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

Наконец, написание кода, который отвечает на события (сервисные вызовы), намного проще, чем опросный код. Как правило, организации, которые в значительной степени полагаются на опрос базы данных, заканчивают тем, что изобретают колесо каждый раз, когда новый проект требует новой «службы мониторинга». Этого можно избежать, создав «основу», но у них есть свои подводные камни (в первую очередь в отношении рецепта против усыновления).

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

EDIT

Просто подумал о другом сценарии, который причинял нам боль. Создание версий ваших изменений может быть затруднено. Например, если вам нужно изменить форму таблицы (нормализовать / денормализовать), она будет иметь каскадный эффект, если несколько приложений используют ее. В сценарии SOA это намного проще, потому что вы можете сохранить свой старый API, изменить внутреннее взаимодействие, чтобы оно работало с измененными таблицами, и позволить потребителям переходить на новую версию по своему собственному расписанию.

0 голосов
/ 03 июня 2009

"любое приложение, которому нужны значения из базы данных, делает запрос к брокеру данных"

Когда технология баз данных была изобретена более 40 лет назад, люди, занимающиеся этим изобретением, имели идеи в духе «любое приложение, которому нужны значения из db, делает запрос к dbms».

Вы когда-нибудь задумывались о том, что ВЫ УЖЕ ИМЕЕТЕ "БРОКЕРА ДАННЫХ" и что может быть очень мало добавленной стоимости при создании второго собственного?

0 голосов
/ 03 июня 2009

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

Хорошие вещи, о которых я могу думать:

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

Но если вам придется изучать новые фреймворки на этом пути, возможно, преимущества не стоят дополнительных начальных усилий.

0 голосов
/ 03 июня 2009

Возможно, я что-то неправильно понимаю, но мне кажется, что вы должны рассмотреть какую-то структуру сущностей. Это структура, которую вы можете использовать, чтобы «отобразить» ваше взаимодействие с БД на некоторые доменные объекты. Таким образом, вы работаете локально над объектами домена, которые заполняются из вашей базы данных, и когда приходит время сохранять состояние ваших объектов на базе, каркас обрабатывает все соединения взад и вперед. Таким образом, вы также можете легко смоделировать эти доменные объекты для модульного тестирования без необходимости подключения к базе данных.

Проверьте NHibernate для хорошей альтернативы структуры сущности.

0 голосов
/ 03 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...