Sistemas Distribuidos: Ejercicio del tema arquitectura de los sistemas distribuidos

Marzo del 2018.

Grupo de tarde.

Se pretende usar un sistema distribuido para la ejecución de aplicaciones paralelas que acceden a un sistema de almacenamiento de objetos (SA: contiene N objetos), tal que cada proceso de una aplicación se ejecutará en un nodo de procesamiento distinto (NP). Por motivos de rendimiento, se implementa una caché local de objetos en cada NP con políticas write-through (las modificaciones sobre los objetos se escriben inmediatamente en SA) y write-invalidate (cuando se modifica un objeto, hay que avisar inmediatamente a los otros nodos NP, sean de la misma aplicación o no, que tengan copia del mismo para que lo invaliden, es decir, lo eliminen de su caché). Asimismo, para facilitar el seguimiento y depuración de las aplicaciones, se implementa un sistema de log replicado, independiente para cada aplicación, que será gestionado por un nodo administrador (NA). Para la implementación del sistema se va a usar un esquema editor/subscriptor (E/S) con creación dinámica de temas, sólo para el envío de las invalidaciones y de los mensajes al log (NOTA: se recomienda comenzar estableciendo cuántos temas se requieren en el sistema, que corresponde a la pregunta con el enunciado en negrilla; debe determinarse el número de temas mínimo requerido pero asegurándose de que ningún nodo recibe un evento que no le concierne), y un modelo cliente/servidor para el resto de las interacciones. El esquema E/S implementado asegura que no se pueden perder notificaciones de eventos pero puede entregar las notificaciones de varios editores en diferente orden a distintos suscriptores. A continuación, se detallan las diversas operaciones que puede realizar un nodo NP cuando forma parte del conjunto de nodos que ejecutan una aplicación. Activación del log: operación solicitada inicialmente por uno de los NP de la aplicación a NA, el cual selecciona tres nodos (NL) para que den soporte al log de esa aplicación y les informa de ese hecho (nótese que ninguno de los NP de la aplicación conoce qué nodos NL van a dar soporte a su log, ni los nodos NL saben qué nodos NP forman parte de dicha aplicación). Lectura de objeto: si no está en la caché, lo lee primero de SA; a continuación, accede al objeto en la caché. Actualización de objeto: si no está en la caché, lo lee primero de SA. Estando ya presente en la caché, lo modifica actualizando SA y activando el protocolo de invalidación, que afectará a todos los NP que tengan copia del mismo, con independencia de a qué aplicación estén asociados. Tratamiento de invalidación: al recibir una invalidación asociada a un objeto, elimina el objeto correspondiente de la caché. Expulsión de un objeto de la caché por falta de espacio: elimina de la caché el objeto seleccionado por el algoritmo de reemplazo debido a que no hay sitio en la misma a la hora de traer otro objeto. Escritura en el log: envío de un mensaje al log. En el sistema se implementan distintas técnicas para mejorar la fiabilidad. Por un lado, hay tres nodos que implementan la funcionalidad NA, tal que sólo uno de ellos está totalmente activo, comunicándose periódicamente con el resto y almacenando su información de estado en el propio SA. Por otro lado, a la hora de consultar el log, ante problemas de conectividad puntuales que impidan el acceso a todas las copias, se mantiene el acceso a los datos.
  1. ¿Cuántos temas existen en el sistema si hay A aplicaciones que acceden a todos los objetos?
    1. N + A
    2. N + 1
    3. A + 1
    4. N * A
Explicación
Por cada aplicación, debe existir un tema que permita habilitar un log independiente para la misma. Asimismo, debe haber un tema por cada objeto del repositorio que permita gestionar las invalidaciones asociadas al mismo.
  1. ¿Qué módulos realizan el papel de subscriptores?
    1. NP y NL
    2. Sólo NP
    3. Sólo NL
    4. Sólo SA
Explicación
Tanto NP como NL ejercen el rol de subscriptores. Un módulo NP tiene que subscribirse a los temas asociados con los objetos de los que dispone copia en la caché local, mientras que un nodo NL debe subscribirse al tema correspondiente a la aplicación a la cual va dar soporte de log.
  1. ¿Qué módulos realizan el papel de editores?
    1. Sólo NP
    2. Sólo NL
    3. NP y NL
    4. Sólo SA
