Diferencia entre revisiones de «Cliente-Servidor»

m
m (Revertidos los cambios de ADRIANA MENDOZA18 (disc.) a la última edición de Carlos idict)
(Etiqueta: Reversión)
(No se muestran 8 ediciones intermedias de 5 usuarios)
Línea 1: Línea 1:
[[Image:Arquitectura C-S.png|thumb|right|398x254px|Arquitectura Cliente-Servidor]]<br>  
+
{{Ficha Hardware
 +
| nombre          = Arquitectura Cliente servidor
 +
| imagen          =Arquitectura_Cliente_servidor1.jpeg
 +
| pie        = Arquitectura Cliente-Servidor
 +
| fecha-invención =
 +
| nombre-inventor =
 +
| conn1          =
 +
| via1_1          =
 +
| nombre-clase    =
 +
| clase1          =
 +
| manuf1          =
 +
}}
 +
'''Arquitectura Cliente servidor'''. Esta arquitectura consiste básicamente en un cliente que realiza peticiones a otro programa (el [[Tipos de servidores de red|servidor]]) que le da respuesta. Aunque esta idea se puede aplicar a programas que se ejecutan sobre una sola [[Computadora|computadora]] es más ventajosa en un [[Sistema operativo|sistema operativo]] multiusuario distribuido a través de una [[Red de computadoras|red de computadoras]]. La interacción cliente-servidor es el soporte de la mayor parte de la [[Comunicación|comunicación]] por [[Redes Informáticas|redes]]. Ayuda a comprender las bases sobre las que están construidos los algoritmos distribuidos.<br>  
  
== Arquitectura Cliente servidor<br>  ==
+
== Introducción ==
  
Esta arquitectura consiste básicamente en un cliente que realiza peticiones a otro programa (el [[Tipos de servidores de red|servidor]]) que le da respuesta. Aunque esta idea se puede aplicar a programas que se ejecutan sobre una sola [[Computadora|computadora]] es más ventajosa en un [[Sistema operativo|sistema operativo]] multiusuario distribuido a través de una [[Red de computadoras|red de computadoras]]. La interacción cliente-servidor es el soporte de la mayor parte de la [[Comunicación|comunicación]] por [[Redes Informáticas|redes]]. Ayuda a comprender las bases sobre las que están construidos los algoritmos distribuidos.<br>
+
El [[Servidor|servidor]] debe negociar con su [[Sistema Operativo]] un puerto (casi siempre bien conocido) donde esperar las solicitudes. El servidor espera pasivamente las peticiones en un puerto bien conocido que ha sido reservado para el servicio que ofrece. El cliente también solicita, a su sistema operativo, un puerto no usado desde el cual enviar su solicitud y esperar respuesta. Un cliente ubica un puerto arbitrario, no utilizado y no reservado, para su comunicación. <br>En una interacción se necesita reservar solo uno de los dos puertos, asignados un identificador único de puerto para cada servicio, se facilita la construcción de clientes y servidores.<br>Los servidores por lo general son más difíciles de construir que los clientes pues aunque se implantan como programas de aplicación deben manejar peticiones concurrentes, así como reforzar todos los procedimientos de acceso y protección del sistema computacional en el que corren, y protegerse contra todos los errores posibles. El cliente y el servidor pueden interactuar en la misma máquina.  
  
== Introducción<br> ==
+
== Evolución ==
  
El [[Servidor|servidor]] debe negociar con su [[Sistema Operativo|Sistema Operativo]] un puerto (casi siempre bien conocido) donde esperar las solicitudes. El servidor espera pasivamente las peticiones en un puerto bien conocido que ha sido reservado para el servicio que ofrece. El cliente también solicita, a su sistema operativo, un puerto no usado desde el cual enviar su solicitud y esperar respuesta. Un cliente ubica un puerto arbitrario, no utilizado y no reservado, para su comunicación. <br>En una interacción se necesita reservar solo uno de los dos puertos, asignados un identificador único de puerto para cada servicio, se facilita la construcción de clientes y servidores.<br>Los servidores por lo general son más difíciles de construir que los clientes pues aunque se implantan como programas de aplicación deben manejar peticiones concurrentes, así como reforzar todos los procedimientos de acceso y protección del sistema computacional en el que corren, y protegerse contra todos los errores posibles. El cliente y el servidor pueden interactuar en la misma máquina.  
+
=== Computadora central ===
 +
 +
