Arquitectura en capas

Los primeros sistemas de cómputo existentes se encontraban aislados unos de otros y contaban con sus propios dispositivos propios de E/S, y los programas tenían acceso a la computadora únicamente a través de dichos dispositivos; con la llegada y auge de las redes de comunicaciones el panorama ha cambiado

Los primeros sistemas de cómputo existentes se encontraban aislados unos de otros y contaban con sus propios dispositivos propios de E/S, y los programas tenían acceso a la computadora únicamente a través de dichos dispositivos; con la llegada y auge de las redes de comunicaciones el panorama ha cambiado, y ahora es necesario escribir programas que interactúan y/o dependen de otros programas en computadoras lejanas, en un esquema que se conoce como programación distribuida. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

Una aplicación distribuida es un sistema compuesto de un conjunto de programas corriendo en múltiples computadoras (hosts); su arquitectura es un esqueleto de programas diferentes, con una descripción de qué programas están corriendo en qué hosts, cuáles son sus responsabilidades y qué protocolos determinan la forma en la cual diferentes partes del sistema se comunican unas con otras. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

El concepto de capas (tiers), proporciona una manera conveniente para agrupar diferentes clases de arquitectura. Así, si una aplicación se ejecuta en una computadora, ésta tiene una arquitectura de una capa (one-tiers), si la aplicación se está ejecutando dos computadoras, y en un servidor web, se dice que es una aplicación de dos capas, ya que se tiene un programa cliente y un programa servidor; la diferencia principal entre éstos es que el servidor da respuesta a solicitudes de varios clientes, mientras que un cliente inicia una solicitud de información a un servidor. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

Una aplicación de tres capas suma un tercer programa, comúnmente una base de datos, en la cual el servidor almacena información. Este tipo de aplicaciones es una mejora incremental a la arquitectura de dos capas; así, si una solicitud llega de un cliente a un servidor, éste solicita o almacena información en la base de datos, la base regresa información al servidor, y el servidor regresa la información al cliente. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

Una arquitectura de múltiples capas (n-tiers), permite que un número ilimitado de programas corra simultáneamente, enviando información de uno a otro, utilizando diferentes protocolos para comunicarse e interactuar simultáneamente; esto permite crear aplicaciones más poderosas que proporcionen diversos servicios a varios clientes. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

Sin embargo, esto también representa desventajas; por ejemplo, existe la posibilidad de que se introduzca código maligno, tal como los gusanos (worms), ocasionando problemas en el diseño, implementación y rendimiento. Se han desarrollado nuevas tecnologías que ayudan a combatir esta anomalía, tales como CORBA, EJB, DCOM y RMI; sin embargo, para saltar de tres a n-capas, así como para saltar de una a dos, o de dos a tres, deben tomarse en cuenta diversas consideraciones de seguridad. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

Arquitectura de una capa

Una arquitectura de una capa es un programa simple que no necesita acceso a la red mientras se ejecuta; entre las aplicaciones más comunes de este tipo están los procesadores de texto y los compiladores. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

Las aplicaciones de una capa tienen una gran ventaja: la simplicidad, pues no necesitan del manejo de protocolos, y no se necesita garantizar la sincronización entre datos lejanos, ni el manejo de rutinas de excepción para soportar las fallas inherentes de la red o de un servidor manejando diferentes versiones de un protocolo o programa. Estos programas representan una gran ventaja en cuanto al rendimiento, ya que los datos no necesitan atravesar la red, esperar su turno en el servidor y entonces regresar, por lo que no sobrecargan la red ni al servidor con tráfico extra. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

Arquitectura de dos capas

Una arquitectura de dos capas en realidad tiene tres partes: un cliente, un servidor y un protocolo, mismo que hace un puente entre las capas del cliente y del servidor. El diseño de dos capas es muy efectivo para aplicaciones de red, así como para programas con interfaz gráfica de usuario (GUI); comúnmente los programas GUI se almacenan del lado del cliente, y la lógica del negocio del lado del servidor, esto permite regenerar y validar datos del usuario en el cliente, donde se tiene una respuesta más rápida; en el proceso, se conservan los tan apreciados recursos de la red y del servidor. De igual forma, la lógica del negocio vive en el servidor, donde está segura, además de hacer uso los recursos de dicho servidor. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