Explicación
Sólo NP va a ejercer el papel de editor cada vez que tenga que propagar una invalidación de un objeto o enviar un mensaje al log.
  1. ¿A cuántos temas como máximo se subscribe un nodo NP que accede a todos los objetos y usa el log?
    1. N
    2. N + 1
    3. 1
    4. 0
Explicación
Tendrá que subscribirse a los temas asociados a todos los objetos del repositorio, ya que, en cuanto al log, sólo ejerce el papel de editor.
  1. ¿A cuántos temas como máximo se subscribe un nodo NL que da soporte al log de una aplicación que accede a todos los objetos?
    1. 1
    2. N + 1
    3. N
    4. 0
Explicación
Tendrá que subscribirse sólo al tema asociado al log de la aplicación.
  1. ¿Qué acción E/S realiza un nodo NL cuando NA le selecciona como soporte del log de una aplicación?
    1. subscripción
    2. baja
    3. publicación
    4. notificación
Explicación
Debe subscribirse al tema asociado al log de la aplicación.
  1. ¿Qué acción E/S realiza un nodo NP durante el procesamiento de una lectura de un objeto que no está en su caché?
    1. subscripción
    2. baja
    3. publicación
    4. notificación
Explicación
Una vez que el objeto está en la caché, debe subscribirse al tema asociado al mismo para así recibir la invalidación correspondiente a dicho objeto, si algún otro NP lo actualiza.
  1. ¿Qué acción E/S realiza un nodo NP durante el procesamiento de una actualización de un objeto que sí está en su caché?
    1. publicación
    2. baja
    3. subscripción
    4. notificación
Explicación
Debe publicar la invalidación de dicho objeto enviándola al tema asociado al mismo.
  1. ¿Qué acción E/S realiza un nodo NP durante el tratamiento de una invalidación?
    1. baja
    2. publicación
    3. subscripción
    4. notificación
Explicación
Puesto que ya no va a disponer de copia del objeto en la caché, debería de dar de baja la subscripción al tema asociado al mismo.
  1. ¿Qué acción E/S realiza un nodo NP durante la expulsión de un bloque de la caché por falta de espacio?
    1. baja
    2. publicación
    3. subscripción
    4. notificación
Explicación
Dado que ya no va a disponer de copia del objeto en la caché, debería de dar de baja la subscripción al tema asociado al mismo.
  1. ¿Qué acción E/S realiza un nodo NP cuando realiza una escritura al log?
    1. publicación
    2. baja
    3. subscripción
    4. notificación
Explicación
Debe publicar ese mensaje enviándolo al tema asociado al log de la aplicación.
  1. ¿De qué tipo de sistema se trata según el teorema CAP?
    1. AP
    2. CA
    3. CP
    4. CAP
Explicación
Dado que cuando se pierde la accesibilidad a todas las copias del log por problemas de conectividad (P) se sigue permitiendo el acceso a los datos del mismo, se está prefiriendo la disponibilidad (A) sobre la consistencia (C).
  1. ¿De qué tipo de sistema se trata según el teorema PACELC?
    1. PAEL
    2. PCEC
    3. PAEC
    4. PCEL
Explicación
Por un lado, cuando hay problemas de conectividad, se prefiere tener disponibilidad frente a consistencia (PA). Por otro lado, cuando el sistema tiene un funcionamiento normal, dado que el esquema editor/subscriptor no asegura la entrega en el mismo orden a los nodos NL de los mensajes al log de distintos nodos NP, no se asegura la consistencia, primando la latencia (asegurarla requeriría que la operación realizara ciertas sincronizaciones que penalizarían la latencia).
  1. ¿Qué esquema de replicación de servicio se usa en el sistema?
    1. warm standby
    2. hot standby
    3. cold standby
    4. Activa
Explicación
Se trata del esquema warm standby, en el que hay un servidor primario que procesa las peticiones de los clientes, almacena su estado de forma persistente, comunicándoselo periódicamente a los otros servidores.
  1. ¿Cuál de las siguientes soluciones es más adecuada para implementar SA si se busca que sea más fácil de programar?
    1. Creación dinámica de threads.
    2. Basada en eventos.
    3. Uso de un pool estático de threads.
    4. Uso de un pool dinámico de threads.
