2011-12-19 4 views
0

В качестве примера рассмотрю следующий сценарий. Компания разрабатывает компонент A, развернутый в его клиентах (этот компонент находится в клиентской области, и этому клиенту не может доверять компания). Компонент должен получить доступ к данным, хранящимся на сервере базы данных, расположенном в области компании (доверенная область). Одним из основных модулей, разработанных компанией, является модель данных, использующая Hibernate как ORM.Прямой и косвенный доступ к базе данных

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

Какие проблемы могут возникнуть при подключении компонента непосредственно к серверу базы данных? В чем преимущества использования API? Что вы порекомендуете?

Благодаря

ответ

2

Второй подход обычно называют 3-го уровня или н-уровневую архитектуру. Среди них есть много преимуществ: масштабируемость (распространение модуля API на многих серверах или даже облако), кеширование, централизованное обновление и управление версиями, безопасность и т. Д. Во многих компаниях база данных работает на брандмауэре с клиентских компьютеров, и вы даже не можете подключиться к Это.
Проблемы - это более сложная система, больше компонентов для разработки и поддержки. Для получения дополнительной информации вам нужно google для архитектуры N-уровня и судить, подходит ли она для вас.

+0

Я знаю о существовании многоуровневой архитектуры, но для меня это кажется другим, потому что здесь он не подразумевает единственную физическую машину. Считаете ли вы, что уровень доступа к данным должен быть распространен среди клиентов? Как правило, уровень доступа к данным обращается непосредственно к базе данных (иногда с помощью ORM-инструмента), но доступ к базе данных непосредственно от клиента (с использованием уровня доступа к данным) позволяет мне думать, что могут возникнуть проблемы с безопасностью. –

+0

Безопасность может быть скомпрометирована, если клиентская машина не находится под вашим контролем, и на клиентской машине возможно прямое подключение к базе данных. Модуль API (даже если он находится в отдельном процессе, чем клиентское приложение) может быть взломан, реконструирован и т. Д. Используя архитектуру N-уровня, вы можете иметь уровень API, который обращается к БД, и клиент может получить доступ только к уровню API, используя хорошо определенный API, подходящая безопасность, возможно, аудит, позволяющий ему выполнять только четко определенные действия, не более, не что иное. Затем DAL будет деталью реализации в вашем уровне API. – softveda

+0

BTW, когда я говорю API, я имею в виду некоторую форму удаленного API, использующую как низкоуровневые транспорты, такие как сокеты, удаленный RMI/.Net, так и более высокий уровень, такой как SOAP, REST и т. Д. – softveda