top of page
Buscar

Sistemas Distribuidos UOC: PECs, prácticas y ejercicios

Foto del escritor: Resolver PECs
Resolver PECs
hace 33 minutos
11 min de lectura

Sistemas Distribuidos UOC

En ResolverPECs.com realizamos tus PECs y PACs universitarias por ti.

Sistemas Distribuidos UOC es una de las asignaturas técnicas del Grado en Ingeniería Informática donde conceptos que parecían independientes empiezan a relacionarse entre sí.

Procesos.

Redes.

Comunicación.

Concurrencia.

Sincronización.

Replicación.

Fallos.

Consistencia.

Todo debe funcionar conjuntamente.

La asignatura aparece actualmente dentro del Grado en Ingeniería Informática de la UOC como una materia de 6 ECTS, situada en el sexto semestre del itinerario estándar. La propia UOC mantiene también en su plataforma DSLab un espacio específico para Sistemas Distribuidos.

¿Qué se estudia en Sistemas Distribuidos UOC?

La documentación académica oficial de la UOC identifica como contenidos principales de Sistemas Distribuidos:

  • arquitecturas y paradigmas;

  • mecanismos de comunicación;

  • sincronización;

  • consistencia y replicación;

  • tolerancia a fallos;

  • sistemas distribuidos a escala Internet.

También contempla actividades prácticas y programación dentro de la materia.

Esto explica por qué las PECs y prácticas pueden resultar especialmente exigentes.

No se trata únicamente de memorizar conceptos.

Hay que entender cómo interactúan varios componentes que ejecutan operaciones al mismo tiempo y que no comparten necesariamente un estado global perfecto.

¿Qué es un sistema distribuido?

Un sistema distribuido está formado por distintos componentes o computadores que se comunican mediante una red y cooperan para ofrecer un servicio.

Para el usuario, muchas veces debería comportarse como si fuera un único sistema.

Pero internamente existen múltiples procesos.

Cada uno puede encontrarse en una máquina diferente.

Las comunicaciones necesitan tiempo.

Un nodo puede fallar.

Dos componentes pueden tener información diferente durante unos instantes.

Ese conjunto de problemas es precisamente lo que hace interesante la asignatura.

El problema fundamental: no existe una visión perfecta

En un programa sencillo que se ejecuta en un único ordenador, gran parte del estado está disponible localmente.

En un sistema distribuido no ocurre lo mismo.

Un nodo puede desconocer qué acaba de hacer otro.

Un mensaje puede retrasarse.

Otro puede llegar después.

Una máquina puede dejar de responder.

Eso obliga a diseñar protocolos capaces de funcionar incluso cuando la información disponible no es perfecta.

Arquitecturas distribuidas

Uno de los primeros conceptos consiste en comprender cómo pueden organizarse los componentes.

Puede existir una arquitectura cliente-servidor.

Puede haber múltiples servidores.

También pueden utilizarse sistemas entre iguales o arquitecturas con diferentes niveles.

La pregunta importante no es únicamente:

¿qué arquitectura existe?

También hay que comprender:

¿por qué se utiliza y qué ventajas o inconvenientes tiene?

Cliente-servidor

En una arquitectura cliente-servidor, diferentes clientes solicitan servicios a uno o varios servidores.

Es un modelo intuitivo.

El cliente necesita algo.

El servidor atiende la petición.

Pero aparecen nuevas preguntas.

¿Qué ocurre si el servidor falla?

¿Qué sucede si recibe demasiadas peticiones?

¿Cómo escalamos?

¿Cómo mantenemos varias copias del servicio?

Ahí comienza realmente el análisis distribuido.

Comunicación entre procesos

Los componentes de un sistema distribuido necesitan comunicarse.

Esto implica enviar información.

Una operación aparentemente sencilla como:

“envía este dato al servidor”

esconde numerosos problemas.

¿Ha llegado?

¿Ha llegado una sola vez?

¿Ha llegado antes que otro mensaje?

¿Ha respondido el servidor?

¿Debemos reenviarlo?

Por eso los mecanismos de comunicación son uno de los contenidos centrales de la asignatura según la propia documentación de la UOC.

Mensajes

Un modelo habitual utiliza mensajes.

Un proceso envía información a otro.

El receptor procesa el mensaje y puede responder.

En una PEC puede ser necesario analizar:

quién envía,

quién recibe,

qué información contiene el mensaje,

en qué orden ocurre,

y qué sucede si existe un fallo.