Desde sus inicios el modelo de administración de datos a través de computadoras se basaba en el uso de terminales remotas, que se conectaban de manera directa a una computadora central. Dicha computadora central se encargaba de prestar servicios caracterizados por que cada servicio se prestaba solo a un grupo exclusivo de usuarios.
  
== Evolución de la arquitectura cliente servidor<br>  ==
+
=== Computadoras dedicadas ===
  
La era de la [[Computadora|computadora]] central<br>
+
Esta es la era en la que cada servicio empleaba su propia computadora que permitía que los usuarios de ese servicio se conectaran directamente. Esto es consecuencia de la aparición de computadoras pequeñas, de fácil uso, más baratas y más poderosas de las convencionales.
 +
=== Conexión libre ===
  
"Desde sus inicios el modelo de administración de datos a través de computadoras se basaba en el uso de terminales remotas, que se conectaban de manera directa a una computadora central". Dicha computadora central se encargaba de prestar servicios caracterizados por que cada servicio se prestaba solo a un grupo exclusivo de usuarios.<br>
+
Hace más de 10 años que las computadoras escritorio aparecieron de manera masiva. Esto permitió que parte apreciable de la carga de trabajo de cómputo tanto en el ámbito de cálculo como en el ámbito de la presentación se lleven a cabo desde el escritorio del usuario. En muchos de los casos el usuario obtiene la información que necesita de alguna computadora de servicio. Estas computadoras de escritorio se conectan a las computadoras de servicio empleando [[software]] que permite la emulación de algún tipo de terminal. En otros de los casos se les transfiere la información haciendo uso de recursos magnéticos o por trascripción.
  
La era de las computadoras dedicadas<br>
+
=== Cómputo a través de redes ===
 
 
Esta es la era en la que cada servicio empleaba su propia computadora que permitía que los usuarios de ese servicio se conectaran directamente. Esto es consecuencia de la aparición de computadoras pequeñas, de fácil uso, más baratas y más poderosas de las convencionales.<br>
 
 
 
La era de la conexión libre<br>
 
 
 
Hace más de 10 años que las computadoras escritorio aparecieron de manera masiva. Esto permitió que parte apreciable de la carga de trabajo de cómputo tanto en el ámbito de cálculo como en el ámbito de la presentación se lleven a cabo desde el escritorio del usuario. En muchos de los casos el usuario obtiene la información que necesita de alguna computadora de servicio. Estas computadoras de escritorio se conectan a las computadoras de servicio empleando [[Software|software]] que permite la emulación de algún tipo de terminal. En otros de los casos se les transfiere la información haciendo uso de recursos magnéticos o por trascripción.<br>
 
 
 
La era del cómputo a través de [[Redes Informáticas|redes]]<br>
 
  
 
Esta es la era que esta basada en el concepto de redes de computadoras, en la que la información reside en una o varias [[Computadora|computadoras]], los usuarios de esta información hacen uso de computadoras para laborar y todas ellas se encuentran conectadas entre si. Esto brinda la posibilidad de que todos los usuarios puedan acceder a la información de todas las computadoras y a la vez que los diversos sistemas intercambien información.<br>  
 
Esta es la era que esta basada en el concepto de redes de computadoras, en la que la información reside en una o varias [[Computadora|computadoras]], los usuarios de esta información hacen uso de computadoras para laborar y todas ellas se encuentran conectadas entre si. Esto brinda la posibilidad de que todos los usuarios puedan acceder a la información de todas las computadoras y a la vez que los diversos sistemas intercambien información.<br>  
  
La era de la arquitectura cliente [[Tipos de servidores de red|servidor]]<br>
+
=== Arquitectura cliente-servidor ===
  
 
En esta [[Arquitectura de computadoras|arquitectura]] la [[Computadora|computadora]] de cada uno de los usuarios, llamada [[Cliente|cliente]], produce una demanda de información a cualquiera de las computadoras que proporcionan información, conocidas como [[Tipos de servidores de red|servidores]] estos últimos responden a la demanda del cliente que la produjo.<br>Los clientes y los servidores pueden estar conectados a una red local o una red amplia, como la que se puede implementar en una empresa o a una red mundial como lo es la [[Internet|Internet]].<br>Bajo este modelo cada usuario tiene la libertad de obtener la información que requiera en un momento dado proveniente de una o varias fuentes locales o distantes y de procesarla como según le convenga. Los distintos servidores también pueden intercambiar información dentro de esta arquitectura.<br>  
 
