2014-09-10 3 views
1

Я начал работать над проектом, в котором база данных Postgres используется как неотъемлемый компонент в архитектуре системы. Это заставило меня отказаться от моих предыдущих представлений о том, что база данных хорошо, чтобы хранить вещи.Следует ли сохранять текущее состояние приложения в базе данных?

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

Мне все это кажется ненужным. Это также относится к довольно критичной для архитектуры архитектуре, и все же у нас нет возможности гарантировать знание отказа системных систем, заставляя его поддерживать цепочку, поскольку все это Async. Короче, мне это совсем не нравится. Мое мнение заключается в том, что мы должны немедленно начать с нуля, используя прямую связь между API и базовой системой, используя базу данных только для хранения постоянных обновлений состояния/информации пользователя и т. Д.

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

+0

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

ответ

3

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

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

  1. Триггеры и хранимые процедуры почти всегда злые. Это всегда приводит к «логической утечке» в БД и, следовательно, приводит к плохой переносимости и поддерживаемости логики бизнес-процессов и всего приложения. Единственное, что хранимые процедуры могут быть полезны для повышения производительности. Но есть много способов настроить производительность без них.
  2. Как только ваши приложения подключены через БД, вы имеете дело с плотной связью между ними, таким образом, они плотно зависят друг от друга, и, следовательно, сохраняемость и повторное использование обоих приложений страдают.
  3. Соединяя приложения через БД каким-то сложным образом, вы также можете придерживаться масштабирования в будущем.
  4. Использование решения БД для вызова того, что вы имеете дело с технологией, которая не предназначена для этого. Таким образом, это плохо из-за негибкости и возможных будущих ограничений. Его более плохо, если используются нестандартизированные запатентованные инструменты и протоколы.

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

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

Наконец,

То, что я действительно искал здесь кто-то объяснить мне, почему я неправильно

Я не думаю, что вы не правы.

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