Conviene dibujar la secuencia.

Diagramas temporales

Cuando intervienen varios procesos, una representación visual puede ahorrar muchos errores.

Puedes colocar:

Proceso A

Proceso B

Proceso C

en columnas diferentes.

Después representas los mensajes mediante flechas.

Así resulta mucho más sencillo comprender:

qué ocurrió primero,

qué proceso conocía cada dato,

y en qué momento llegó cada mensaje.

Comunicación síncrona y asíncrona

Otro concepto importante consiste en distinguir entre modelos donde los tiempos están más controlados y sistemas donde no podemos asumir cuánto tardará una operación.

En un entorno distribuido real, la comunicación puede experimentar retrasos.

Por eso una ausencia de respuesta plantea una pregunta complicada:

¿el nodo ha fallado o simplemente está tardando?

Esta diferencia está detrás de muchos problemas distribuidos.

Concurrencia

Los procesos pueden ejecutarse simultáneamente.

Esto significa que varias operaciones pueden modificar o consultar recursos al mismo tiempo.

Si no se controla correctamente, pueden aparecer resultados inconsistentes.

Por ejemplo:

dos nodos leen el mismo valor.

Ambos lo modifican.

Los dos intentan guardar el resultado.

¿Quién gana?

¿Se pierde una actualización?

Este tipo de situaciones obliga a pensar en sincronización y coordinación.

Sincronización

La sincronización aparece expresamente entre los contenidos oficiales de Sistemas Distribuidos en la UOC.

Su objetivo es coordinar operaciones.

No siempre queremos que dos procesos accedan simultáneamente a un recurso.

En otras ocasiones necesitamos garantizar cierto orden.

Una PEC puede plantear una secuencia de operaciones y pedirte razonar sobre si el resultado es correcto.

Exclusión mutua

Un problema clásico es garantizar que solo un proceso entre en una sección crítica cada vez.

Imagina una base de datos compartida.

Dos procesos intentan modificar simultáneamente la misma información.

Puede necesitarse algún mecanismo que controle el acceso.

Pero en un sistema distribuido esto es más complicado que utilizar simplemente una variable compartida local.

Relojes y orden de eventos

Uno de los problemas conceptuales más importantes es determinar el orden.

En un sistema distribuido no siempre existe un reloj global perfecto disponible para todos los nodos.

Por eso muchas veces interesa conocer relaciones como:

este evento ocurrió antes que aquel.

No necesariamente necesitamos saber la hora exacta.

Necesitamos establecer relaciones causales.

Causalidad

Imagina:

Proceso A envía un mensaje a B.

B recibe el mensaje.

Después B envía otro a C.

Podemos deducir que determinados eventos están causalmente relacionados.

Este tipo de razonamiento puede aparecer cuando se estudia el orden de operaciones en sistemas distribuidos.

Una buena técnica consiste en dibujar siempre los procesos y mensajes.

Consistencia

La consistencia es uno de los bloques fundamentales de la asignatura y aparece expresamente en la documentación académica oficial.

El problema aparece cuando tenemos varias copias de los mismos datos.

Supongamos que existen tres servidores.

Todos guardan la misma información.

Un usuario modifica un dato.

¿En qué momento deben conocer esa modificación los otros servidores?

¿Inmediatamente?

¿Puede existir temporalmente una versión antigua?

La respuesta depende del modelo de consistencia.

¿Por qué replicar información?

La replicación significa mantener varias copias.

Esto puede mejorar:

disponibilidad,

rendimiento,

tolerancia a fallos,

proximidad de los datos.

Pero introduce un problema.

Todas esas copias necesitan coordinarse.

Si una cambia, las otras deben conocer la modificación.

Ahí aparece la relación directa:

replicación ↔ consistencia.

Consistencia fuerte

De forma intuitiva, una consistencia fuerte intenta ofrecer al usuario una visión muy uniforme de los datos.

Después de realizar determinada actualización, las siguientes operaciones deberían observar un estado coherente.

Esto facilita razonar sobre el sistema.

Pero puede requerir más coordinación.

Y coordinar nodos distribuidos tiene costes.

Consistencia débil

Otros sistemas pueden permitir temporalmente diferencias entre réplicas.

Una modificación puede propagarse posteriormente.

Esto permite reducir ciertas necesidades de coordinación.

Pero la aplicación debe ser capaz de trabajar con esa situación.

Por eso una PEC puede pedir analizar qué garantías necesita realmente un sistema.