En esta [[Arquitectura de computadoras|arquitectura]] la [[Computadora|computadora]] de cada uno de los usuarios, llamada [[Cliente|cliente]], produce una demanda de información a cualquiera de las computadoras que proporcionan información, conocidas como [[Tipos de servidores de red|servidores]] estos últimos responden a la demanda del cliente que la produjo.<br>Los clientes y los servidores pueden estar conectados a una red local o una red amplia, como la que se puede implementar en una empresa o a una red mundial como lo es la [[Internet|Internet]].<br>Bajo este modelo cada usuario tiene la libertad de obtener la información que requiera en un momento dado proveniente de una o varias fuentes locales o distantes y de procesarla como según le convenga. Los distintos servidores también pueden intercambiar información dentro de esta arquitectura.<br>  
Línea 33: Línea 40:
 
== Partes que componen el sistema  ==
 
== Partes que componen el sistema  ==
  
[[Cliente|Cliente: ]]<br>  
+
'''Cliente:''' Programa ejecutable que participa activamente en el establecimiento de las [[Conexiones|conexiones]]. Envía una petición al [[Tipos de servidores de red|servidor]] y se queda esperando por una respuesta. Su tiempo de vida es finito una vez que son servidas sus solicitudes, termina el trabajo.<br>  
  
Programa ejecutable que participa activamente en el establecimiento de las [[Conexiones|conexiones]]. Envía una petición al [[Tipos de servidores de red|servidor]] y se queda esperando por una respuesta. Su tiempo de vida es finito una vez que son servidas sus solicitudes, termina el trabajo.<br>
+
'''Servidor:''' Es un programa que ofrece un servicio que se puede obtener en una [[Red|red]]. Acepta la petición desde la red, realiza el servicio y devuelve el resultado al solicitante. Al ser posible implantarlo como aplicaciones de programas, puede ejecutarse en cualquier sistema donde exista [[Protocolo TCP/IP|TCP/IP]] y junto con otros programas de aplicación. El servidor comienza su ejecución antes de comenzar la interacción con el cliente. Su tiempo de vida o de interacción es “interminable”. <br>Los [[Tipos de servidores de red|servidores]] pueden ejecutar tareas sencillas (caso del servidor hora día que devuelve una respuesta) o complejas (caso del servidor [[Ftp|ftp]] en el cual se deben realizar operaciones antes de devolver una respuesta). Los servidores sencillos procesan una petición a la vez (son secuenciales o interactivos), por lo que no revisan si ha llegado otra petición antes de enviar la respuesta de la anterior.  
  
Servidor:<br>
+
Los más complejos trabajan con peticiones concurrentes aún cuando una sola petición lleve mucho tiempo para ser servida (caso del servidor ftp que debe copiar un archivo en otra máquina). Son complejos pues tienen altos requerimientos de protección y autorización. Pueden leer archivos del sistema, mantenerse en línea y acceder a datos protegidos y a archivos de usuarios. No puede cumplir a ciegas las peticiones de los clientes, deben reforzar el acceso al sistema y las políticas de protección. Los servidores por lo general tienen dos partes:  
  
Es un programa que ofrece un servicio que se puede obtener en una [[Red|red]]. Acepta la petición desde la red, realiza el servicio y devuelve el resultado al solicitante. Al ser posible implantarlo como aplicaciones de programas, puede ejecutarse en cualquier sistema donde exista [[Protocolo TCP/IP|TCP/IP]] y junto con otros programas de aplicación. El servidor comienza su ejecución antes de comenzar la interacción con el cliente. Su tiempo de vida o de interacción es “interminable”. <br>Los [[Tipos de servidores de red|servidores]] pueden ejecutar tareas sencillas (caso del servidor hora día que devuelve una respuesta) o complejas (caso del servidor [[Ftp|ftp]] en el cual se deben realizar operaciones antes de devolver una respuesta). Los servidores sencillos procesan una petición a la vez (son secuenciales o interactivos), por lo que no revisan si ha llegado otra petición antes de enviar la respuesta de la anterior. Los más complejos trabajan con peticiones concurrentes aún cuando una sola petición lleve mucho tiempo para ser servida (caso del servidor ftp que debe copiar un archivo en otra máquina). Son complejos pues tienen altos requerimientos de protección y autorización. Pueden leer archivos del sistema, mantenerse en línea y acceder a datos protegidos y a archivos de usuarios. No puede cumplir a ciegas las peticiones de los clientes, deben reforzar el acceso al sistema y las políticas de protección. Los servidores por lo general tienen dos partes: <br>1. Programa o proceso que es responsable de aceptar nuevas peticiones: [[Maestro|Maestro]] o [[Padre|Padre]].<br>2. Programas o procesos que deben manejar las peticiones individuales: [[Esclavos|Esclavos]] o [[Hijos.|Hijos.]]  
+
#Programa o proceso que es responsable de aceptar nuevas peticiones: [[Maestro|Maestro]] o Padre.
 +