Una aplicación de dos capas es un programa cliente/servidor con una GUI como presentación, escrita en un lenguaje de alto nivel tal como Java, C++, etc. En un programa de dos capas se ve la división entre las capas frontales (front) y las capas posteriores (end). En la primera capa, el cliente no necesita preocuparse acerca del almacenamiento de los datos o acerca del procesamiento de múltiples solicitudes; la segunda capa, el servidor, no necesita preocuparse acerca de cómo alimentar datos, o sobre cuestiones relacionadas con la Interfaz Gráfica (UI). (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

Arquitectura de tres capas

Muy probablemente, una aplicación de dos niveles necesitará almacenar datos en un servidor. Tradicionalmente la información se almacena en un sistema de archivos (FileSystem); sin embargo, el riesgo a la integridad de datos se presenta cuando múltiples clientes solicitan simultáneamente al servidor realizar tareas. El sistema de archivos en el mejor de los casos maneja controles de concurrencia rudimentarios, por lo cual la solución más común es añadir un tercer programa, una base de datos. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

Una base de datos especializada almacena, recupera e indexa datos, tal como una arquitectura de dos capas, separa la capa de lógica del negocio de la capa GUI; una arquitectura de tres capas permite separar la lógica del negocio y el acceso de datos. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

Con una base de datos es posible proporcionar índices a los mismos, incluir métodos altamente optimizados para su recuperación, y proporcionar replica, respaldos, redundancia, y procedimientos de carga específicos que balancean según las necesidades de la información. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

Arquitectura de n-capas

Cuando se escribe una aplicación, normalmente se diseñan y escogen los objetos comunicándolos a través de mensajes en código de alto nivel. Los protocolos que utilizan los objetos distribuidos manejan lo rudo, los detalles de bajo nivel, tales como los parámetros de ordenamiento, localización de objetos remotos, manejo de transacciones, etc. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

Un ejemplo de una aplicación de n-capas es un sistema para almacenamiento de mercancías; en este ambiente múltiples datos alimentan órdenes de compra que llegan de diferentes fuentes, de múltiples bases de datos, y éstas a su vez son consultadas por múltiples clientes que ejecutan aplicaciones especializadas; tiene sentido unir estos bloques diferentes con el hilo de una arquitectura común de objetos distribuidos, tales como CORBA o EJB. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

En una arquitectura de n-capas se requiere diseñar objetos realmente reutilizables, que puedan usarse para proyectos futuros. Si los requisitos para un proyecto cambian es necesario reescribir el código; aún más importante es el hecho que, dejando la seguridad que proporciona una arquitectura por capas, se corre el riesgo de diseñar un sistema que sea más complejo que el pensado originalmente. Esto evita el avance, puesto que una decisión descuidada en el diseño puede tener aspectos no considerados. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)Por lo tanto, si lo que se necesita es rapidez el mejor método es hacerlo uno mismo (DIY, Do It Yourself). Esto realmente no representa un inconveniente, ya que es aceptable si el sistema se puede extender añadiendo nuevos módulos, lo que se conoce comúnmente como arquitectura escalable; ésta permite que sus programas se puedan extender sobre múltiples máquinas. Cuando un sistema tiene muchos objetos que interactúan recíprocamente, el número de combinaciones aumenta exponencialmente con el número de objetos, y entonces es recomendable escoger un estándar existente. (Acosta Gonzaga, Álvarez Cedillo, & Gordillo Mejía, 2006)

More Posts

Diseño de software con metodologías ágiles

Extreme Programming y TDD

Test Driven Development es principalmente una metodología de desarrollo de software. La misión principal de TDD es dirigir la arquitectura, el diseño y la codificación del software.

Leer más »
Arquitectura en capas y orientado a objetos

Patrones arquitectónicos

Un patrón arquitectónico es una solución general y reutilizable a un problema común en la arquitectura de software dentro de un contexto dado.

Leer más »