На работе у нас есть большое внутреннее приложение, которое разрабатывалось почти 2 года; Я только недавно присоединился к проекту, и некоторые из архитектур меня немного озадачили, поэтому я надеюсь, что кто-то здесь может дать какой-то совет, прежде чем я выйду, чтобы задать архитекторам те же вопросы (так что я смогу провести с ними информированное обсуждение ).
Мои извинения, если ниже немного, я просто хочу попытаться нарисовать хорошую картину того, что система, прежде чем я задам свой вопрос :)
Система настроена так, что у нас есть одно основное веб-приложение (asp.net, AngularJS), которое в основном просто собирает данные из различных других сервисов. Так что в основном это хост для приложения AngularJS; буквально один MVC-контроллер загружает клиентскую часть, а затем любой другой контроллер является контроллером WebAPI.
Вызовы со стороны клиента обрабатываются этими контроллерами, которые всегда развертываются в блоках, которые ничего не делают, кроме размещения веб-приложения. В настоящее время у нас есть 4 таких коробки.
Однако затем вызовы в конечном итоге перенаправляются в еще один набор приложений WebAPI (обычно это для каждой бизнес-сферы, такой как безопасность, данные клиента, данные о продукте и т. Д.). Все эти WebAPI также развернуты в выделенных блоках; у нас также есть 4 из этих коробок.
За одним исключением, эти WebAPI не используются никакими другими частями нашей организации.
Наконец, эти WebAPI делают еще один набор вызовов к «внутренним» службам, которые обычно являются устаревшими службами asmx или wcf, накладываемыми поверх различных систем ERP и хранилищ данных (над которыми мы не имеем никакого контроля).
Большая часть бизнес-логики нашего приложения находится в этих WebApis, таких как преобразование устаревших данных, их агрегация, выполнение бизнес-правил, обычные вещи.
Что меня смущает, так это то, что возможное преимущество заключается в таком разделении между WebApplication и WebAPI, которые его обслуживают. Поскольку никто другой не использует их, я не вижу никаких преимуществ в плане масштабируемости (то есть нет смысла вставлять еще 4 блока API для обработки увеличенной нагрузки, поскольку увеличение нагрузки на серверы API должно означать увеличение нагрузки на веб-серверы - поэтому соотношение веб-сервера и сервера Api должно составлять 1: 1)
Я также не вижу никакой пользы от необходимости делать дополнительный HTTP-вызов Browser => HTTP => WebApp => HTTP => WebAPI => HTTP => Backend services. (что HTTP-вызов между WebApp и WebAPI - моя проблема)
Поэтому в настоящее время я стремлюсь перевести текущие WebAPI из отдельных решений в отдельные проекты в рамках решения WebApplication с простыми ссылками на проекты между ними и единой моделью развертывания. Таким образом, они в конечном итоге просто станут библиотеками классов.
С точки зрения развертывания это означает, что у нас будет 8 веб-блоков "с полным стеком", а не 4 + 4.
Я вижу преимущества нового подхода
- Повышение производительности благодаря сокращению цикла сериализации / десериализации между веб-приложением и серверами WebAPI
- Тонны кода, которые можно удалить (т.е. не нужно обслуживать / тестировать) с точки зрения DTO и сопоставителей на исходящих и входящих границах серверов веб-приложений и WebApi соответственно.
- Лучшая способность создавать осмысленные автоматизированные интеграционные тесты, потому что я могу просто издеваться над серверными службами и избегать путаницы при переходах HTTP промежуточного уровня.
Итак, вопрос: я ошибаюсь? Я пропустил фундаментальную «магию» разделения ящиков WebApplication и WebAPI?
Я исследовал некоторые материалы по архитектуре N-уровня, но не могу найти в них ничего, что могло бы принести конкретную пользу для нашей ситуации (поскольку масштабируемость, насколько я могу судить, не проблема, и это внутреннее приложение, так безопасность с точки зрения приложений WebAPI не проблема.)
А также, что бы я потерял с точки зрения преимуществ, если бы я реорганизовал систему в соответствии с моей предполагаемой установкой?