Protocolos de propagación

Cuando existen varias réplicas debemos decidir cómo se distribuyen las actualizaciones.

Puede utilizarse algún mecanismo de propagación.

Los nodos necesitan intercambiar información.

También puede ser necesario gestionar:

versiones,

orden,

actualizaciones concurrentes,

conflictos.

Antes de programar, conviene comprender qué propiedad quiere garantizar el protocolo.

Data dissemination

En prácticas de sistemas distribuidos puede aparecer la idea de difundir datos entre diferentes nodos.

Un nodo recibe o genera una actualización.

Después debe propagarse.

La pregunta es:

¿a quién?

¿cuándo?

¿qué versión?

¿qué ocurre si un nodo estaba desconectado?

Este tipo de problema permite trabajar conjuntamente comunicación, replicación y consistencia.

Consistencia eventual

Un modelo muy conocido es la consistencia eventual.

De forma simplificada, puede aceptarse que durante un periodo distintas réplicas tengan estados diferentes.

Si dejan de producirse nuevas actualizaciones y el sistema continúa propagando correctamente la información, las réplicas acabarían convergiendo.

Es importante no interpretar esto como:

“los datos pueden ser incorrectos indefinidamente”.

La idea está relacionada con la convergencia.

Conflictos

¿Qué ocurre si dos nodos modifican el mismo dato antes de conocer la actualización del otro?

Tenemos un conflicto.

El sistema necesita alguna política para resolverlo.

Puede depender de:

versiones,

marcas temporales,

reglas de prioridad,

operaciones,

o del propio modelo utilizado.

Lo fundamental en una PEC es aplicar exactamente el mecanismo indicado en el enunciado.

Replicación

La documentación de la UOC agrupa explícitamente consistencia y replicación dentro de los contenidos de Sistemas Distribuidos.

Esto tiene sentido.

Replicar proporciona ventajas.

Pero cada réplica adicional crea más estados que deben mantenerse coordinados.

Por eso estos dos conceptos suelen estudiarse conjuntamente.

Tolerancia a fallos

¿Qué ocurre cuando falla un nodo?

Un sistema distribuido debería poder afrontar determinados fallos sin que todo el servicio desaparezca.

La tolerancia a fallos forma parte del contenido oficial de la materia.

El objetivo puede consistir en detectar el problema, continuar funcionando o recuperarse adecuadamente.

Tipos de fallo

En ejercicios académicos pueden aparecer diferentes situaciones.

Un proceso deja de responder.

Un mensaje no llega.

Una máquina se reinicia.

Una red se divide temporalmente.

Cada tipo de fallo puede necesitar estrategias diferentes.

Por eso conviene identificar primero:

qué ha fallado exactamente.

Detectar fallos no siempre es sencillo

Imagina que envías una petición.

No recibes respuesta.

Existen al menos dos posibilidades:

el servidor ha fallado,

o

la respuesta está tardando.

Desde el punto de vista del cliente, inicialmente pueden parecer lo mismo.

Esta incertidumbre es uno de los aspectos fundamentales de los sistemas distribuidos.

Timeouts

Una estrategia práctica puede consistir en esperar un tiempo determinado.

Si no llega respuesta, se toma alguna acción.

Pero un timeout no demuestra matemáticamente que el otro nodo esté muerto.

Solo indica que no hemos recibido respuesta dentro del intervalo esperado.

Entender esta diferencia evita muchas explicaciones incorrectas.

Reintentos

Si una comunicación falla, puede intentarse de nuevo.

Pero aparece otra pregunta:

¿qué ocurre si el servidor sí ejecutó la primera petición y lo único que se perdió fue la respuesta?

Si repetimos la operación, podría ejecutarse dos veces.

Esto hace importante comprender cómo está diseñada cada operación.

Idempotencia

Una operación idempotente puede repetirse sin modificar el resultado final más allá de la primera ejecución efectiva.

Este concepto puede resultar muy útil cuando se diseñan sistemas que realizan reintentos.

No significa que todas las operaciones sean idempotentes.

Hay que analizar cada caso.

Escalabilidad

La UOC incluye también los sistemas distribuidos a escala Internet dentro de los contenidos de la materia.

Un sistema que funciona perfectamente con cinco usuarios puede fallar con cinco millones.

Escalar no significa simplemente comprar un ordenador más potente.

Muchas veces significa distribuir trabajo.

Escalado horizontal

Una estrategia consiste en añadir más máquinas.

