En el trabajo, tenemos una gran aplicación interna que ha estado en desarrollo durante casi 2 años; Me acabo de unir al proyecto recientemente y parte de la arquitectura me tiene un poco perplejo, así que espero que alguien aquí pueda dar algún consejo antes de salir a hacerles a los arquitectos estas mismas preguntas (para poder tener una discusión informada con ellos). )
Mis disculpas si el siguiente es un poco largo, solo quiero tratar de pintar una buena imagen de lo que es el sistema antes de hacer mi pregunta :)
La forma en que se configura el sistema es que tenemos una aplicación web principal (asp.net, AngularJS) que en su mayoría solo agrega datos de varios otros servicios. Básicamente, es un host para una aplicación AngularJS; Hay literalmente un controlador MVC que arranca el lado del cliente, y luego cada otro controlador es un controlador WebAPI.
Las llamadas desde el lado del cliente son manejadas por estos controladores, que siempre se implementan en cajas que no hacen más que alojar la aplicación web. Actualmente tenemos 4 de esas cajas.
Sin embargo, las llamadas finalmente se enrutan a través de otro conjunto de aplicaciones WebAPI (por lo general, estas son por área comercial, como seguridad, datos de clientes, datos de productos, etc.). Todos estos WebAPI se implementan juntos en cajas dedicadas también; También tenemos 4 de estas cajas.
Con una sola excepción, estas WebAPI no son utilizadas por ninguna otra parte de nuestra organización.
Finalmente, estos WebAPI realizan otro conjunto de llamadas a los servicios "back-end", que son típicamente servicios asmx o wcf heredados que se superponen a varios sistemas ERP y almacenes de datos (sobre los cuales no tenemos control).
La mayor parte de la lógica empresarial de nuestra aplicación se encuentra en estas aplicaciones web, como la transformación de datos heredados, sumarlos, ejecutar reglas comerciales, el tipo habitual de cosas.
Lo que me ha confundido es cuál es el posible beneficio de tener tal separación entre la Aplicación Web y las WebAPI que la sirven. Como nadie más los está usando, no veo ningún beneficio de escalabilidad (es decir, no tiene sentido poner otros 4 cuadros API para manejar una mayor carga, ya que una mayor carga en los servidores API debe significar que hay una mayor carga en los servidores web, por lo tanto, debe haber una relación 1: 1 de servidor web a servidor Api)
Tampoco veo ningún beneficio en absoluto de tener que hacer una llamada HTTP adicional Browser => HTTP => WebApp => HTTP => WebAPI => HTTP => Servicios de backend. (esa llamada HTTP entre WebApp y WebAPI es mi problema)
Por lo tanto, actualmente estoy buscando presionar para que las WebAPI actuales pasen de soluciones separadas a proyectos separados dentro de la solución WebApplication, con referencias simples de proyectos intermedios y un solo modelo de implementación. Entonces, en última instancia, se convertirían en bibliotecas de clases.
En cuanto a la implementación, esto significa que tendríamos 8 cuadros web de "pila completa", en lugar de 4 + 4.
Los beneficios que veo del nuevo enfoque son
- Aumento del rendimiento porque hay un ciclo menos de serialización / deserialización entre la aplicación web y los servidores WebAPI
- Toneladas de código que se pueden eliminar (es decir, no es necesario mantener / probar) en términos de DTO y mapeadores en los límites salientes y entrantes de los servidores de aplicaciones web y WebApi respectivamente.
- Mejor capacidad para crear pruebas de integración automatizadas significativas, porque simplemente puedo burlarme de los servicios de fondo y evitar el desorden en torno a los saltos HTTP de nivel medio.
Entonces la pregunta es: ¿estoy equivocado? ¿Me he perdido alguna "magia" fundamental de haber separado los cuadros de WebApplication y WebAPI?
He investigado algunos materiales de arquitectura de N-Tier, pero parece que no puedo encontrar nada en ellos que pueda dar un beneficio concreto para nuestra situación (ya que la escalabilidad no es un problema, por lo que puedo ver, y esta es una aplicación interna, así que la seguridad en términos de las aplicaciones WebAPI no es un problema).
Y también, ¿qué estaría perdiendo en términos de beneficios si tuviera que reorganizar el sistema a mi configuración propuesta?