Академический Документы
Профессиональный Документы
Культура Документы
Servidores Concurrentes Servidores Iterativos Servidores con Estado Servidores sin Estado
A este tipo de servidores se les llama servidores iterativos El problema es que todo cliente tiene que esperar su turno para ser atendido Si uno de ellos pide un archivo muy grande los dems tienen que esperar La mayor parte de la espera es debido a operaciones de IO, hay capacidad de CPU ociosa !
A SERVER
A CLIENT
4444
A CLIENT
A SERVER A CLIENT
4444
A CLIENT
A SERVER
A CLIENT
4444
A CLIENT
A SERVER
A CLIENT
4444
A CLIENT
Qu sucede si el servidor tiene que esperar mucho para que un cliente escriba el nombre de un archivo?
A CLIENT
A SERVER
Timeout 4444
A CLIENT
A CLIENT
ArchServidor2
Un Servidor Concurrente
Un servidor concurrente atiende a varios clientes al mismo tiempo. Ms an, mientras est atendiendo sigue escuchando El problema es que todo cliente tiene que esperar su turno para ser atendido. Si uno de ellos pide un archivo muy grande los dems tienen que esperar La mayor parte de la espera es debido a operaciones de IO, hay capacidad de CPU ociosa! Se trata de crear un nuevo proceso o lnea de ejecucin cada vez que un cliente llega a pedir un servicio.
Servidores Comcurrentes: hay procesos separados para atender el puerto y para transferir el archivo
A CLIENT A SERVER
4444
A CLIENT
A CLIENT
Despus que el cliente contacta al servidor, ste crea otro proceso para para atender al cliente y se queda escuchando el puerto 4444 por otro
A CLIENT A SERVER
4444
A CLIENT
A CLIENT
Mientras el nuevo proceso est atendiendo al primer cliente, el segundo cliente puede contactar al servidor en el puerto 4444
A CLIENT A SERVER
4444
A CLIENT
A CLIENT
A CLIENT
A SERVER
4444
A CLIENT
A CLIENT
4444
A CLIENT
A CLIENT
4444
A CLIENT
A CLIENT
En un ciclo infinito:
2. Aceptar requerimientos de clientes 3. Cuando llega una peticin de un cliente crear un nuevo proceso esclavo que atienda paralelamente la peticin (esto no debe bloquear la ejecucin del programa master del servidor) 4. Volver a 2.
Proceso esclavo:
1. Recibir los parmetros de la comunicacin (socket o flujos de entrada y/o salida) 2. Atender al cliente (ej: leer el nombre del archivo, transmitir el archivo) 3. Retornar (desaparecer !)
El concepto de procesos paralelos implentados a nivel de S.O. aparecen con UNIX y C. La forma de crearlos es ejecutando una funcin llamada fork() int i = fork() provoca que se cree un proceso exactamente igual al que se est ejecutando. La nica diferencia es que en el proceso hijo (el nuevo creado) la variable i vale cero. Esto se usa para saber quin soy yo. En programacin de servidores concurrentes, si soy el hijo ejecuto la parte que corresponde al proceso esclavo. Si soy el padre (i tiene un valor distinto de cero y es el id del proceso hijo creado) sigo recibiendo peticiones
while(1) { ssock = accept(msock, &fsin, &alen); pid = fork(); if (pid == 0) { atender al cliente; retornar; } }
El proceso paralelo duplica exactamente todo el ambiente en el cual estaba corriendo el proceso original, incluso aquellas variables que no necesita !!! No es fcil manejar procesos paralelos, ya que si no se terminan en forma normal pueden quedar consumiendo recursos indefinidamente. La nica informacin que tiene el padre para controlarlos es su identificacin al crearlos. Muchas veces se prefiere usar el mtodo select, que lo que hace es preguntar de una serie de puntos de lectura de datos (en este caso sockets) cul est listo para ser ledo: este puede ser uno de los sockets de comunicacin con cliente (en un arreglo) o el socket por donde se escuchan las peticiones (recordar que el IO es lo ms lento en todo esto)
Un servidor stateless (sin estado) implica que no se acuerda de las peticiones anteriores
requerimiento leer bytes 0 a 49 de XYZ
A CLIENT A SERVER
This may cause a lot of network traffic, especially if there are many clients
requerimiento leer bytes X a X+50 de XYZ
A CLIENT A SERVER
ZXY
50
ZXY
50
Req. 0, leer 50
respuesta: el contenido
ZXY
50
Req. 0, leer 50
respuesta: el contenido
ZXY
50
Req. 0, leer 50
respuesta: el contenido
Posibilidad de Errores
La red manda dos veces el datagrama con requerimiento de lectura Si el computador del cleinte se cae y rebootea el programa. Si el computador se cae antes de poder des-registrarse Si otro cliente se conecta en el mismo port que el que se cay sin avisar En una internet real, donde las mquinas pueden caerse y rebootear y los mensajespueden perderse, llegar atrasados, duplicados o en orden incorrecto un servidor con mantecin de estado puede resultar difcil de programar para hacerlo tolerante a los errores.
Mdulo Cliente
Componentes
Flat File Service: Implementa las operaciones
directamente sobre los archivos. Trabaja con Unique File Identifieres (UFID). Se genera uno nuevo por cada archivo
Componentes
Flat File Service: Implementa las operaciones
directamente sobre los archivos. Trabaja con Unique File Identifieres (UFID). Se genera uno nuevo por cada archivo
delete(FileId) : borra el archivo getAttributes(FileId) : retorna una estructura con los atributos setAttributes(FileId, attr) : pone los atributos segn la
estructura
Controles de acceso
En un sistema local el chequeo se hace slo al abrir el archivo y los derechos se conservan en un sistema distribuido los chequeos se deben hacer a nivel de servidor. Para que el servidor siga siendo stateless se pueden usar 2 estrategias:
El chequeo se hace cuando el nombre es convertido en UFID y el resultado es codificado en forma de capacidad que se retorna al cliente, el cual lo usa para futuros accesos La identificacin del usuario se hace cada vez que se manda un request y el chequeo se hace para cada operacin
El segundo es ms usado (en NFS y AFS) por su simplicidad, pero ninguno garantiza seguridad en el caso de identidad suplantada
Ejemplo 1 el NFS
Sist Local
Caractersticas de NFS
La comunicacin es por medio de RPC y es abierta en el servidor, que reside en el kernel La identificacin de archivos es por medio de los llamados file handters consistentes en:
Filesystem identifier i-node number or file i-node gerneration number
El estado se guarda en el cliente en un v-node Autentificacin del cliente en cada llamada mandando user ID y group ID Los servicios de flat file y directory estn integrados El servicio de mount provee un link a un sistema remoto
Cache en NFS
Cache en Unix: buffer cache, read ahead, delayed write Cache en Server: datos de escritura se guardan en memoria cache y
son escritas antes del reply al cleinte. En la versin 3 se guarda todo en cache hasta que se recibe la operacin commit para ese archivo (buffer lleno o close)
delete(FileId) : borra el archivo getAttributes(FileId) : retorna una estructura con los atributos setAttributes(FileId, attr) : pone los atributos segn la
estructura
Ejemplo 2: El AFS
Apunta a lograr mejor performance en situaciones de escalabilidad
Whole-file serving: El contenido de todo los directorios archivos son traspasados al cleinte Whole-file caching: Los archivos transmitidos son guardados en cache local. Normalmente varios cientos de archivos ! El cache es casi permanente. Cuando se hace un open del archivo se transmite el archivo entero si no estaba las operaciones de escritura/lectura se hacen localmente Con el close, se transmite una copia modificada al servidor Debe
Vice
Venus
Unix Kernel