#Programas o procesos que deben manejar las peticiones individuales: [[Esclavos]] o [[Hijos]].
  
Tareas del programa maestro:<br>- Abrir un puerto local bien conocido al cual pueda acceder los clientes.<br>- Esperar las peticiones de los clientes.<br>- Elegir un puerto local para las peticiones que llegan en informar al cliente del nuevo puerto, (innecesario en la mayoría de los casos). <br>- Iniciar un programa esclavo o proceso hijo que atienda la petición en el puerto local, (el esclavo cuando termina de manejar una petición no se queda esperando por otras). <br>- Volver a la espera de peticiones mientras los esclavos, en forma concurrente, se ocupan de las anteriores peticiones.<br>
+
=== Tareas del programa maestro ===
 +
*Abrir un puerto local bien conocido al cual pueda acceder los clientes.
 +
*Esperar las peticiones de los clientes.
 +
*Elegir un puerto local para las peticiones que llegan en informar al cliente del nuevo puerto, (innecesario en la mayoría de los casos).  
 +
*Iniciar un programa esclavo o proceso hijo que atienda la petición en el puerto local, (el esclavo cuando termina de manejar una petición no se queda esperando por otras).  
 +
*Volver a la espera de peticiones mientras los esclavos, en forma concurrente, se ocupan de las anteriores peticiones.
  
== [[Image:Cliente Servidor.JPG|thumb|center|300x250px|Cliente Servidor]]Clasificación de los servidores  ==
+
== Clasificación de los servidores  ==
 
+
[[Image:Cliente Servidor.JPG|thumb|right|Cliente Servidor]]
- [[Tipos de servidores de red|Servidores]] con estado <br>- Servidores sin estado<br>- Servidores concurrentes  
+
#Servidores con estado.
 +
#Servidores sin estado.
 +
#Servidores concurrentes  
  
 
== Características de la arquitectura Cliente-Servidor  ==
 
== Características de la arquitectura Cliente-Servidor  ==
  
- Combinación de un cliente que interactúa con el usuario, y un [[Tipos de servidores de red|servidor]] que interactúa con los recursos a compartir. El proceso del cliente proporciona la interfaz entre el usuario y el resto del sistema. El proceso del servidor actúa como un motor de [[Software|software]] que maneja recursos compartidos tales como [[Bases de datos|bases de datos]], [[Impresoras|impresoras]], [[Módem|Módem]], etc. <br>- Las tareas del cliente y del servidor tienen diferentes requerimientos en cuanto a recursos de cómputo como velocidad del [[Microprocesador|procesador]], [[Memoria RAM|memoria]], [[Velocidad|velocidad]] y capacidades del disco e [[Input-output|input-output]] devices. <br>- Se establece una relación entre procesos distintos, los cuales pueden ser ejecutados en la misma máquina o en máquinas diferentes distribuidas a lo largo de la red.<br>- Existe una clara distinción de funciones basadas en el concepto de”servicio”, que se establece entre clientes y servidores.<br>- La relación establecida puede ser de muchos a uno, en la que un servidor puede dar servicio a muchos clientes, regulando su acceso a los recursos compartidos. <br>- Los clientes corresponden a procesos activos en cuanto a que son estos los que hacen peticiones de servicios. Estos últimos tienen un carácter pasivo, ya que esperan peticiones de los clientes.<br>- No existe otra relación entre clientes y servidores que no sea la que se establece a través del intercambio de mensajes entre ambos. El mensaje es el mecanismo para la petición y entrega de solicitudes de servicios.<br>- El ambiente es heterogéneo. La plataforma de hardware y el sistema operativo del cliente y del servidor no son siempre los mismos. Precisamente una de las principales ventajas de esta arquitectura es la posibilidad de conectar clientes y servidores independientemente de sus plataformas.<br>- El concepto de escalabilidad tanto horizontal como vertical es aplicable a cualquier sistema Cliente-Servidor. La escalabilidad horizontal permite agregar más estaciones de trabajo activas sin afectar significativamente el rendimiento. La escalabilidad vertical permite mejorar las características del servidor o agregar múltiples servidores.  
+
*Combinación de un cliente que interactúa con el usuario, y un [[Tipos de servidores de red|servidor]] que interactúa con los recursos a compartir. El proceso del cliente proporciona la interfaz entre el usuario y el resto del sistema. El proceso del servidor actúa como un motor de [[Software|software]] que maneja recursos compartidos tales como [[Bases de datos|bases de datos]], [[Impresoras|impresoras]], [[Módem|Módem]], etc.  
 +
