TECNOLOGÍA - MICROTUTORIALES: CLIENTE / SERVIDOR
ABSTRACT
En este microtutorial se expone el concepto de cliente / servidor, tanto desde el punto de vista de un esquema de computación básico como su reflejo en arquitecturas lógicas capas y de despliegue enmáquinas. Además, se hace un repaso histórico por los esquemas de computación, así como un alto en las arquitecturas orientadas a sistemas web
TUTORIAL
Cliente / servidor

Concepto básico de cliente / servidor
Podemos enfocar el concepto de cliente/servidor desde dos puntos de vista, que, en el fondo, acaban siendo convergentes.

En primer lugar, y en su aspecto más básico, podríamos decir que cliente / servidor es un esquema de computación asimétrico en que un elemento software, el cliente, invoca servicios de otro elemento software, el servidor.


Se trata de un esquema asimétrico porque el cliente es siempre invocante, es quien inicia la actividad, y el servidor es reactivo, proporcionando servicios conforme se le van pidiendo. Los servicios son, típicamente, invocación de funciones o métodos de objetos que residen en el servidor. Este esquema de computación se utiliza, por ejemplo, en los protocolos RPC o HTTP.

Esta idea, al final, se traduce en la arquitectura de grandes sistemas en que la lógica se reparte entre máquinas diferentes que ejecutan software diferente.

Así, un caso típico podría ser aquel en que el cliente es un programa de escritorio realizado en Visual Basic y ejecutándose en un PC con Windows y los servicios que invoca son consultas a una base de datos Oracle, estando la base de datos y el software de consulta en un servidor Sun o HP ejecutando Linux u otra variante de UNIX.

Cuando se mira bajo este enfoque de arquitectura, la problemática de cliente / servidor se convierte, más bien, en una decisión acerca de cómo distribuir en capas y máquinas toda la lógica de una aplicación. Este enfoque se verá más claro en el próximo punto en que se repasa la evolución histórica de los modelos y arquitecturas de computación.

Modelos y arquitecturas de computación
Vamos a realizar un repaso de diferentes modelos, ordenados con una cierta perspectiva histórica o cronológica.

Modelo centralizado
Cuando surgieron los ordenadores, éstos no eran los populares equipos actuales, sino que eran grandes máquinas alojadas en un CPD (Centro de Proceso de Datos) típicamente de una Universidad, una Administración Pública o una gran empresa. Se trataba de los mainframe y el modelo de arquitectura era el modelo centralizado tal y como se muestra en la figura:


La arquitectura de máquinas era una gran máquina, el mainframe, de alta capacidad, al que se unían los familiarmente denominados ‘terminales tontos’. Estos terminales tontos se componían de un monitor y un teclado unidos mediante línea serie al mainframe. La capacidad de procesamiento de estos terminales era casi nula: hacían poco más que recoger los eventos del teclado que enviaban al mainframe y recibir del mainframe instrucciones acerca de qué caracteres a volcar en la pantalla. Hablamos, por ejemplo, de los terminales 3270 de IBM o los VT100 de Digital.

Toda la inteligencia, todo el programa, toda la lógica, residían, pues, en el mainframe

Programas autónomos
Todo este esquema vino a cambiar con la aparición de los ordenadores personales.

Los ordenadores personales eran ordenadores completos, con plena autonomía de procesamiento, aunque fuesen de capacidad mucho más modesta que los mainframe.

Al ser ordenadores de pleno derecho, un primer esquema, aun existente, pasó a ser el de lo que hemos denominado programas autónomos. Se trata de programas que residen completamente en el ordenador y se ejecutan totalmente en él sin interacción ninguna con otra máquina o software. Esto es lo que se esquematiza en la siguiente figura.


Un ejemplo típico, y plenamente actual, sería el de un PC ejecutando un paquete ofimático (un procesador de textos, una hoja de cálculo,…)

Cliente / servidor
Con la aparición del PC, aparece el concepto de cliente / servidor como arquitectura para la subdivisión en capas del software de un sistema.

¿ Qué sucedió ?. Los PCs empezaron a sustituir a los terminales tontos como mecanismo de interacción con el mainframe. Pero dado que los PCs eran ordenadores plenamente funcionales, de mucha mayor capacidad que los terminales tontos y con recursos locales como discos duros y otros periféricos, dejaron de actuar como terminales tontos y comenzaron a aportar su inteligencia y capacidad de proceso.

De esta forma se inició el uso de las arquitecturas cliente / servidor que se esquematiza en la figura:


Ahora, la lógica se repartía entre el ordenador personal, que hacía de cliente, y el mainframe que hacía de servidor. De hecho, ya deja de hablarse en muchos casos de mainframe para hablar, simplemente, de servidor.

Típicamente, el servidor se queda con todo lo relativo al almacenamiento de datos, a procesos ‘batch’ y algún algoritmo. Mientras que el PC, el cliente, se reserva todo lo relativo a la interacción con el usuario y gran parte de la lógica del programa propiamente dicho.

Como se ve, el concepto de programa se difumina, puesto que hablamos de dos lógicas interconectadas distribuidas entre el cliente y el servidor. Además, gran parte de la inteligencia se desplaza hacia el cliente. En cambio, el servidor conserva su papel de ordenador de gran capacidad, puesto que el mismo servidor da servicio a muchos clientes.

Cliente / servidor multicapa
Con el paso del tiempo, se ha consideró que era conveniente subdividir aún más las capas. Si en el punto anterior hablábamos de una arquitectura en dos capas, en las arquitecturas modernas se habla de arquitecturas cliente / servidor en tres capas o, incluso, multicapa. En su acepción más común, hablamos de una arquitectura en tres capas conforme a lo que se esquematiza en la figura:


El software de una aplicación se subdivide en tres capas:
  • Lógica de presentación: Contiene todo lo relativo a la presentación (ventanas, informes, textos, sonidos, video) hacia el usuario y toda la interacción con el mismo a través de teclado, ratón y micrófonos, etc. Es lo que el usuario percibe de la aplicación. Típicamente se ejecuta en un PC en la mesa del usuario.
  • Lógica de aplicación: Contiene los algoritmos, procesos y ‘workflows’ de la aplicación. Es la esencia de la aplicación propiamente dicha.
  • Lógica de datos: gestiona todo lo relativo al almacenamiento y recuperación de datos.
Típicamente, la lógica de presentación se ejecuta en un PC en la mesa del usuario, mientras que la lógica de aplicación y la lógica de datos se ejecutan en grandes máquinas, o servidores. En general, cada una de estas capas se ejecuta en máquinas diferentes. Sin embargo, la subdivisión en capas es una arquitectura lógica, no física. Es decir, son motivos de capacidad, rendimiento, seguridad y explotación los que llevan al despliegue de las diferentes capas en máquinas distintas pero, es posible, manteniendo la misma división de capas, desplegar las tres capas en una misma máquina. Así, por ejemplo, una aplicación que cuando se despliega para muchos usuarios se despliega en dos servidores y es accedida desde PCs puede, a efectos de demostración a futuros clientes, instalarse completa en un portátil.

Cliente / servidor multicapa para aplicaciones web
Las aplicaciones web modernas, suelen diseñarse y desplegarse según una arquitectura multicapa como la que se indica en la figura:


  • El cliente es, simplemente, un navegador (Explorer, Firefox, etc) del que se dispone en todos los PCs (u otro tipo de máquinas) de los usuarios.
  • El acceso a la aplicación, la obtención de páginas, el almacenamiento y ejecución de ASPs, JSP, etc se realiza en el servidor web (Tomcat, IIS, etc) que actúa, por decirlo de alguna manera, de servidor de presentación.
  • En caso de aplicaciones de cierta complejidad, la lógica de aplicación se ejecuta en un servidor de aplicación, implementado como otro servidor web o como un servidor de aplicación propiamente dicho (JBoss, WebLogic Server, etc). Ahí se ejecutan desde los obsoletos CGIs, hasta los Servlets de negocio, JavaBeans, EJBs o scripts PHP.
  • Finalmente, se dispone un servidor para datos donde se ejecuta la base de datos y su SGBDR (Oracle, MySQL, etc)
Arquitecturas multicapa modernas
Como un último apunte, señalar que las arquitecturas más modernas y muy orientadas a interacción vía web, como son la arquitectura J2EE o .Net promueven una arquitectura multicapa como la vista en el último punto del apartado anterior.

Conclusiones
Cliente / servidor es tanto un esquema básico de computación asimétrica en que un elemento, el cliente, solicita servicios a otro elemento, el servidor, como toda una estrategia de distribución del software de un sistema entre diferentes capas lógicas que, generalmente, encuentran su reflejo en el despliegue en diferentes máquinas.

Las arquitecturas web modernas adoptan un modelo cliente / servidor multicapa.
LICENCIA
Creative Commons License
Esta obra está bajo una licencia de Creative Commons.