Tipo De Servidores
En la lección anterior, al hablar de la arquitectura cliente/servidor, se
habló de la posibilidad de implementar los servidores de dos formas distintas:
Servidores con estado, que son aquellos en los que el servidor almacena
algún tipo de información sobre anteriores conexiones de un cliente.
Servidores sin estado, que son aquellos en los quela relación entre el
cliente y el servidor depende únicamente de la petición en curso del
cliente.
Teniendo en cuenta la tecnología involucrada en el desarrollo de aplicaciones
distribuidas utilizando el interfaz de sockets, podríamos hacer nuevas
clasificaciones entre las posibles implementaciones de los servidores. Así, si
nos fijamos en el protocolo utilizado para realizar lascomunicaciones, podemos
clasificar a los servidores como:
Servidores orientados a la conexión Son aquellos en los que la comunicación
entre el cliente y el servidor se realiza utilizando el protocolo
TCP.
Servidores orientados a los datagramas La comunicación entre el
cliente y el servidor se realiza utilizando el protocolo UDP de IP.
Sin embargo, si nos fijamos en la forma en la que el servidoratiende a
sucesivos clientes, podemos hacer una clasificación mucho mas interesante:
Servidores iterativos Un servidor decimos que es iterativo cuando atiende
a los clientes de uno en uno. Cuando un servidor iterativo está atendiendo
a un cliente y se recibe una solicitud de servicio de otro cliente,
el sistema mantiene a este último en una cola de espera hasta que el
servidor termina de atenderal primero de ellos. Los servidores iterativos
son adecuados cuando el tiempo de servicio no es elevado. Esto
es, cuando el tiempo que emplea un servidor en atender una petición
cualquiera no supera un cierto límite dependiente de la aplicación, el
sistema y la arquitectura sobre la que se ejecuta el programa servidor.
27
Servidores concurrentes Decimos que un servidor es concurrente cuandoes capaz de atender peticiones de varios clientes simultáneamente. La
concurrencia puede ser aparente o real según haya un único proceso
servidor atendiendo a múltiples clientes, que sería el caso de la concurrencia
aparente; o bien tengamos varios procesos atendiendo cada uno
de ellos a un cliente diferente (concurrencia real).
1.7.1. Concurrencia real
Para conseguir la concurrencia real ennuestro servidor será necesario que,
cada vez que se reciba una petición de un cliente, un proceso independiente
se encargue de atenderla. Como el coste de crear un nuevo proceso es elevado
(en tiempo de ejecución y de recursos del sistema consumidos), este tipo de
concurrencia es útil en aquellos casos en los que:
La respuesta del servidor requiere un trabajo muy significativo de acceso
alos dispositivos de entrada/salida de la máquina (una consulta
en una base de datos, por ejemplo) lo cual permite que, mientras el
servicio a un determinado cliente está bloqueado a la espera de los
dispositivos de entrada/salida, el servidor puede atender otro cliente.
El tiempo de procesamiento entre las peticiones de los distintos clientes
varía mucho. Por esta causa no se puede estimar untiempo de respuesta
uniforme para cada petición razón por la que algunos clientes tendrían
que esperar excesivamente para ser atendidos o incluso, se perderían
sus peticiones.
El servidor se ejecuta en máquinas multiprocesadoras permitiendo que
una instancia del servidor pueda ejecutarse en cada uno de los procesadores
del sistema.
El algoritmo básico para construir un servidor concurrentesería de la
siguiente forma:
1. El proceso maestro del servidor crea un socket y lo inicializa con los
parámetros adecuados, colocándolo en modo pasivo (vamos a suponer
un servidor orientado a la conexión).
2. Este proceso maestro recibe las peticiones de los clientes llamando a la
función accept(). Cada vez que llega una petición crea un proceso hijo
llamando a la función fork() para...
Regístrate para leer el documento completo.