*Las tareas del cliente y del servidor tienen diferentes requerimientos en cuanto a recursos de cómputo como velocidad del [[Microprocesador|procesador]], [[Memoria RAM|memoria]], [[Velocidad|velocidad]] y capacidades del disco e [[Input-output|input-output]] devices.  
 +
*Se establece una relación entre procesos distintos, los cuales pueden ser ejecutados en la misma máquina o en máquinas diferentes distribuidas a lo largo de la red.
 +
*Existe una clara distinción de funciones basadas en el concepto de”servicio”, que se establece entre clientes y servidores.
 +
*La relación establecida puede ser de muchos a uno, en la que un servidor puede dar servicio a muchos clientes, regulando su acceso a los recursos compartidos.  
 +
*Los clientes corresponden a procesos activos en cuanto a que son estos los que hacen peticiones de servicios. Estos últimos tienen un carácter pasivo, ya que esperan peticiones de los clientes.
 +
*No existe otra relación entre clientes y servidores que no sea la que se establece a través del intercambio de mensajes entre ambos. El mensaje es el mecanismo para la petición y entrega de solicitudes de servicios.
 +
*El ambiente es heterogéneo. La plataforma de hardware y el sistema operativo del cliente y del servidor no son siempre los mismos. Precisamente una de las principales ventajas de esta arquitectura es la posibilidad de conectar clientes y servidores independientemente de sus plataformas.
 +
*El concepto de escalabilidad tanto horizontal como vertical es aplicable a cualquier sistema Cliente-Servidor. La escalabilidad horizontal permite agregar más estaciones de trabajo activas sin afectar significativamente el rendimiento. La escalabilidad vertical permite mejorar las características del servidor o agregar múltiples servidores.  
  
 
== Ventajas del esquema Cliente-Servidor  ==
 
== Ventajas del esquema Cliente-Servidor  ==
  
- Existencia de plataformas de hardware cada vez más baratas. Esta constituye a su vez una de las más palpables ventajas de este esquema, la posibilidad de utilizar máquinas mucho más baratas que las requeridas por una solución centralizada, basada en sistemas grandes (mainframes). Además, se pueden utilizar componentes, tanto de hardware como de software, de varios fabricantes, lo cual contribuye considerablemente a la reducción de costos y favorece la flexibilidad en la implantación y actualización de soluciones.<br>- Facilita la integración entre sistemas diferentes y comparte información, permitiendo por ejemplo que las máquinas ya existentes puedan ser utilizadas pero utilizando interfaces más amigables el usuario. De esta manera, se puede integrar PCs con sistemas medianos y grandes, sin necesidad de que todos tengan que utilizar el mismo sistema operativo. <br>- Al favorecer el uso de interfaces gráficas interactivas, los sistemas construidos bajo este esquema tienen una mayor y más intuitiva con el usuario. En el uso de interfaces gráficas para el usuario, presenta la ventaja, con respecto a uno centralizado, de que no siempre es necesario transmitir información gráfica por la red pues esta puede residir en el cliente, lo cual permite aprovechar mejor el ancho de banda de la red.<br>- La estructura inherentemente modular facilita además la integración de nuevas tecnologías y el crecimiento de la infraestructura computacional, favoreciendo así la escalabilidad de las soluciones.<br>- Contribuye además a proporcionar a los diferentes departamentos de una organización, soluciones locales, pero permitiendo la integración de la información.  
+
Existencia de plataformas de hardware cada vez más baratas. Esta constituye a su vez una de las más palpables ventajas de este esquema, la posibilidad de utilizar máquinas mucho más baratas que las requeridas por una solución centralizada, basada en sistemas grandes (mainframes). Además, se pueden utilizar componentes, tanto de hardware como de software, de varios fabricantes, lo cual contribuye considerablemente a la reducción de costos y favorece la flexibilidad en la implantación y actualización de soluciones.
 +
*Facilita la integración entre sistemas diferentes y comparte información, permitiendo por ejemplo que las máquinas ya existentes puedan ser utilizadas pero utilizando interfaces más amigables el usuario. De esta manera, se puede integrar PCs con sistemas medianos y grandes, sin necesidad de que todos tengan que utilizar el mismo sistema operativo.  
 +
