ARQUITECTURA MULTINIVEL Y CAPAS
En la actualidad es muy conocido el diseño arquitectónico de sistemas software en capas. También son conocidos los despliegues físicos en distintas unidades o servidores. Pero es bastante frecuente la confusión entre dos conceptos que pueden parecer similares pero que se refieren a aspectos diferentes del diseño de software: la división en capas y niveles.
Una de las técnicas mas comunes en ingeniería para la construcción de sistemas complejos es la división en distintas capas y niveles de abstracción. Esta práctica proviene del proverbio Divide y Vencerás, muy aplicado en ingeniería del software. Esta división del desarrollo software en capas permite aislar la forma de desarrollar, y mantener los sistemas con menos coste y mas facilidad. En caso de cambios, solo se verá afectada la capa en la que se trabaja.
La división en capas se puede observar en distintos ámbitos. Por ejemplo, en telecomunicaciones, tenemos la pila OSI como división en niveles de abstracción de los protocolos de red. Pero no es lo mismo el concepto de diseño en capas lógicas, que el despliegue en distintos niveles físicos.
CAPA LÓGICA (LAYER)
Cuando se habla del concepto de capa lógica se hace referencia a un diseño de la organización y división del código del sistema a un nivel lógico. No se hace referencia a la ubicación física del despliegue, sino a la organización lógica del sistema.
NIVEL FÍSICO (TIER)
El concepto de Nivel físico hace referencia a la organización y división a nivel físico, de los distintos componentes o elementos de diseño que conforman el sistema. Sólo los niveles físicos (Tier) implican una separación física de los componentes desplegados.
CAPAS Y NIVELES
- Capa de Presentación: la que ve el usuario (también se la denomina «capa de usuario»), presenta el sistema al usuario, le comunica la información y captura la información del usuario en un mínimo de proceso (realiza un filtrado previo para comprobar que no hay errores de formato). También es conocida como interfaz grafica y debe tener la característica de ser «amigable» (entendible y fácil de usar) para el usuario. Esta capa se comunica únicamente con la capa de negocio.
- Capa de Negocio: es donde residen los programas que se ejecutan, se reciben las peticiones del usuario y se envían las respuestas tras el proceso. Se denomina capa de negocio (e incluso de lógica del negocio) porque es aquí donde se establecen todas las reglas que deben cumplirse. Esta capa se comunica con la capa de presentación, para recibir las solicitudes y presentar los resultados, y con la capa de datos, para solicitar al gestor de base de datos almacenar o recuperar datos de él. También se consideran aquí los programas de aplicación.
- Capa de Datos: es donde residen los datos y es la encargada de acceder a los mismos. Está formada por uno o más gestores de bases de datos que realizan todo el almacenamiento de datos, reciben solicitudes de almacenamiento o recuperación de información desde la capa de negocio.
En una arquitectura de tres niveles, los términos «capas» y «niveles» no significan lo mismo ni son similares.
El término «capa» hace referencia a la forma como una solución es segmentada desde el punto de vista lógico:
- Presentación. (Conocida como capa Web en aplicaciones Web o como capa de usuario en Aplicaciones Nativas)
- Lógica de Negocio. (Conocida como capa Aplicativa)
- Datos. (Conocida como capa de Base de Datos)
En cambio, el término «nivel» corresponde a la forma en que las capas lógicas se encuentran distribuidas de forma física.
Por tanto no se debe confundir un concepto con otro, aunque a menudo crea confusión y se suele pensar en tantos niveles físicos como capas lógicas tenga el diseño. Una aplicación de tres capas por ejemplo no tiene porqué tener tres niveles.
Por ejemplo, un diseño de una aplicación web en tres capas:
En esta aplicación se divide la lógica de la aplicación en una capa de Datos, que estaría en un SGBD. También una capa de Servidor Web, que sería el grueso de la lógica de la aplicación en sí. En esta capa estaría implementado el control del flujo de la aplicación, la vista de datos, etc. Por último, una capa de interfaz de usuario UI en un navegador web.
Es la clásica arquitectura de aplicación web en tres capas.
Puede hacer pensar que este diseño está compuesto por tres capas, y tres niveles. Pero no es así, estas tres capas pueden estar desplegadas en el mismo nivel:
Es decir, las tres capas funcionales podrían estar ejecutándose en el mismo nivel físico, dentro de la misma máquina. También podrían estar en distintos niveles, pero no tiene por qué coincidir el número de capas lógicas con el número de niveles físicos.
BENEFICIOS DE ARQUITECTURA MULTICAPA Y MULTINIVEL
Los diseños de arquitectura multicapa y multinivel aportan gran flexibilidad y una facilidad de mantenimiento, al separar la lógica de cada capa. De esta manera, un cambio en la lógica de una capa no debe afectar al resto de capas. Incluso puede estar separado físicamente, si se encuentran en distintos niveles.
Al independizar en capas, además aumenta el potencial de reutilización. Esto lo vemos claramente en las arquitecturas SOA, donde es posible componer servicios nuevos para aprovechar funcionalidades ya existentes. Además esto implica mas escalabilidad.
Pero no todo es bonito, la arquitectura multicapa aporta mayor complejidad al sistema, y la división en niveles lleva la mayor complejidad al despliegue. Además, hay que observar otros factores de la división en niveles, como la afectación al rendimiento. Al estar separados aumenta la carga de comunicación por red, y esto conlleva latencias en disponibilidad.
CRITERIOS PARA DIVIDIR EN CAPAS Y EN NIVELES
Es fácil agrupar las funcionalidades en capas por aquello que tienen en común, como el manejo de datos, el manejo el control o flujo de la aplicación, y el manejo del interfaz de usuario o presentación.
Sin embargo la división en niveles no es tan fácil, y requiere buscar un equilibrio entre factores como:
- Rendimiento
- Escalabilidad
- Reusabilidad
La división en capas suele imponer restricciones a nivel de interacción, como la impermeabilidad entre capas lejanas. Por ejemplo, el diseño anterior de tres capas no permitiría la interacción entre la capa de Interfaz de Usuario y la capa de Datos.
EJEMPLOS DE ARQUITECTURAS MULTICAPA Y MULTINIVEL
El hecho de que varias capas lógicas puedan ser desplegadas sobre el mismo nivel físico es lo que lleva bastante a confusión. Por ejemplo, veamos cómo una arquitectura en tres capas lógicas puede estar desplegado en dos niveles físicos:
Ya vimos anteriormente que podríamos tener las tres capas en el mismo nivel, pero también es posible tener dos capas en el mismo nivel y otra capa en otro nivel distinto.
Si consideramos la clásica arquitectura Cliente-Servidor, en dos capas, donde un servidor es capaz de proporcionar datos a todas las peticiones de los clientes, tendríamos esta despliegue:
Es lo que tenemos en mente siempre que hablamos de Cliente-Servidor. Sin embargo, podríamos tener que la aplicación servidor toma los datos desde un SGBD que está en otro nivel, teniendo un despliegue de dos capas en tres niveles:
¿Es posible esto?
Si, entendiendo la diferencia entre capa lógica y nivel físico. Como vemos, no se debe considerar que un Sistema Gestor de Base de Datos es una capa de Datos en sí. La capa lógica de datos puede contener una lógica de persistencia además de la propia gestión de datos. Y la gestión y almacén de datos puede estar en otro nivel.
En este caso, el nivel 1 físico tendría la base de datos, y el nivel 2 la lógica y aplicación Servidor. Por ejemplo, un Servidor Web en Jboss en el nivel 2 y un motor Oracle en el nivel 3, ambos formando parte de la capa lógica de Servidor.
Con estos ejemplos se pone de manifiesto la no correspondencia del número de capas y número de niveles, o la no correspondencia de unos con otros.
FRAMEWORK DE COMPONENTES DISTRIBUIDOS
Existen muchos framework para el diseño de arquitecturas de varios niveles, como por ejemplo en Java, que incluyen distintas tecnologías para el desarrollo de la lógica en cada capa.
El uso de estos frameworks facilitan un desarrollo multicapa, ya que incluyen distintas tecnologías específicas para cada una de las capas.
En el ejemplo tenemos una arquitectura de 4 capas y 4 niveles, con las tecnologías Java representativas de cada una de ellas.
MVC NO SON 3 CAPAS
Otra confusión respecto a estos modelos de diseño arquitectónico se refleja en el patrón Modelo-Vista-Controlador, donde se tiende a pensar que son tres capas lógicas. Realmente es muy común que la capa de Presentación agrupe tanto la Vista como el Controlador, ya que están estrechamente ligados a la presentación y flujo de la misma. Y en el caso del Modelo, es frecuente que contenga una capa para la gestión del acceso a datos, y la lógica de negocio de la aplicación.
Si incluimos en el diseño anterior de 4 capas y 4 niveles el patrón MVC podría ubicarse en la siguiente agrupación:
Por tanto, tampoco existe correspondencia directa entre los segmentos del patrón MVC y las capas lógicas, ni los niveles físicos.
Qué es más recomendable, ¿tener las capas lógicas en diferentes niveles físicos o tener las capas lógicas en un solo nivel físico ?
ResponderEliminar¿Qué es la lógica de persistencia en la capa lógica de datos?
La capa Lógica es mejor manejarla en un solo nivel la capa que puedes manejar en varios niveles es la capa de Presentación pero eso depende de los factores que desees manejar.
EliminarCuando hace referencia a la Lógica de persistencia en la capa de Datos quiere decir que preserva la información de forma permanente osea la guarda ya que esta capa es donde se aloja la base de datos.
A que se refiere con niveles de abstracciones
ResponderEliminarCuando dice Niveles de abstracción Hace referencia a los diferentes Niveles a como se separan los elementos u objetos del sistema o aplicación. Ya que separando los elementos hace que sea más fácil el análisis.
Eliminar