MultiCapaMultiNivel

Capas y niveles: Diseño y confusión

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

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:

Aplicación web en tres capas
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:

Tres capas en un solo nivel
Tres capas en un solo 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:

Tres Capas en dos Niveles
Tres Capas en dos Niveles

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:

Cliente Servidor
Cliente Servidor

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:

Cliente-Servidor en tres niveles
Cliente-Servidor 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.

FrameWork Java
FrameWork Java

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 tres 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:

MVC en 4 capas
MVC en 4 capas

Por tanto, tampoco existe correspondencia directa entre los segmentos del patrón MVC y las capas lógicas, ni los niveles físicos.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Follow by Email
Facebook
Twitter
LinkedIn