*Al favorecer el uso de interfaces gráficas interactivas, los sistemas construidos bajo este esquema tienen una mayor y más intuitiva con el usuario. En el uso de interfaces gráficas para el usuario, presenta la ventaja, con respecto a uno centralizado, de que no siempre es necesario transmitir información gráfica por la red pues esta puede residir en el cliente, lo cual permite aprovechar mejor el ancho de banda de la red.
 +
*La estructura inherentemente modular facilita además la integración de nuevas tecnologías y el crecimiento de la infraestructura computacional, favoreciendo así la escalabilidad de las soluciones.
 +
*Contribuye además a proporcionar a los diferentes departamentos de una organización, soluciones locales, pero permitiendo la integración de la información.  
  
 
== Desventajas  ==
 
== Desventajas  ==
  
- El mantenimiento de los sistemas es más difícil pues implica la interacción de diferentes partes de hardware y de software, distribuidas por distintos proveedores, lo cual dificulta el diagnóstico de fallas.<br>- Cuenta con muy escasas herramientas para la administración y ajuste del desempeño de los sistemas.<br>- Es importante que los clientes y los servidores utilicen el mismo mecanismo (por ejemplo sockets o RPC), lo cual implica que se deben tener mecanismos generales que existan en diferentes plataformas.<br>- Hay que tener estrategias para el manejo de errores y para mantener la consistencia de los datos.<br>- El desempeño (performance), problemas de este estilo pueden presentarse por congestión en la red, dificultad de tráfico de datos, etc.  
+
*El mantenimiento de los sistemas es más difícil pues implica la interacción de diferentes partes de hardware y de software, distribuidas por distintos proveedores, lo cual dificulta el diagnóstico de fallas.
 +
*Cuenta con muy escasas herramientas para la administración y ajuste del desempeño de los sistemas.
 +
*Es importante que los clientes y los servidores utilicen el mismo mecanismo (por ejemplo sockets o RPC), lo cual implica que se deben tener mecanismos generales que existan en diferentes plataformas.
 +
*Hay que tener estrategias para el manejo de errores y para mantener la consistencia de los datos.
 +
*El desempeño (performance), problemas de este estilo pueden presentarse por congestión en la red, dificultad de tráfico de datos, etc.  
  
 
== Fuentes  ==
 
== Fuentes  ==
Línea 65: Línea 96:
 
*http://cervantes1bachdyg.wikispaces.com/Arquitectura+cliente-servidor <br>  
 
*http://cervantes1bachdyg.wikispaces.com/Arquitectura+cliente-servidor <br>  
 
*http://www.cmg.jovenclub.cu/munic/cruz/redes/pages/arquitectura.htm
 
*http://www.cmg.jovenclub.cu/munic/cruz/redes/pages/arquitectura.htm
 
<br><br>
 
 
<br>
 
  
 
[[Category:Redes_informáticas]]
 
[[Category:Redes_informáticas]]

Revisión del 11:18 21 jul 2020

Arquitectura Cliente servidor
Información sobre la plantilla
Arquitectura Cliente servidor1.jpeg
Arquitectura Cliente-Servidor

Arquitectura Cliente servidor. Esta arquitectura consiste básicamente en un cliente que realiza peticiones a otro programa (el servidor) que le da respuesta. Aunque esta idea se puede aplicar a programas que se ejecutan sobre una sola computadora es más ventajosa en un sistema operativo multiusuario distribuido a través de una red de computadoras. La interacción cliente-servidor es el soporte de la mayor parte de la comunicación por redes. Ayuda a comprender las bases sobre las que están construidos los algoritmos distribuidos.

Introducción

El servidor debe negociar con su Sistema Operativo un puerto (casi siempre bien conocido) donde esperar las solicitudes. El servidor espera pasivamente las peticiones en un puerto bien conocido que ha sido reservado para el servicio que ofrece. El cliente también solicita, a su sistema operativo, un puerto no usado desde el cual enviar su solicitud y esperar respuesta. Un cliente ubica un puerto arbitrario, no utilizado y no reservado, para su comunicación.
En una interacción se necesita reservar solo uno de los dos puertos, asignados un identificador único de puerto para cada servicio, se facilita la construcción de clientes y servidores.
Los servidores por lo general son más difíciles de construir que los clientes pues aunque se implantan como programas de aplicación deben manejar peticiones concurrentes, así como reforzar todos los procedimientos de acceso y protección del sistema computacional en el que corren, y protegerse contra todos los errores posibles. El cliente y el servidor pueden interactuar en la misma máquina.

