Веб-портал, получающий данные из веб-службы или базы данных - шаблон архитектуры
Я работаю над проектом, который в настоящее время построен на следующей архитектуре:
1) Первое решение
- Проект, который имеет всю логику базы данных (DAL) на основе Entity Framework 5
- Проект WebAPI, отвечающий за передачу данных в клиентский веб-портал и приложения для смартфонов
2) Второе решение
- Проект MVC4, который служит клиентским веб-порталом
Клиентский веб-портал и WebAPI находятся на одном сервере. WebAPI напрямую обращается к базе данных, а клиентский веб-портал обращается к ней через WebAPI. Причиной выбора этой архитектуры является сокращение времени разработки, поскольку веб-портал и приложения для смартфонов используют 85% тех же веб-служб. Тем не менее, я очень обеспокоен тем, насколько хорошая архитектура производительности. Я думаю, что клиентский веб-портал должен иметь прямой доступ к базе данных, и это будет более эффективным способом.
Есть мысли по этому поводу?
1 ответ
Архитектура всегда сложна, и это всегда компромисс между различными факторами, такими как скорость разработки, ремонтопригодность, производительность и масштабируемость. Итак, вам нужно взвесить все за и против.
Доступ к БД через WebAPI
1 Определенно вносит некоторые накладные расходы в производительность. А сколько? Предположим, что прохождение вашего вызова через дополнительную оболочку (WebAPI) обойдется вам примерно в 2-3 дополнительных миллисекунды на вызов и примерно в 200 МБ дополнительного ОЗУ. Я думаю, это не настоящая проблема, но вы лучше знаете все детали, и это зависит от вас.
2 Это решение может получить некоторые преимущества от использования кэша. Если вы настроите IIS для кэширования запросов к WebAPI, то оба: клиенты и портал WebAPI повысят производительность.
Доступ к БД через DAL напрямую
1 Теоретически, вы вводите две точки входа в свою БД, о которых нужно позаботиться. Что если вам нужно добавить некоторую логику, которая должна использоваться клиентом WebAPI и вашим порталом, и эта логика зависит от сети (например, что-то, связанное с пользовательскими сеансами)? Не следует добавлять его в DAL, вместо этого вам нужно добавить еще один слой с другой библиотекой, которая будет использоваться как: WebAPI, так и вашим порталом. И если ваша единственная точка доступа - это WebAPI, вы можете изменить только WebAPI, чтобы получить результат.
Подвести итоги:
Это только некоторые плюсы и минусы. Но если ваш проект не велик, если он не планирует работать с очень высокой нагрузкой, то единственным фактором, который я бы учел, является стоимость разработки. Если быстрее использовать WebAPI в качестве единой точки входа, просто используйте его.