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