Evolución

Computadora central

Desde sus inicios el modelo de administración de datos a través de computadoras se basaba en el uso de terminales remotas, que se conectaban de manera directa a una computadora central. Dicha computadora central se encargaba de prestar servicios caracterizados por que cada servicio se prestaba solo a un grupo exclusivo de usuarios.

Computadoras dedicadas

Esta es la era en la que cada servicio empleaba su propia computadora que permitía que los usuarios de ese servicio se conectaran directamente. Esto es consecuencia de la aparición de computadoras pequeñas, de fácil uso, más baratas y más poderosas de las convencionales.

Conexión libre

Hace más de 10 años que las computadoras escritorio aparecieron de manera masiva. Esto permitió que parte apreciable de la carga de trabajo de cómputo tanto en el ámbito de cálculo como en el ámbito de la presentación se lleven a cabo desde el escritorio del usuario. En muchos de los casos el usuario obtiene la información que necesita de alguna computadora de servicio. Estas computadoras de escritorio se conectan a las computadoras de servicio empleando software que permite la emulación de algún tipo de terminal. En otros de los casos se les transfiere la información haciendo uso de recursos magnéticos o por trascripción.

Cómputo a través de redes

Esta es la era que esta basada en el concepto de redes de computadoras, en la que la información reside en una o varias computadoras, los usuarios de esta información hacen uso de computadoras para laborar y todas ellas se encuentran conectadas entre si. Esto brinda la posibilidad de que todos los usuarios puedan acceder a la información de todas las computadoras y a la vez que los diversos sistemas intercambien información.

Arquitectura cliente-servidor

En esta arquitectura la computadora de cada uno de los usuarios, llamada cliente, produce una demanda de información a cualquiera de las computadoras que proporcionan información, conocidas como servidores estos últimos responden a la demanda del cliente que la produjo.
Los clientes y los servidores pueden estar conectados a una red local o una red amplia, como la que se puede implementar en una empresa o a una red mundial como lo es la Internet.
Bajo este modelo cada usuario tiene la libertad de obtener la información que requiera en un momento dado proveniente de una o varias fuentes locales o distantes y de procesarla como según le convenga. Los distintos servidores también pueden intercambiar información dentro de esta arquitectura.

Partes que componen el sistema

Cliente: Programa ejecutable que participa activamente en el establecimiento de las conexiones. Envía una petición al servidor y se queda esperando por una respuesta. Su tiempo de vida es finito una vez que son servidas sus solicitudes, termina el trabajo.

Servidor: Es un programa que ofrece un servicio que se puede obtener en una red. Acepta la petición desde la red, realiza el servicio y devuelve el resultado al solicitante. Al ser posible implantarlo como aplicaciones de programas, puede ejecutarse en cualquier sistema donde exista TCP/IP y junto con otros programas de aplicación. El servidor comienza su ejecución antes de comenzar la interacción con el cliente. Su tiempo de vida o de interacción es “interminable”.
Los servidores pueden ejecutar tareas sencillas (caso del servidor hora día que devuelve una respuesta) o complejas (caso del servidor ftp en el cual se deben realizar operaciones antes de devolver una respuesta). Los servidores sencillos procesan una petición a la vez (son secuenciales o interactivos), por lo que no revisan si ha llegado otra petición antes de enviar la respuesta de la anterior.

Los más complejos trabajan con peticiones concurrentes aún cuando una sola petición lleve mucho tiempo para ser servida (caso del servidor ftp que debe copiar un archivo en otra máquina). Son complejos pues tienen altos requerimientos de protección y autorización. Pueden leer archivos del sistema, mantenerse en línea y acceder a datos protegidos y a archivos de usuarios. No puede cumplir a ciegas las peticiones de los clientes, deben reforzar el acceso al sistema y las políticas de protección. Los servidores por lo general tienen dos partes:

  1. Programa o proceso que es responsable de aceptar nuevas peticiones: Maestro o Padre.
  2. Programas o procesos que deben manejar las peticiones individuales: Esclavos o Hijos.

Tareas del programa maestro

  • Abrir un puerto local bien conocido al cual pueda acceder los clientes.
  • Esperar las peticiones de los clientes.
  • Elegir un puerto local para las peticiones que llegan en informar al cliente del nuevo puerto, (innecesario en la mayoría de los casos).
  • Iniciar un programa esclavo o proceso hijo que atienda la petición en el puerto local, (el esclavo cuando termina de manejar una petición no se queda esperando por otras).
  • Volver a la espera de peticiones mientras los esclavos, en forma concurrente, se ocupan de las anteriores peticiones.