Explicación
La programación de una solución basada en eventos es muy compleja puesto que hay que gestionar de forma asíncrona las operaciones. Entre las soluciones concurrentes, la más sencilla es la que plantea la creación dinámica de threads, puesto que en las dos otras soluciones se requiere algún de tipo de planificación a la hora de asignar las peticiones a los threads existentes.
  1. ¿Qué tipo de nodos no tendría que darse de alta en el binder si se usara un servicio de binding?
    1. NP
    2. NL
    3. NA
    4. SA
Explicación
Todo nodo con el que otro necesite iniciar una comunicación debe darse de alta en el servicio de binding para poder ser localizado sin necesidad de conocer su dirección IP y puerto. Tal como se plantea el enunciado, NP contacta con NA y SA, mientras que NA, por su parte, contacta con NL. Sin embargo, ningún nodo requiere iniciar una comunicación directamente con NP.
  1. ¿Cuál de las siguientes circunstancias propiciaría el uso de un esquema con estado en SA?
    1. Poder asegurarse de que un objeto no se borra mientras está siendo usado.
    2. Facilitar el mantenimiento del servicio si se reinicia SA.
    3. Favorecer el reparto de carga si SA usa un esquema con escalado horizontal.
    4. Reducir el gasto de memoria en SA.
Explicación
Una solución sin estado facilita el mantenimiento del servicio si se reinicia el servidor, puesto que las peticiones son autocontenidas, favorece el reparto de carga cuando se usa un esquema con escalado horizontal, ya que cualquier servidor puede procesar una petición al no existir un estado previo, y reduce el gasto de memoria en el servidor, al no tener que almacenarse el estado. Sin embargo, plantea dificultades a la hora de asegurar que no se elimine un objeto que está siendo usado, ya que para ello sería necesario almacenar en el servidor esa información de uso, lo cual convertiría a SA en un servidor con estado.
  1. Se plantea cambiar las 2 políticas actuales de la caché por delayed-write (periódicamente, se escriben las modificaciones sobre los objetos a SA) y write-update (en vez de enviar invalidaciones, se propaga a los otros NP afectados el nuevo valor), respectivamente. ¿Cuál de ellas propiciaría el uso de pipeline de peticiones en la interacción con SA?
    1. delayed-write
    2. Ambas
    3. Ninguna
    4. write-update
Explicación
Para poder ser efectiva la técnica del pipeline de peticiones, es necesario que el cliente necesite realizar múltiples peticiones simultáneas al servidor. Con el esquema planteado en el enunciado, un nodo NP lee un objeto de SA cuando no lo encuentra en la caché y lo escribe en SA cuando se modifica. Se trata, por tanto, de accesos individuales que no pueden aprovechar la técnica del pipeline. Cuando se usa una política delayed-write, periódicamente, se escriben en SA todos los bloques modificados en la caché. Por tanto, en este caso sí se puede sacar partido del pipeline de peticiones. La política write-update, sin embargo, no está vinculada con la interacción con el servidor SA, sino con el esquema editor/subscriptor.
  1. ¿Qué módulo debería enviar los mensajes de renovación del lease si se aplica la técnica de leasing al esquema editor/subscriptor?
    1. NP y NL
    2. Sólo NL
    3. Sólo NP
    4. Sólo SA
Explicación
Si se aplica un esquema de leasing a una solución editor/subscriptor, los procesos que siguen el rol de subscriptores deben renovar el lease, de manera que si en un momento dado un subscriptor se cae, se puede dar de baja de todos los temas que estuviera subscrito. De los procesos planteados en la pregunta, tanto NP como NL actúan como subscriptores.
  1. Se plantea usar un esquema con un filtro de eventos por contenido en vez de un filtro por temas. ¿Para cuál de estos casos ese cambio sería más ventajoso en el sentido de reducir el número de mensajes recibidos pero no deseados?
    1. Interés en conocer todas las modificaciones de objetos que realiza un determinado NP.
    2. Interés en conocer todas las modificaciones sobre un determinado conjunto de objetos.
    3. Interés en conocer todos los mensajes que escriben al log un cierto conjunto de aplicaciones.
    4. Interés en conocer todas las modificaciones sobre un determinado objeto que realiza cierto NP.
Explicación
Veamos cada caso planteado analizando en cuál el uso de un filtro por contenido sería más efectivo (es decir, descartaría más eventos no deseados).