POD Flashcards
¿Cuáles son los 3 componentes del teorema CAP y que indica el teorema de la relación entre ellos para sistemas distribuidos?
- Consistency: Todas las réplicas de un dato tienen el mismo (y último) valor escrito al momento de cualquier lectura.
- Availability: Todos los nodos del cluster están disponibles para atender requests. No implica que no pueda reportar un error de causarse, simplemente que contesta.
- Partition tolerance: El sistema permite que la información esté particionada entre nodos de un cluster y tenga replicación de manera que pueda soportar fallas en la red.
El teorema indica que no se pueden garantizar las 3 cosas juntas. Como las herramientas distribuidas requieren particionamiento, hay que elegir entre consistency y availability.
Explicar la estrategia de Cassandra para realizar la escritura y replicación de un dato.
El nodo que recibe el pedido de escritura (y puede ser cualquiera) se convierte en coordinador de las escrituras.
Calcula mediante la fórmula de replicación quien es el owner del dato y a quien se le debe asignar las réplicas. Envía los mensajes de escritura y cuando recibe la cantidad ACKs requeridos por el factor de escritura retorna el mensaje de escritura terminado.
Explicar el concepto de Split Brain. ¿Puede ocurrir utilizando el framework Hazelcast? ¿Si es así, cómo? (triple)
El split brain ocurre cuando, por problemas de comunicación de red, el cluster se divide en dos partes autónomas. Cada parte funciona de manera independiente a la otra sin inconvenientes recibiendo escrituras y lecturas.
El problema reside en que cuando se repara la conexión entre las partes, se crearan conflictos para mergearlas. Hazelcast tiene configuración para resolver cómo solucionar estos conflictos.
Explicar que indica la capacidad de elasticidad que puede tener un cluster de trabajo o store distribuido. (doble)
La elasticidad es la capacidad de un cluster de modificar la cantidad de nodos que lo componen sin que el cluster quede offline completamente.
¿En Hazelcast, por qué es necesario implementar el método reset al escribir un Combiner?
checkeado:
Como los nodos mapper reutilizan la instancia de los combiners para diferentes claves es necesario utilizar el metodo reset para limpiar el estado de la clave anterior para comenzar a utilizarlo para una nueva clave.
PAU:
En caso de llegar a un nuevo valor, llamar a un método reset reinicializar el conteo.h
¿Cómo funciona el algoritmo de leasing de Remote Garbage Collector?
checkeado:
El algoritmo de leasing utiliza un contador en el servidor para saber la cantidad de instancias remotas, pero esos contadores estan atados a un timer, una vez que el timer se vence se considerael prestamo vencido y la instancia liberada. Para que no se libere es responsabilidad del cliente renovar el prestamo (contador) antes de que se venza
PAU:
Cada referencia que se envía a los clientes se inicializa con un tiempo de lease. El cliente es responsable de renovar ese lease, de lo contrario, cuando se vence el tiempo el servidor lo considera liberado.
¿Por qué es necesario setear un security manager para poder activar el Dynamic class loading? (doble)
Porque correr clases cuya definición está en otro servidor es peligroso, por lo que debe hacerse con conciencia y solo si es estrictamente necesario. Es por esto que java no lo permite por defecto y hay que usar un security manager para habilitarlo.
¿Cual es la restricción que presenta Cassandra a la hora de realizar filtros en sus consultas, por qué existe esa restricción y qué desafío se presenta a partir de esta restricción?
La restricción que presenta Cassandra es que solo permite filtrar en el where por la primary key. Esta restricción se debe a cómo indexa la información. Cassandra no tiene índices si no que indexa por los campos de la primary en el file system. Por lo cual cada consulta tiene una tabla con la primary dependiente de qué campos pondré en el where.
¿Cual es el beneficio de poder poner un servicio en estado inactivo en Activatable?
Porque si no está usando, deja de consumir recursos, haciéndolo más eficiente. Además, al dejarlo desactivado persiste en memoria.
¿Cuál es la utilidad de agregar la variable serialVersionUID en una clase Serializable?
checkeado:
Permite controlar las versiones de las clses que tienen el cliente y el servidor para ver si las mismas son compatibles. Si varia el valor no son compatibles y el sistema falla
PAU:
Para controlar la versión de la serialización.
Permite controlar las versiones de las clases que tienen el cliente y el servido para ver si las mismas son compatibles.
¿Cómo es el pasaje de parámetros en RMI para los siguientes tipos de parámetros?
Objetos no remotos
Objetos remotos
Objetos no remotos: cuando el objeto a pasar será utilizado como valor, se pasa como valor. El middleware se encarga de serializar el objeto en el origen y deserializarlo en el destino. Genera una copia del objeto en la JVM.
Objetos remotos: en este caso, se utiliza el mismo mecanismo que un Servant. Se exporta el objeto, transformándolo en un objeto remoto y se envía la referencia al dicho objeto. Y se define como parámetro a través de su interfaz remota.
Indicar que significa que un sistema de store cumpla con el modelo de consistencia eventual. (doble)
Indica que luego de realizarse una escritura, y de no mediar nuevas escrituras, pasado cierto tiempo todas las lecturas reflejarán el valor escrito.
En Hazelcast por defecto ¿Cómo se selecciona al nodo dueño de una partición?
Las particiones son distribuidas uniformemente entre los nodos del cluster por lo que cada uno recibe (cantidadDeParticiones/cantidadDeNodos) particiones.
La relación partición ->owner se guarda en una tabla de particiones, replicada por los nodos del cluster.
(Agregaría que el nodo más viejo es el Coordinador y genera esa tabla, respondiendo a la pregunta de cómo se selecciona el dueño)
Explicar cuál es la función del Combiner en el paradigma de programación distribuido MapReduce.
El combiner se utiliza únicamente con streams paralelos y sirve para justamente combinar las reducciones de cada stream paralelo. Acumula hasta que se acaban una cierta cantidad de valores (chunk) y se emite ese resultado parcial.
Alt: el combiner hace de reducer post-mapeo pero con un límite llamado chunk (acumula “chunk” cantidad de valores y los manda). Se usa para reducir la cantidad de paquetes mandados al siguiente paso del MapReduce
el Combiner juega un papel importante en la etapa intermedia de reducción, donde se combinan y agrupan los resultados parciales generados por los mappers antes de pasarlos a la etapa final de reducción.
El objetivo principal del Combiner es reducir la cantidad de datos que se deben transferir entre los mappers y los reducers en un entorno distribuido. Al realizar una combinación local de los resultados parciales en cada nodo del clúster antes de enviarlos a los reducers, se reduce el tráfico de red y se optimiza el rendimiento general del proceso MapReduce.
Explicar el proceso y las componentes que se involucran desde el momento que el RMID recibe un mensaje para un servicio que fue registrado, pero no está activo. (doble)
checkeado:
El RMID recibe el servicio que se lo pasa al Activator, el Activator ve que el servicio esta registrado pero no esta activo. Va a buscar el ActivationGroup, le tira una exepcion que el mismo agarra y
luego crea el Activation Group, el Activator le pasa al Activaton Group el Activator Group ID y el
Desc, que le dice como crear el Servant. Luego el Activator Group crea el servant, y el servant se encarga de correr la funcion y lo devuelve
NO DRIVE:
El RMID recibe un mensaje. Se lo transmite al Activator asociado. El Activator busca el Activation Group correspondiente. Como no está activo, inicializa el Activation Group dentro de una nueva JVM. Una vez que el Activation Group está activo, el Activator le envia Activation ID y Activation Desc (que dice como crear/activar es servant) para que pueda poner activo el Servant necesario. El Servant creado ejecuta el método pedido y retorna.
Indicar cual es la garantía de la semántica At least once
El cliente envía el mensaje y espera que el servidor envía una respuesta que indique que el mensaje se ejecutó. Si pasa un tiempo sin recibir dicha respuesta el cliente reintenta el mensaje. De esta manera se garantiza que se ejecute pero puede pasar que se ejecute más de una vez.
Indicar por qué utilizar un servidor de nombres (que no sea el RMI Registry) permite que los servicios hechos en RMI garantice la transparencia de ubicación
RMI (Remote Method Invocation)
Porque aísla el objeto remoto del cliente mediante un servidor de nombres. De ese modo se podría cambiar la ubicación física del objeto remoto pero el cliente no se enteraría.
Indicar si en el RMI Registry se está generando un sistema que respeta la transparencia de fallas.
No, porque el RMI Registry es un SPOF. Como es único, si falla, falla todo el sistema.
En el caso del RMI Registry, se trata de un componente centralizado y único en el que se registran y buscan los objetos remotos. Si el RMI Registry falla, todo el sistema basado en RMI se verá afectado, ya que los clientes no podrán encontrar ni comunicarse con los objetos remotos registrados.
Indicar que significa que un cliente utilice la estrategia de server side pushing para obtener la respuesta de un servicio remoto de manera no bloqueante.
Significa que cuando el cliente llama al método que realizará el procesamiento, este le otorgará al servidor una manera para que el servidor le avise al cliente cuando terminó con esa tarea.