Clasificación de los servidores

Cliente Servidor
  1. Servidores con estado.
  2. Servidores sin estado.
  3. Servidores concurrentes

Características de la arquitectura Cliente-Servidor

  • Combinación de un cliente que interactúa con el usuario, y un servidor que interactúa con los recursos a compartir. El proceso del cliente proporciona la interfaz entre el usuario y el resto del sistema. El proceso del servidor actúa como un motor de software que maneja recursos compartidos tales como bases de datos, impresoras, Módem, etc.
  • Las tareas del cliente y del servidor tienen diferentes requerimientos en cuanto a recursos de cómputo como velocidad del procesador, memoria, velocidad y capacidades del disco e input-output devices.
  • Se establece una relación entre procesos distintos, los cuales pueden ser ejecutados en la misma máquina o en máquinas diferentes distribuidas a lo largo de la red.
  • Existe una clara distinción de funciones basadas en el concepto de”servicio”, que se establece entre clientes y servidores.
  • La relación establecida puede ser de muchos a uno, en la que un servidor puede dar servicio a muchos clientes, regulando su acceso a los recursos compartidos.
  • Los clientes corresponden a procesos activos en cuanto a que son estos los que hacen peticiones de servicios. Estos últimos tienen un carácter pasivo, ya que esperan peticiones de los clientes.
  • No existe otra relación entre clientes y servidores que no sea la que se establece a través del intercambio de mensajes entre ambos. El mensaje es el mecanismo para la petición y entrega de solicitudes de servicios.
  • El ambiente es heterogéneo. La plataforma de hardware y el sistema operativo del cliente y del servidor no son siempre los mismos. Precisamente una de las principales ventajas de esta arquitectura es la posibilidad de conectar clientes y servidores independientemente de sus plataformas.
  • El concepto de escalabilidad tanto horizontal como vertical es aplicable a cualquier sistema Cliente-Servidor. La escalabilidad horizontal permite agregar más estaciones de trabajo activas sin afectar significativamente el rendimiento. La escalabilidad vertical permite mejorar las características del servidor o agregar múltiples servidores.

Ventajas del esquema Cliente-Servidor

Existencia de plataformas de hardware cada vez más baratas. Esta constituye a su vez una de las más palpables ventajas de este esquema, la posibilidad de utilizar máquinas mucho más baratas que las requeridas por una solución centralizada, basada en sistemas grandes (mainframes). Además, se pueden utilizar componentes, tanto de hardware como de software, de varios fabricantes, lo cual contribuye considerablemente a la reducción de costos y favorece la flexibilidad en la implantación y actualización de soluciones.

  • Facilita la integración entre sistemas diferentes y comparte información, permitiendo por ejemplo que las máquinas ya existentes puedan ser utilizadas pero utilizando interfaces más amigables el usuario. De esta manera, se puede integrar PCs con sistemas medianos y grandes, sin necesidad de que todos tengan que utilizar el mismo sistema operativo.
  • Al favorecer el uso de interfaces gráficas interactivas, los sistemas construidos bajo este esquema tienen una mayor y más intuitiva con el usuario. En el uso de interfaces gráficas para el usuario, presenta la ventaja, con respecto a uno centralizado, de que no siempre es necesario transmitir información gráfica por la red pues esta puede residir en el cliente, lo cual permite aprovechar mejor el ancho de banda de la red.
  • La estructura inherentemente modular facilita además la integración de nuevas tecnologías y el crecimiento de la infraestructura computacional, favoreciendo así la escalabilidad de las soluciones.
  • Contribuye además a proporcionar a los diferentes departamentos de una organización, soluciones locales, pero permitiendo la integración de la información.

Desventajas

  • El mantenimiento de los sistemas es más difícil pues implica la interacción de diferentes partes de hardware y de software, distribuidas por distintos proveedores, lo cual dificulta el diagnóstico de fallas.
  • Cuenta con muy escasas herramientas para la administración y ajuste del desempeño de los sistemas.
  • Es importante que los clientes y los servidores utilicen el mismo mecanismo (por ejemplo sockets o RPC), lo cual implica que se deben tener mecanismos generales que existan en diferentes plataformas.
  • Hay que tener estrategias para el manejo de errores y para mantener la consistencia de los datos.
  • El desempeño (performance), problemas de este estilo pueden presentarse por congestión en la red, dificultad de tráfico de datos, etc.

Fuentes