En lugar de tener un único servidor muy grande, el sistema dispone de varios nodos.

Pero esto vuelve a introducir los problemas que ya conocemos:

distribución,

comunicación,

replicación,

consistencia,

fallos.

En sistemas distribuidos, mejorar una característica puede aumentar la complejidad de otra.

¿Cómo suelen ser las PECs de Sistemas Distribuidos UOC?

Pueden incluir cuestiones teóricas y ejercicios prácticos.

Un ejercicio puede presentar varios nodos y pedirte analizar qué ocurre con determinados mensajes.

Otro puede trabajar consistencia.

También pueden aparecer protocolos, replicas, fallos o prácticas de programación.

La propia documentación del título incluye tanto ejercicios y actividades prácticas como programación entre las actividades formativas vinculadas a esta materia.

Prácticas de Sistemas Distribuidos

La programación introduce una dificultad adicional.

No basta con entender el protocolo en papel.

También debe funcionar.

Y un error distribuido puede ser mucho más complicado de reproducir que un fallo de un programa secuencial.

Por eso conviene separar claramente:

protocolo

y

implementación.

Primero debes saber qué debería ocurrir.

Después programas ese comportamiento.

DSLab UOC

Actualmente la UOC mantiene Sistemas Distribuidos dentro de DSLab, su entorno de laboratorio para diferentes asignaturas técnicas del Grado en Ingeniería Informática.

Por eso, cuando una PEC o práctica utiliza un entorno específico, conviene comprobar cuidadosamente las instrucciones facilitadas en el aula.

No asumas que una práctica de un semestre anterior utiliza exactamente la misma configuración.

Cómo empezar una práctica

Antes de escribir código responde estas preguntas:

¿qué nodos existen?

¿qué información mantiene cada uno?

¿qué mensajes pueden enviar?

¿qué ocurre cuando reciben cada mensaje?

¿qué propiedad debe cumplir el sistema?

Si no puedes explicar eso con palabras, programar inmediatamente suele generar más problemas.

Máquinas de estados

Una forma útil de pensar en ciertos protocolos es representar cada nodo como una máquina de estados.

Cada proceso tiene:

estado local

y responde a:

eventos.

Un mensaje recibido es un evento.

Un timeout puede ser otro.

Una petición del cliente puede ser otro.

Cada evento provoca posiblemente:

cambio de estado + envío de mensajes.

Este enfoque ayuda a ordenar implementaciones complejas.

Logs

Cuando un sistema distribuido falla, mirar únicamente el resultado final puede no servir.

Los logs pueden mostrar:

qué nodo hizo algo,

cuándo,

qué mensaje recibió,

qué mensaje envió.

Por eso resulta útil registrar información suficiente durante las pruebas.

Después puedes reconstruir lo ocurrido.

Pruebas pequeñas

No empieces probando el escenario más complicado.

Utiliza primero:

dos nodos,

una actualización,

ningún fallo.

Después añade:

más actualizaciones,

más nodos,

mensajes retrasados,

fallos.

Este procedimiento permite localizar errores mucho más fácilmente.

No confundas error de código con error de protocolo

Tu programa puede ejecutarse sin excepciones y aun así implementar incorrectamente el protocolo.

También puede ocurrir lo contrario:

el protocolo es correcto conceptualmente, pero existe un fallo de implementación.

Por eso conviene revisar ambas capas por separado.

Ejercicios de consistencia

Cuando una PEC presente varias operaciones sobre réplicas, crea una tabla.

Por ejemplo:

momento | nodo A | nodo B | nodo C | mensajes pendientes

Después avanza paso a paso.

Esto ayuda a visualizar qué información conoce realmente cada nodo.

Ejercicios con mensajes

En problemas con envío y recepción, dibuja flechas.

No confíes en una explicación exclusivamente textual cuando existen muchas comunicaciones.

Un diagrama sencillo puede evitar:

confundir emisor y receptor,

alterar el orden,

olvidar un mensaje.

Ejercicios de tolerancia a fallos

Primero identifica el fallo.

Después analiza:

qué nodos continúan disponibles,

qué información mantienen,

qué mensajes pueden enviarse,

cómo debería reaccionar el protocolo.

No empieces directamente proponiendo una solución.

Entiende primero el escenario.

Errores frecuentes

Un error habitual consiste en asumir que todos los nodos conocen inmediatamente una actualización.

Otro es considerar que los mensajes siempre llegan instantáneamente.

También es frecuente confundir replicación con backup.

Una réplica activa dentro del funcionamiento de un sistema distribuido no tiene necesariamente la misma finalidad que una copia de seguridad.

Otro error: pensar de forma centralizada

En problemas distribuidos debes intentar colocarte dentro de cada nodo.

Pregúntate:

¿qué sabe A en este instante?

No:

¿qué sé yo mirando todo el dibujo?

Tú como observador puedes ver el sistema completo.

El nodo A no necesariamente.

Esta diferencia es fundamental.

¿Ya tienes la PEC empezada?

No siempre es necesario rehacer una práctica completa.

Puede revisarse dónde se produce el problema.

Quizá la fase de comunicación funciona.

Puede que el fallo aparezca únicamente durante la propagación.

Tal vez la consistencia sea correcta con dos nodos pero falle cuando entra un tercero.

Reducir el problema suele ser la estrategia más eficaz.

Sistemas Distribuidos UOC y Java

Determinados planes y recursos históricos de esta asignatura han utilizado laboratorios y programación Java para prácticas distribuidas. La documentación del título también recoge un laboratorio de Java orientado a distribución y concurrencia.

Aun así, debes seguir siempre las instrucciones del semestre actual.

Herramientas, estructuras de práctica y requisitos pueden cambiar.

¿Qué conocimientos previos ayudan?

Sistemas Distribuidos combina conocimientos de otras áreas.

Resulta especialmente útil manejar:

programación,

redes,

sistemas operativos,

concurrencia,

estructuras de datos.

No necesitas dominar absolutamente todo antes de empezar.

Pero comprender estos fundamentos facilita mucho la asignatura.

Diferencia con Sistemas Distribuidos a Gran Escala

Es importante para SEO y también académicamente.

Sistemas Distribuidos UOC corresponde a la asignatura del Grado en Ingeniería Informática.

La UOC mantiene por separado Sistemas Distribuidos a Gran Escala dentro de estudios de máster, centrada específicamente en modelos y sistemas de gran escala.

No debemos mezclar ambas búsquedas en una misma página.

PAC y PEC Sistemas Distribuidos UOC

Algunos estudiantes buscarán:

PEC Sistemas Distribuidos UOC

y otros:

PAC Sistemas Distribuidos UOC.

No necesitamos crear dos artículos.

Esta página debe posicionar ambas variantes.

El objetivo de búsqueda es el mismo:

encontrar información y ayuda relacionada con las actividades de la asignatura.

Realización de PECs y PACs de Sistemas Distribuidos

En ResolverPECs.com realizamos tus PECs y PACs universitarias por ti.

En el caso de Sistemas Distribuidos, resulta especialmente importante revisar el enunciado completo, la teoría proporcionada, la arquitectura del protocolo y cualquier código inicial o entorno de prácticas antes de comenzar.

Cada actividad puede trabajar un problema distinto.

La clave para aprobar Sistemas Distribuidos

No intentes pensar en el sistema como si fuera un único programa.

Piensa nodo por nodo.

Mensaje por mensaje.

Estado por estado.

Pregúntate siempre:

qué sabe cada proceso

qué mensaje recibe

qué modifica

qué envía

qué ocurre si algo falla.

Cuando empiezas a razonar de esta forma, muchos problemas distribuidos dejan de parecer tan caóticos.

Antes de entregar una PEC

Comprueba que:

  • has respondido exactamente a cada pregunta;

  • no has supuesto información que el nodo no conoce;

  • el orden de mensajes es correcto;

  • has explicado las garantías de consistencia solicitadas;

  • el protocolo contempla los fallos indicados;

  • el código cumple la especificación;

  • las pruebas cubren varios escenarios;

  • la memoria y la implementación son coherentes.

En una práctica técnica, una pequeña incoherencia entre el protocolo descrito y lo que realmente hace el programa puede afectar bastante al resultado.

Sistemas Distribuidos UOC: comprender antes de programar

La principal dificultad de la asignatura no está únicamente en el código.

Está en comprender sistemas donde diferentes componentes avanzan de manera parcialmente independiente.

Una vez entiendes claramente:

comunicación + sincronización + consistencia + replicación + fallos

la implementación empieza a tener mucho más sentido.

Y esa es precisamente la estructura conceptual que recoge la propia documentación académica de Sistemas Distribuidos de la UOC.

En ResolverPECs.com realizamos tus PECs y PACs universitarias por ti.


Sistemas Distribuidos UOC

 
 
 

Comentarios


bottom of page