Aplicaciones Distribuidas: Diseño e Implementación en Sistemas Modernos
Creado por Antonio Q.
Cómo fue en el aula
Todavía nadie ha contado cómo le fue con este recurso.
Descripción del Curso
Este curso ofrece una introducción integral a las aplicaciones distribuidas, fundamentales en la ingeniería de sistemas modernos. Se exploran los principios, arquitecturas, tecnologías y desafíos asociados al diseño, desarrollo y despliegue de sistemas distribuidos que permiten la interacción y cooperación entre múltiples componentes en diferentes ubicaciones.
Dirigido a estudiantes universitarios de ingeniería interesados en profundizar en sistemas distribuidos, el curso combina teoría con práctica mediante estudios de caso, análisis de protocolos, y desarrollo de proyectos. Se enfatiza el aprendizaje activo mediante la implementación de aplicaciones reales distribuidas y el manejo de herramientas y frameworks relevantes.
Al finalizar, los estudiantes serán capaces de comprender las bases conceptuales, diseñar arquitecturas distribuidas robustas, manejar la comunicación y sincronización entre procesos distribuidos, y aplicar técnicas de tolerancia a fallos y escalabilidad para resolver problemas complejos en entornos distribuidos.
Objetivos Generales
- Describir los conceptos y componentes clave de las aplicaciones distribuidas y sus arquitecturas.
- Analizar protocolos y mecanismos de comunicación en sistemas distribuidos.
- Diseñar y desarrollar aplicaciones distribuidas utilizando tecnologías actuales.
- Evaluar y aplicar estrategias de tolerancia a fallos, sincronización y seguridad en entornos distribuidos.
- Integrar soluciones distribuidas en proyectos reales mediante trabajo colaborativo.
Competencias
- Analizar arquitecturas y protocolos fundamentales en aplicaciones distribuidas.
- Diseñar sistemas distribuidos que cumplan con requisitos de escalabilidad, disponibilidad y tolerancia a fallos.
- Implementar aplicaciones distribuidas utilizando tecnologías y frameworks modernos.
- Evaluar y optimizar el desempeño de sistemas distribuidos en diferentes escenarios.
- Gestionar la comunicación y sincronización entre procesos distribuidos de forma eficiente.
- Aplicar buenas prácticas de seguridad en el desarrollo de aplicaciones distribuidas.
Requerimientos
- Conocimientos básicos de programación en algún lenguaje orientado a objetos.
- Fundamentos de sistemas operativos y redes de computadoras.
- Comprensión básica de bases de datos y modelos de datos.
- Acceso a un entorno de desarrollo integrado (IDE) compatible con tecnologías distribuidas.
- Disponibilidad para trabajar en equipo y realizar proyectos prácticos.
Unidades del Curso
Introducción a las Aplicaciones Distribuidas
Conceptos básicos, evolución e importancia de las aplicaciones distribuidas en la ingeniería de sistemas.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de definir los conceptos básicos y la evolución de las aplicaciones distribuidas mediante la revisión de literatura académica y casos de estudio.
- Al finalizar la unidad, el estudiante será capaz de identificar y explicar los componentes clave de las aplicaciones distribuidas y sus arquitecturas en ejemplos prácticos.
- Al finalizar la unidad, el estudiante será capaz de analizar la importancia de las aplicaciones distribuidas en la ingeniería de sistemas mediante la comparación de sistemas centralizados y distribuidos.
- Al finalizar la unidad, el estudiante será capaz de describir las ventajas y desafíos asociados con el diseño de aplicaciones distribuidas, apoyándose en ejemplos actuales de la industria.
Contenidos Temáticos
1. Conceptos Básicos de Aplicaciones Distribuidas
- Definición de aplicaciones distribuidas: explicación de qué son, características principales y diferencias con aplicaciones centralizadas.
- Elementos fundamentales: nodos, comunicación, procesos, concurrencia, sincronización y transparencia.
- Terminología clave: cliente-servidor, middleware, protocolos de comunicación.
2. Evolución de las Aplicaciones Distribuidas
- Historia y contexto: desde sistemas centralizados a sistemas distribuidos.
- Hitos tecnológicos: desarrollo de redes, middleware, y paradigmas como SOA y microservicios.
- Revisión de literatura académica: análisis de artículos y casos de estudio relevantes que muestran la evolución y tendencias actuales.
3. Componentes Clave y Arquitecturas de Aplicaciones Distribuidas
- Componentes principales: clientes, servidores, bases de datos distribuidas, middleware y redes.
- Arquitecturas comunes:
- Arquitectura cliente-servidor
- Arquitectura de múltiples niveles (multitier)
- Arquitectura orientada a servicios (SOA)
- Arquitectura basada en microservicios
- Ejemplos prácticos: análisis de casos reales para ilustrar cada arquitectura.
4. Importancia y Comparación entre Sistemas Centralizados y Distribuidos
- Definición y características de sistemas centralizados.
- Ventajas y limitaciones de sistemas centralizados frente a sistemas distribuidos.
- Impacto de las aplicaciones distribuidas en la ingeniería de sistemas: escalabilidad, disponibilidad, tolerancia a fallos.
- Comparación detallada mediante ejemplos prácticos y estudios de caso.
5. Ventajas y Desafíos en el Diseño de Aplicaciones Distribuidas
- Ventajas principales: escalabilidad, flexibilidad, resiliencia, mantenimiento y despliegue.
- Desafíos y problemas comunes: sincronización, consistencia, seguridad, latencia y complejidad.
- Estudio de casos actuales en la industria: análisis de soluciones y estrategias para superar los retos.
- Buenas prácticas y recomendaciones de diseño.
Actividades
Actividad 1: Revisión Crítica de Literatura y Casos de Estudio
Objetivo: Definir los conceptos básicos y la evolución de las aplicaciones distribuidas mediante revisión bibliográfica y análisis de casos.
Descripción:
- Se asignará a los estudiantes una selección de artículos académicos y casos de estudio relacionados con aplicaciones distribuidas.
- Cada estudiante deberá leer y resumir los puntos clave: definición, evolución histórica y tecnologías involucradas.
- En clase, se realizará una discusión grupal para compartir y contrastar los hallazgos.
Organización: Individual y grupal (discusión)
Producto esperado: Resumen escrito y participación en discusión.
Duración estimada: 2 horas (1 hora lectura previa, 1 hora discusión)
Actividad 2: Análisis de Arquitecturas en Ejemplos Prácticos
Objetivo: Identificar y explicar componentes y arquitecturas de aplicaciones distribuidas a partir de casos prácticos.
Descripción:
- Se proporcionarán descripciones de sistemas distribuidos reales (por ejemplo, un sistema bancario, una plataforma de comercio electrónico, una aplicación de mensajería).
- En grupos, los estudiantes deberán identificar los componentes clave y la arquitectura utilizada, justificando sus respuestas.
- Presentarán sus conclusiones y debatirán con el resto del grupo.
Organización: Grupos de 3-4 estudiantes
Producto esperado: Informe grupal y presentación breve.
Duración estimada: 2 horas
Actividad 3: Comparación y Debate sobre Sistemas Centralizados vs Distribuidos
Objetivo: Analizar la importancia de las aplicaciones distribuidas comparando sistemas centralizados y distribuidos.
Descripción:
- Se dividirá a la clase en dos equipos, uno defensor de sistemas centralizados y otro de sistemas distribuidos.
- Cada equipo investigará ventajas y desventajas de su enfoque.
- Se realizará un debate estructurado donde cada equipo exponga argumentos y responda preguntas.
Organización: Grupos (equipos)
Producto esperado: Argumentos escritos y participación en debate.
Duración estimada: 1.5 horas
Actividad 4: Estudio de Casos Industriales: Ventajas y Desafíos
Objetivo: Describir ventajas y desafíos del diseño de aplicaciones distribuidas usando ejemplos actuales de la industria.
Descripción:
- Se entregarán a los estudiantes varios casos recientes (por ejemplo, sistemas en la nube, plataformas de streaming, aplicaciones IoT).
- En parejas, analizarán las ventajas y desafíos que enfrentan estos sistemas distribuidos.
- Deberán proponer posibles soluciones o mejores prácticas para superar los desafíos identificados.
- Se compartirá un resumen en clase para discutir las conclusiones.
Organización: Parejas
Producto esperado: Documento resumen y exposición breve.
Duración estimada: 2 horas
Evaluación
Evaluación Diagnóstica
Qué se evalúa: Conocimientos previos sobre aplicaciones distribuidas, sistemas centralizados y distribuidos.
Cómo se evalúa: Cuestionario breve con preguntas de opción múltiple y definición de conceptos clave.
Instrumento sugerido: Test en línea o en papel al inicio de la unidad.
Evaluación Formativa
Qué se evalúa: Progreso en la comprensión de conceptos, análisis crítico y aplicación práctica durante las actividades.
Cómo se evalúa: Revisión de resúmenes, informes de actividades, participación en debates y discusiones.
Instrumento sugerido: Rúbricas para evaluación de informes y observación participante durante actividades grupales.
Evaluación Sumativa
Qué se evalúa: Competencia integral para definir conceptos, identificar componentes, comparar sistemas y analizar ventajas y desafíos.
Cómo se evalúa: Examen escrito que incluya preguntas conceptuales, análisis de casos y desarrollo de respuestas argumentativas.
Instrumento sugerido: Examen parcial o final con preguntas de desarrollo, análisis y aplicación práctica.
Duración
La unidad "Introducción a las Aplicaciones Distribuidas" está diseñada para cubrirse en aproximadamente 10 horas de clase distribuidas en 2 semanas (5 horas por semana). La distribución sugerida es:
- Semana 1:
- 3 horas para explicación teórica de conceptos básicos y evolución.
- 2 horas para actividad 1 (revisión de literatura y discusión).
- Semana 2:
- 2 horas para explicación y análisis de arquitecturas.
- 2 horas para actividades 2 y 3 (análisis de ejemplos y debate).
- 1 hora para actividad 4 (estudio de casos industriales y discusión final).
Arquitecturas de Sistemas Distribuidos
Modelos arquitectónicos: cliente-servidor, peer-to-peer, n-capas, y microservicios.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de identificar y describir los modelos arquitectónicos cliente-servidor, peer-to-peer, n-capas y microservicios, explicando sus componentes y características principales.
- Al finalizar la unidad, el estudiante será capaz de comparar y contrastar las ventajas y desventajas de cada modelo arquitectónico en función de casos de uso específicos.
- Al finalizar la unidad, el estudiante será capaz de diseñar un esquema arquitectónico para una aplicación distribuida aplicando uno o más modelos estudiados, justificando su elección en base a requisitos funcionales y no funcionales.
- Al finalizar la unidad, el estudiante será capaz de analizar el impacto de las arquitecturas distribuidas en aspectos como escalabilidad, mantenimiento y tolerancia a fallos mediante ejemplos prácticos.
Contenidos Temáticos
1. Introducción a las Arquitecturas de Sistemas Distribuidos
- Definición y características principales de sistemas distribuidos.
- Importancia de la arquitectura en sistemas distribuidos.
- Aspectos clave: escalabilidad, mantenimiento, tolerancia a fallos.
2. Modelo Cliente-Servidor
- Concepto y estructura básica del modelo cliente-servidor.
- Componentes: clientes, servidores, y protocolos de comunicación.
- Tipos de servidores: servidores de archivos, de aplicaciones, y de bases de datos.
- Características principales: comunicación síncrona, centralización de recursos.
- Ventajas y desventajas.
- Ejemplos y casos de uso típicos.
3. Modelo Peer-to-Peer (P2P)
- Definición y estructura del modelo P2P.
- Componentes y roles equivalentes entre nodos.
- Topologías comunes: centralizado, descentralizado y híbrido.
- Características: distribución de recursos, escalabilidad, robustez.
- Ventajas y desventajas.
- Ejemplos y aplicaciones prácticas.
4. Arquitectura en N-Capas
- Concepto y justificación del modelo n-capas.
- Descripción de capas típicas: presentación, lógica de negocio, acceso a datos.
- Separación de responsabilidades y modularidad.
- Características y beneficios para el mantenimiento y escalabilidad.
- Ventajas y desventajas.
- Ejemplos de implementación y casos de uso.
5. Arquitectura basada en Microservicios
- Concepto y evolución hacia microservicios.
- Componentes: servicios independientes, APIs, mecanismos de comunicación (REST, mensajería).
- Características: autonomía, escalabilidad, despliegue independiente.
- Ventajas y desventajas frente a arquitecturas monolíticas.
- Patrones comunes y ejemplos de uso en la industria.
6. Comparación y Contraste de Modelos Arquitectónicos
- Análisis comparativo de cliente-servidor, P2P, n-capas y microservicios.
- Criterios de comparación: escalabilidad, mantenimiento, tolerancia a fallos, complejidad, seguridad.
- Relación con requisitos funcionales y no funcionales.
- Selección del modelo adecuado según casos de uso específicos.
7. Diseño de Esquemas Arquitectónicos para Aplicaciones Distribuidas
- Metodología para diseñar arquitecturas distribuidas.
- Análisis de requisitos funcionales y no funcionales.
- Justificación de la selección del modelo o combinación de modelos.
- Representación gráfica de esquemas arquitectónicos.
- Consideraciones para el despliegue y operación.
8. Impacto de las Arquitecturas Distribuidas en Escalabilidad, Mantenimiento y Tolerancia a Fallos
- Definición y medición de escalabilidad, mantenimiento y tolerancia a fallos.
- Análisis del impacto de cada modelo arquitectónico en estos aspectos.
- Estudio de casos prácticos y ejemplos reales.
- Estrategias para mejorar estos aspectos en arquitecturas distribuidas.
Actividades
Actividad 1: Análisis y Descripción de Modelos Arquitectónicos
Objetivo: Identificar y describir los modelos arquitectónicos cliente-servidor, peer-to-peer, n-capas y microservicios.
Descripción:
- Los estudiantes recibirán una breve descripción de un sistema distribuido específico.
- En parejas, identificarán qué modelo arquitectónico se aplica y describirán sus componentes y características principales.
- Prepararán una presentación corta para explicar su análisis al grupo.
Organización: Parejas
Producto esperado: Presentación y resumen escrito de la descripción del modelo aplicado.
Duración estimada: 1 hora
Actividad 2: Tabla Comparativa de Modelos Arquitectónicos
Objetivo: Comparar y contrastar ventajas y desventajas de cada modelo arquitectónico en función de casos de uso.
Descripción:
- En grupos pequeños, los estudiantes elaborarán una tabla comparativa que incluya criterios como escalabilidad, mantenimiento, tolerancia a fallos, complejidad y seguridad.
- Discutirán casos de uso específicos para cada modelo y justificarán las ventajas y desventajas en esos contextos.
- Compartirán la tabla y conclusiones con el resto de la clase.
Organización: Grupos de 3-4 estudiantes
Producto esperado: Tabla comparativa y exposición grupal.
Duración estimada: 1.5 horas
Actividad 3: Diseño de Esquema Arquitectónico para una Aplicación Distribuida
Objetivo: Diseñar un esquema arquitectónico aplicando uno o más modelos y justificar la elección.
Descripción:
- Se presentará un caso de estudio con requisitos funcionales y no funcionales para una aplicación distribuida.
- Individualmente, los estudiantes diseñarán un esquema arquitectónico, seleccionando el modelo o combinación de modelos adecuados.
- Deberán justificar su diseño en base a los requisitos dados y representar gráficamente la arquitectura.
- Se realizará una sesión de retroalimentación en clase donde se discutirán algunos diseños seleccionados.
Organización: Individual
Producto esperado: Documento con diseño arquitectónico, justificación y diagrama.
Duración estimada: 2 horas
Actividad 4: Análisis de Impacto de Arquitecturas en Escalabilidad, Mantenimiento y Tolerancia a Fallos
Objetivo: Analizar el impacto de las arquitecturas distribuidas en aspectos clave mediante ejemplos prácticos.
Descripción:
- En grupos, los estudiantes investigarán y presentarán un caso real donde se evidencie el impacto de una arquitectura distribuida en escalabilidad, mantenimiento o tolerancia a fallos.
- Prepararán un informe que detalle cómo el modelo arquitectónico contribuyó o dificultó dichos aspectos.
- Presentarán sus hallazgos en una sesión de discusión en clase.
Organización: Grupos de 3 estudiantes
Producto esperado: Informe escrito y presentación oral.
Duración estimada: 2 horas
Evaluación
Evaluación Diagnóstica
Qué se evalúa: Conocimientos previos sobre sistemas distribuidos y arquitecturas básicas.
Cómo se evalúa: Cuestionario breve de opción múltiple y preguntas abiertas.
Instrumento sugerido: Test en línea o en papel con 10 preguntas.
Evaluación Formativa
Qué se evalúa: Progreso en la comprensión y aplicación de modelos arquitectónicos durante las actividades.
Cómo se evalúa: Revisión y retroalimentación continua de actividades prácticas (análisis, tablas comparativas, diseños).
Instrumento sugerido: Rúbricas para presentación, análisis escritos y diagramas arquitectónicos.
Evaluación Sumativa
Qué se evalúa: Capacidad para identificar, comparar, diseñar y analizar arquitecturas distribuidas según los objetivos de la unidad.
Cómo se evalúa: Examen escrito con preguntas teóricas y prácticas, además de un proyecto final de diseño arquitectónico con justificación.
Instrumento sugerido: Examen parcial y entrega de proyecto con rúbrica detallada.
Duración
La unidad "Arquitecturas de Sistemas Distribuidos" está diseñada para impartirse en aproximadamente 8 horas de clase distribuidas en 2 semanas. Se recomienda dedicar:
- 2 horas para la introducción y explicación teórica de los modelos arquitectónicos.
- 3 horas para actividades prácticas en clase (análisis, comparación, diseño).
- 2 horas para presentaciones, discusión y análisis de casos.
- 1 hora para evaluación diagnóstica, formativa y sumativa.
Esta distribución permite un equilibrio entre teoría, práctica y evaluación, facilitando el logro de los objetivos de la unidad.
Comunicación en Sistemas Distribuidos
Protocolos, middleware, RPC, mensajería y mecanismos de comunicación síncrona y asíncrona.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de explicar los principios y características de los protocolos de comunicación en sistemas distribuidos, identificando sus ventajas y limitaciones.
- Al finalizar la unidad, el estudiante será capaz de analizar el funcionamiento del middleware y su papel en la comunicación entre componentes distribuidos, comparando diferentes tipos de middleware.
- Al finalizar la unidad, el estudiante será capaz de diseñar y desarrollar llamadas a procedimientos remotos (RPC) que implementen comunicación síncrona entre procesos distribuidos, evaluando su eficacia en distintos escenarios.
- Al finalizar la unidad, el estudiante será capaz de implementar mecanismos de mensajería asíncrona utilizando colas y brokers, demostrando comprensión de la comunicación desacoplada en sistemas distribuidos.
- Al finalizar la unidad, el estudiante será capaz de evaluar y seleccionar mecanismos de comunicación síncrona y asíncrona adecuados para resolver problemas específicos de interacción en aplicaciones distribuidas.
Contenidos Temáticos
1. Protocolos de Comunicación en Sistemas Distribuidos
- Conceptos Fundamentales de Protocolos: definición, funciones y necesidad en sistemas distribuidos.
- Principios de Comunicación: modelos de comunicación, formato de mensajes, sincronización y orden de mensajes.
- Protocolos Comunes: TCP/IP, UDP, HTTP, MQTT, AMQP y sus características.
- Ventajas y Limitaciones: análisis de confiabilidad, eficiencia, escalabilidad y costos de implementación.
- Casos de Uso: selección adecuada del protocolo según requerimientos del sistema distribuido.
2. Middleware en Sistemas Distribuidos
- Definición y Rol del Middleware: concepto, objetivos y beneficios en aplicaciones distribuidas.
- Tipos de Middleware: orientado a mensajes, orientado a objetos, orientado a servicios (SOA), y middleware orientado a eventos.
- Componentes y Arquitectura: brokers, adaptadores, servicios de naming, manejo de transacciones y seguridad.
- Comparación de Middleware: análisis de desempeño, escalabilidad, complejidad y casos de uso.
- Ejemplos Prácticos: CORBA, RMI, Message Queues, y Enterprise Service Bus (ESB).
3. Llamadas a Procedimientos Remotos (RPC) y Comunicación Síncrona
- Conceptos de RPC: definición, arquitectura y funcionamiento básico.
- Diseño de RPC: definición de interfaz, serialización, binding y mecanismos de transporte.
- Implementación de RPC: desarrollo de llamadas síncronas entre procesos distribuidos usando frameworks o librerías.
- Evaluación de Eficacia: análisis de latencia, confiabilidad, y escalabilidad en diferentes escenarios.
- Limitaciones y Alternativas: problemas comunes, manejo de errores y comparación con otros mecanismos.
4. Mecanismos de Mensajería Asíncrona: Colas y Brokers
- Principios de Comunicación Asíncrona: desacoplamiento temporal y espacial, ventajas y desafíos.
- Colas de Mensajes: funcionamiento, características y modelos (FIFO, prioridades).
- Brokers de Mensajes: definición, arquitectura, ejemplos (RabbitMQ, Kafka, ActiveMQ).
- Implementación Práctica: configuración, envío y recepción de mensajes.
- Ventajas de la Mensajería Asíncrona: tolerancia a fallos, escalabilidad y flexibilidad en sistemas distribuidos.
5. Selección y Evaluación de Mecanismos de Comunicación
- Criterios de Selección: latencia, rendimiento, confiabilidad, escalabilidad, complejidad y costos.
- Análisis Comparativo: comunicación síncrona vs asíncrona en distintos tipos de aplicaciones distribuidas.
- Casos Prácticos: evaluación de mecanismos para resolver problemas específicos (ej. sistemas bancarios, IoT, microservicios).
- Buenas Prácticas: integración, monitoreo y optimización de mecanismos de comunicación.
- Herramientas y Técnicas de Evaluación: métricas, pruebas de rendimiento y simulaciones.
Actividades
Actividad 1: Análisis Comparativo de Protocolos de Comunicación
Objetivo: Explicar los principios y características de los protocolos de comunicación en sistemas distribuidos, identificando sus ventajas y limitaciones.
Descripción:
- Formar grupos de 3-4 estudiantes.
- Asignar a cada grupo uno o dos protocolos (TCP/IP, UDP, MQTT, AMQP, HTTP).
- Investigar y elaborar una tabla comparativa que incluya características, ventajas, limitaciones y casos de uso.
- Presentar los resultados al resto de la clase en una exposición de 10 minutos.
- Discutir en plenaria las diferencias y similitudes entre los protocolos estudiados.
Organización: grupos
Producto esperado: tabla comparativa y presentación grupal.
Duración estimada: 2 horas (1.5 horas para investigación y preparación, 0.5 horas para presentaciones).
Actividad 2: Diseño y Desarrollo de una Aplicación con RPC
Objetivo: Diseñar y desarrollar llamadas a procedimientos remotos (RPC) que implementen comunicación síncrona entre procesos distribuidos, evaluando su eficacia.
Descripción:
- Individualmente o en parejas, diseñar una aplicación sencilla distribuida que utilice RPC para invocar servicios remotos.
- Definir la interfaz RPC usando una herramienta o lenguaje elegido (por ejemplo, gRPC o Java RMI).
- Implementar el cliente y servidor RPC, y probar la comunicación.
- Medir y documentar tiempos de respuesta y posibles fallos.
- Entregar el código fuente junto con un informe que evalúe la eficacia y limitaciones del enfoque.
Organización: individual o parejas
Producto esperado: código funcional y reporte técnico.
Duración estimada: 4 horas.
Actividad 3: Implementación de Mensajería Asíncrona con Brokers
Objetivo: Implementar mecanismos de mensajería asíncrona utilizando colas y brokers, demostrando comprensión de la comunicación desacoplada.
Descripción:
- En grupos de 3 estudiantes, configurar un broker de mensajes (por ejemplo, RabbitMQ o Apache Kafka) en un entorno local o en la nube.
- Desarrollar un productor y un consumidor de mensajes para enviar y recibir información asíncrona.
- Implementar al menos un escenario de prueba donde los mensajes se almacenen en cola y se procesen sincrónicamente.
- Documentar el proceso, describiendo ventajas observadas y posibles limitaciones.
Organización: grupos
Producto esperado: aplicación funcional, configuración del broker y documentación.
Duración estimada: 5 horas.
Actividad 4: Caso Práctico de Selección de Mecanismos de Comunicación
Objetivo: Evaluar y seleccionar mecanismos de comunicación síncrona y asíncrona adecuados para resolver problemas específicos en aplicaciones distribuidas.
Descripción:
- Presentar varios escenarios de sistemas distribuidos (ejemplo: sistema bancario, plataforma IoT, sistema de microservicios).
- Individualmente, analizar cada escenario y seleccionar el mecanismo de comunicación más adecuado justificando la elección.
- Elaborar un informe que contenga la comparación y justificación basada en criterios técnicos y prácticos.
- Discusión en clase para contrastar diferentes soluciones y conclusiones.
Organización: individual
Producto esperado: informe de análisis y justificación.
Duración estimada: 2 horas.
Evaluación
Evaluación Diagnóstica
Qué se evalúa: conocimientos previos sobre protocolos, middleware y mecanismos de comunicación en sistemas distribuidos.
Cómo se evalúa: cuestionario escrito o en línea con preguntas de opción múltiple y cortas.
Instrumento sugerido: Test diagnóstico inicial al inicio de la unidad (20 preguntas).
Evaluación Formativa
Qué se evalúa: progresos en comprensión y aplicación de conceptos a través de actividades prácticas.
Cómo se evalúa: revisión y retroalimentación de las actividades (tablas comparativas, desarrollos de RPC, implementaciones de mensajería, análisis de casos).
Instrumento sugerido: rúbricas para evaluar calidad técnica, claridad y profundidad en los productos de actividades.
Evaluación Sumativa
Qué se evalúa: dominio integral de los objetivos: explicación de protocolos, análisis de middleware, desarrollo de RPC, implementación de mensajería y selección crítica de mecanismos.
Cómo se evalúa: examen escrito que incluya preguntas conceptuales y ejercicios prácticos, además de un proyecto final integrador.
Instrumento sugerido: examen final (preguntas abiertas y casos prácticos) y entrega de proyecto integrador con presentación oral.
Duración
La unidad "Comunicación en Sistemas Distribuidos" está diseñada para desarrollarse en un total de 3 semanas, con una dedicación aproximada de 6 horas semanales, sumando 18 horas en total. Se distribuye de la siguiente manera:
- Semana 1 (6 horas): Introducción y estudio de protocolos de comunicación y middleware. Incluye la actividad de análisis comparativo de protocolos.
- Semana 2 (6 horas): Diseño e implementación de RPC y comunicación síncrona. Desarrollo y evaluación de la aplicación RPC.
- Semana 3 (6 horas): Mensajería asíncrona y evaluación de mecanismos de comunicación. Implementación práctica con brokers y análisis de casos para selección de mecanismos.
Se recomienda distribuir las horas entre clases magistrales, sesiones prácticas en laboratorio, trabajo colaborativo y asesorías.
Sincronización y Coordinación
Mecanismos para sincronización de procesos, exclusión mutua, relojes lógicos y algoritmos de consenso.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de explicar los mecanismos fundamentales de sincronización de procesos en sistemas distribuidos, identificando sus aplicaciones y limitaciones.
- Al finalizar la unidad, el estudiante será capaz de implementar algoritmos de exclusión mutua para garantizar el acceso exclusivo a recursos compartidos en entornos distribuidos, evaluando su eficiencia y escalabilidad.
- Al finalizar la unidad, el estudiante será capaz de analizar y aplicar relojes lógicos para ordenar eventos en sistemas distribuidos, utilizando técnicas como los relojes de Lamport y vectores.
- Al finalizar la unidad, el estudiante será capaz de diseñar y evaluar algoritmos de consenso que aseguren la coordinación entre procesos en presencia de fallos, justificando su elección según el contexto del sistema.
Contenidos Temáticos
1. Introducción a la sincronización y coordinación en sistemas distribuidos
- Conceptos básicos de sistemas distribuidos y la necesidad de sincronización.
- Desafíos específicos: ausencia de memoria compartida, latencia, fallos y concurrencia.
- Importancia de la coordinación para mantener la consistencia y evitar condiciones de carrera.
2. Mecanismos fundamentales de sincronización de procesos
- Definición y objetivos de la sincronización en sistemas distribuidos.
- Sincronización basada en bloqueo y señales: semáforos, monitores y variables condicionales.
- Limitaciones y problemas comunes: inanición, bloqueo mutuo (deadlock), bloqueo vivaz (livelock).
- Sincronización basada en mensajes: protocolos de sincronización y coordinación.
3. Algoritmos de exclusión mutua en entornos distribuidos
- Concepto y necesidad de exclusión mutua para acceso a recursos compartidos.
- Algoritmo de exclusión mutua centralizado:
- Funcionamiento y análisis de eficiencia.
- Ventajas y desventajas.
- Algoritmo de exclusión mutua distribuido:
- Algoritmo de Ricart-Agrawala.
- Algoritmo de token ring.
- Comparación de eficiencia, escalabilidad y tolerancia a fallos.
- Manejo de fallos y recuperación en exclusión mutua distribuida.
4. Relojes lógicos para ordenamiento de eventos
- Problema del ordenamiento de eventos en sistemas distribuidos.
- Relojes de Lamport:
- Concepto y reglas para actualización del reloj.
- Relación de causalidad y la relación "happened-before".
- Limitaciones para el orden total.
- Relojes vectoriales:
- Definición y mantenimiento del vector de relojes.
- Detección de concurrencia y causalidad con vectores.
- Comparación con relojes de Lamport.
- Aplicaciones prácticas de relojes lógicos en sistemas distribuidos.
5. Algoritmos de consenso en sistemas distribuidos
- Concepto y importancia del consenso para coordinación y confiabilidad.
- Modelos de fallos: fallos bizantinos, fallos de crash y fallos arbitrarios.
- Algoritmos clásicos de consenso:
- Algoritmo de consenso de Paxos:
- Roles: Proponente, Aceptante y Aprendiz.
- Fases del algoritmo y garantías.
- Limitaciones y complejidad.
- Algoritmo Raft:
- Roles y funcionamiento.
- Ventajas en comprensión y uso práctico.
- Algoritmo de consenso de Paxos:
- Evaluación y selección de algoritmos de consenso según contexto y requisitos del sistema.
6. Casos prácticos y aplicaciones reales
- Ejemplos de sistemas distribuidos que utilizan sincronización y consenso (bases de datos distribuidas, sistemas de archivos, blockchain).
- Análisis de escenarios y toma de decisiones en diseño e implementación.
Actividades
Actividad 1: Análisis comparativo de algoritmos de exclusión mutua
Objetivo: Implementar y evaluar algoritmos de exclusión mutua para acceso exclusivo a recursos compartidos, analizando eficiencia y escalabilidad.
Descripción paso a paso:
- Dividir a los estudiantes en grupos pequeños (3-4 integrantes).
- Asignar a cada grupo un algoritmo de exclusión mutua (centralizado, Ricart-Agrawala, token ring).
- Implementar el algoritmo en un entorno simulado o usando un lenguaje de programación adecuado (por ejemplo, Java, Python).
- Diseñar pruebas para medir la latencia, el número de mensajes y la escalabilidad con diferentes números de procesos.
- Presentar un informe comparativo que incluya resultados, análisis y conclusiones.
Organización: Grupos
Producto esperado: Código fuente funcional, resultados de pruebas, informe escrito y presentación breve.
Duración estimada: 2 semanas
Actividad 2: Implementación y simulación de relojes lógicos
Objetivo: Analizar y aplicar relojes lógicos para ordenar eventos, utilizando relojes de Lamport y vectoriales.
Descripción paso a paso:
- Individualmente, desarrollar un programa que simule un sistema distribuido con múltiples procesos.
- Implementar relojes de Lamport para asignar marcas temporales a eventos.
- Extender la implementación para incorporar relojes vectoriales.
- Demostrar, con ejemplos, la diferencia en el ordenamiento de eventos y la detección de concurrencia.
- Reflexionar sobre las ventajas y limitaciones de cada tipo de reloj.
Organización: Individual
Producto esperado: Código fuente comentado, archivo con ejemplos de ejecución y análisis escrito.
Duración estimada: 1 semana
Actividad 3: Diseño y simulación de un algoritmo de consenso
Objetivo: Diseñar y evaluar un algoritmo de consenso que asegure coordinación entre procesos en presencia de fallos.
Descripción paso a paso:
- En grupos, seleccionar un algoritmo de consenso (Paxos o Raft).
- Estudiar su funcionamiento detallado y diseñar una simulación que muestre la coordinación entre procesos y manejo de fallos (simulación de crash o mensajes perdidos).
- Implementar la simulación en una plataforma o lenguaje de programación adecuado.
- Analizar el comportamiento, tiempo de consenso y resiliencia en diferentes escenarios.
- Presentar un informe técnico con resultados y recomendaciones sobre la elección del algoritmo según el contexto.
Organización: Grupos
Producto esperado: Simulación funcional, informe técnico y presentación oral.
Duración estimada: 2 semanas
Actividad 4: Estudio de caso y debate sobre sincronización y coordinación
Objetivo: Explicar mecanismos fundamentales de sincronización y su aplicación en sistemas reales, identificando limitaciones y soluciones.
Descripción paso a paso:
- Individualmente, investigar un sistema distribuido real (por ejemplo, sistema de archivos distribuido, blockchain, base de datos distribuida) y cómo se implementa la sincronización y coordinación.
- Preparar un resumen que describa los mecanismos usados, sus ventajas y limitaciones.
- En clase, formar grupos para discutir los distintos casos y sus desafíos.
- Realizar un debate estructurado sobre las mejores prácticas y posibles mejoras.
Organización: Individual y grupos
Producto esperado: Resumen escrito y participación activa en el debate.
Duración estimada: 3 sesiones de clase (3 horas)
Evaluación
Evaluación diagnóstica
Qué se evalúa: Conocimientos previos sobre conceptos básicos de sincronización, exclusión mutua, relojes lógicos y consenso en sistemas distribuidos.
Cómo se evalúa: Cuestionario de opción múltiple y preguntas cortas.
Instrumento sugerido: Prueba diagnóstica en línea o impresa al inicio de la unidad.
Evaluación formativa
Qué se evalúa: Progreso en la comprensión y aplicación de algoritmos de exclusión mutua, relojes lógicos y consenso a través de actividades prácticas y discusiones.
- Revisión de códigos y simulaciones entregadas.
- Retroalimentación continua durante talleres y debates.
- Autoevaluación y coevaluación en actividades grupales.
Instrumento sugerido: Rúbricas para proyectos y participación en clase, informes parciales y feedback escrito.
Evaluación sumativa
Qué se evalúa: Capacidad integral para explicar, implementar y evaluar mecanismos de sincronización, exclusión mutua, relojes lógicos y algoritmos de consenso.
- Examen escrito que combine preguntas teóricas y problemas prácticos.
- Entrega final de proyectos de implementación y simulación con informe técnico.
- Presentación oral grupal defendiendo la elección y análisis de algoritmos.
Instrumento sugerido: Examen formal, rúbricas de proyecto y presentación.
Duración
La unidad "Sincronización y Coordinación" se sugiere impartir en un periodo de 5 semanas, con una dedicación aproximada de 4 horas por semana distribuidas en sesiones teóricas y prácticas. La distribución podría ser:
- Semana 1: Introducción y mecanismos fundamentales de sincronización (4 horas).
- Semana 2: Algoritmos de exclusión mutua y actividad práctica 1 (4 horas).
- Semana 3: Relojes lógicos y actividad práctica 2 (4 horas).
- Semana 4: Algoritmos de consenso y actividad práctica 3 (4 horas).
- Semana 5: Estudio de caso, debate, repaso y evaluación sumativa (4 horas).
Esta distribución permite integrar teoría, práctica y análisis crítico, asegurando el logro de los objetivos de la unidad.
Tolerancia a Fallos y Disponibilidad
Redundancia, replicación, detección y recuperación de fallos en sistemas distribuidos.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de explicar los conceptos de redundancia y replicación en sistemas distribuidos, identificando sus roles en la tolerancia a fallos.
- Al finalizar la unidad, el estudiante será capaz de analizar diferentes mecanismos de detección y recuperación de fallos, evaluando su efectividad en la mejora de la disponibilidad del sistema.
- Al finalizar la unidad, el estudiante será capaz de diseñar estrategias de replicación y recuperación para garantizar la alta disponibilidad en aplicaciones distribuidas, aplicando principios teóricos a casos prácticos.
- Al finalizar la unidad, el estudiante será capaz de evaluar protocolos y técnicas de tolerancia a fallos en entornos distribuidos, justificando la selección adecuada según los requisitos del sistema.
Contenidos Temáticos
1. Introducción a la Tolerancia a Fallos en Sistemas Distribuidos
- Definición y relevancia de la tolerancia a fallos en aplicaciones distribuidas.
- Conceptos clave: fallo, error, y falla.
- Impacto de los fallos en la disponibilidad y confiabilidad del sistema.
- Modelos de fallos en sistemas distribuidos (crash, omission, timing, Byzantine).
2. Redundancia y Replicación
- Definición y diferencias entre redundancia y replicación.
- Tipos de redundancia: hardware, software, información.
- Replicación de datos y servicios: motivos y objetivos.
- Modelos de replicación:
- Replicación activa (primario-esclavo, primario-primario).
- Replicación pasiva.
- Consistencia en sistemas replicados: modelos y desafíos (consistencia fuerte, eventual, causal).
- Rol de la redundancia y replicación en la tolerancia a fallos.
3. Mecanismos de Detección de Fallos
- Importancia de la detección temprana de fallos para la disponibilidad.
- Mecanismos básicos de detección:
- Timeouts y heartbeats.
- Chequeos de latido y monitoreo activo.
- Protocolos de consenso para detección.
- Limitaciones y problemas en la detección de fallos (falsos positivos y negativos).
4. Mecanismos de Recuperación de Fallos
- Estrategias de recuperación: reinicio, recuperación a partir de checkpoints, rollback y rollforward.
- Recuperación en sistemas replicados: failover y failback.
- Protocolos de recuperación coordinada y no coordinada.
- Recuperación en presencia de fallos bizantinos.
5. Diseño de Estrategias de Replicación y Recuperación para Alta Disponibilidad
- Principios para diseñar sistemas altamente disponibles.
- Selección de estrategias de replicación según requisitos del sistema (latencia, consistencia, carga).
- Diseño de planes de recuperación y failover automáticos.
- Balance entre costos y beneficios de replicación y recuperación.
- Estudio de casos prácticos y arquitecturas reales (por ejemplo, bases de datos distribuidas, servicios web).
6. Evaluación y Selección de Protocolos y Técnicas de Tolerancia a Fallos
- Criterios para evaluar protocolos de tolerancia a fallos (rendimiento, escalabilidad, complejidad, robustez).
- Análisis comparativo de protocolos comunes (Paxos, Raft, Zab, etc.).
- Justificación de selección de técnicas según escenarios y requisitos específicos.
- Consideraciones prácticas en la implementación y operación.
Actividades
Actividad 1: Análisis de Casos de Fallos y Replicación en Sistemas Reales
Objetivo: Explicar los conceptos de redundancia y replicación en sistemas distribuidos y su papel en la tolerancia a fallos.
Descripción:
- Se presentan varios casos reales de fallos en sistemas distribuidos (por ejemplo, caídas de servicios en plataformas conocidas).
- Los estudiantes investigan y describen qué tipo de redundancia o replicación se utilizó o podría haberse utilizado para mitigar el fallo.
- Discusión grupal para identificar fortalezas y debilidades de las estrategias aplicadas.
Organización: Grupos de 3-4 estudiantes.
Producto esperado: Informe escrito y presentación breve con análisis de casos y sugerencias.
Duración estimada: 2 horas.
Actividad 2: Simulación de Detección y Recuperación de Fallos
Objetivo: Analizar mecanismos de detección y recuperación de fallos y evaluar su efectividad en la mejora de la disponibilidad.
Descripción:
- Se proporciona a los estudiantes un entorno simulado (puede ser un software o un conjunto de scripts) que modela un sistema distribuido con nodos y posibles fallos.
- Los estudiantes implementan y prueban diferentes mecanismos de detección (heartbeats, timeouts) y recuperación (failover, rollback) sobre el simulador.
- Se evalúa el comportamiento del sistema ante fallos inducidos y se registra el tiempo de recuperación y disponibilidad.
Organización: Parejas o grupos pequeños.
Producto esperado: Informe técnico con resultados, análisis comparativo y recomendaciones.
Duración estimada: 3 horas.
Actividad 3: Diseño de Estrategias de Replicación y Recuperación para un Caso Práctico
Objetivo: Diseñar estrategias de replicación y recuperación para garantizar alta disponibilidad aplicando principios teóricos a casos prácticos.
Descripción:
- Se presenta un escenario de aplicación distribuida (por ejemplo, un sistema de comercio electrónico con alta demanda).
- Los estudiantes elaboran un diseño detallado que incluya la estrategia de replicación, mecanismos de detección y recuperación, y justificación técnica.
- Se debe considerar aspectos como consistencia, latencia y costo.
Organización: Grupos de 3-4 estudiantes.
Producto esperado: Documento de diseño con diagramas, explicación y justificación.
Duración estimada: 3 horas.
Actividad 4: Debate y Evaluación de Protocolos de Tolerancia a Fallos
Objetivo: Evaluar protocolos y técnicas de tolerancia a fallos justificando la selección adecuada según requisitos del sistema.
Descripción:
- Se asignan diferentes protocolos de tolerancia a fallos (Paxos, Raft, Zab, etc.) a grupos de estudiantes.
- Cada grupo estudia su protocolo, identificando ventajas, limitaciones y escenarios de uso ideales.
- Organización de un debate donde cada grupo defiende su protocolo frente a un escenario dado.
- Discusión final con retroalimentación del docente sobre la selección y justificación.
Organización: Grupos pequeños y plenaria.
Producto esperado: Presentación oral y resumen escrito.
Duración estimada: 2 horas.
Evaluación
Evaluación Diagnóstica
Qué se evalúa: Conocimientos previos sobre conceptos básicos de fallos, redundancia y replicación en sistemas distribuidos.
Cómo se evalúa: Cuestionario de opción múltiple y preguntas abiertas al inicio de la unidad.
Instrumento sugerido: Test en línea o impreso con 10 preguntas breves.
Evaluación Formativa
Qué se evalúa: Progreso en la comprensión y aplicación de mecanismos de detección y recuperación de fallos, diseño de estrategias y análisis de protocolos.
Cómo se evalúa: Revisión continua de actividades prácticas, participación en debates, retroalimentación sobre informes y diseños.
Instrumento sugerido: Rúbricas para informes y presentaciones, listas de cotejo para participación y desempeño en simulaciones.
Evaluación Sumativa
Qué se evalúa: Dominio integral de los objetivos de la unidad: explicación, análisis, diseño y evaluación de estrategias y protocolos de tolerancia a fallos.
Cómo se evalúa: Examen escrito teórico-práctico y entrega de un proyecto final que incluya diseño y justificación de estrategias de tolerancia a fallos para un sistema distribuido propuesto.
Instrumento sugerido: Examen de desarrollo con casos prácticos y rúbrica para evaluación del proyecto final.
Duración
La unidad "Tolerancia a Fallos y Disponibilidad" está diseñada para ser impartida en 3 semanas, con una dedicación aproximada de 6 horas por semana, distribuidas de la siguiente manera:
- Semana 1 (6 horas): Introducción, redundancia y replicación, evaluación diagnóstica y actividad 1.
- Semana 2 (6 horas): Mecanismos de detección y recuperación, actividad 2 y 3, evaluación formativa continua.
- Semana 3 (6 horas): Evaluación y selección de protocolos, debate (actividad 4), revisión y evaluación sumativa.
Esta distribución permite combinar la teoría con actividades prácticas y evaluaciones para un aprendizaje profundo y aplicado.
Seguridad en Aplicaciones Distribuidas
Principios y técnicas de seguridad, autenticación, autorización y cifrado en entornos distribuidos.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de explicar los principios fundamentales de seguridad en aplicaciones distribuidas, identificando amenazas y vulnerabilidades comunes en entornos distribuidos.
- Al finalizar la unidad, el estudiante será capaz de analizar y comparar diferentes métodos de autenticación y autorización aplicados en sistemas distribuidos para garantizar el acceso seguro.
- Al finalizar la unidad, el estudiante será capaz de aplicar técnicas de cifrado simétrico y asimétrico para proteger la integridad y confidencialidad de la información en aplicaciones distribuidas.
- Al finalizar la unidad, el estudiante será capaz de diseñar mecanismos de seguridad que integren autenticación, autorización y cifrado en una aplicación distribuida, evaluando su efectividad ante posibles ataques.
- Al finalizar la unidad, el estudiante será capaz de evaluar y seleccionar protocolos de seguridad adecuados para distintas arquitecturas distribuidas, justificando su elección en función del contexto y requisitos del sistema.
Contenidos Temáticos
1. Introducción a la seguridad en aplicaciones distribuidas
- Definición y relevancia de la seguridad en sistemas distribuidos
- Características y retos específicos de seguridad en entornos distribuidos
- Principios fundamentales de la seguridad informática aplicados a sistemas distribuidos: confidencialidad, integridad, disponibilidad, autenticidad y no repudio
2. Amenazas y vulnerabilidades en aplicaciones distribuidas
- Tipos de amenazas comunes: ataques de red (man-in-the-middle, replay, DDoS), inyección, escalamiento de privilegios
- Vulnerabilidades típicas en aplicaciones distribuidas: fallos en comunicación, gestión de sesiones, falta de cifrado, errores de configuración
- Modelos de ataque y vectores de compromiso en sistemas distribuidos
- Herramientas y técnicas para la identificación de vulnerabilidades
3. Autenticación y autorización en sistemas distribuidos
- Conceptos básicos: autenticación vs autorización
- Métodos de autenticación:
- Autenticación basada en contraseña
- Autenticación multifactor (MFA)
- Autenticación basada en certificados digitales
- Autenticación federada y SSO (Single Sign-On)
- Protocols de autenticación: OAuth, OpenID Connect, Kerberos
- Mecanismos de autorización:
- Control de acceso basado en roles (RBAC)
- Control de acceso basado en atributos (ABAC)
- Listas de control de acceso (ACL)
- Políticas y modelos de autorización distribuidos
- Comparación y análisis de métodos de autenticación y autorización para entornos distribuidos
4. Técnicas de cifrado para la seguridad en aplicaciones distribuidas
- Fundamentos de criptografía: conceptos, objetivos y terminología
- Cifrado simétrico:
- Algoritmos comunes: AES, DES, 3DES
- Modos de operación y gestión de claves
- Aplicaciones prácticas en sistemas distribuidos
- Cifrado asimétrico:
- Algoritmos comunes: RSA, ECC
- Firmas digitales y certificados digitales
- Intercambio de claves y establecimiento de canales seguros (TLS/SSL)
- Integridad y autenticidad: funciones hash, HMAC
- Consideraciones para la implementación segura de cifrado en aplicaciones distribuidas
5. Diseño de mecanismos integrados de seguridad en aplicaciones distribuidas
- Integración de autenticación, autorización y cifrado en un sistema distribuido
- Arquitecturas seguras: diseño de capas y separación de responsabilidades
- Análisis de casos prácticos y patrones de diseño de seguridad
- Evaluación de efectividad ante posibles ataques y mitigación de riesgos
- Buenas prácticas en el desarrollo seguro de aplicaciones distribuidas
6. Protocolos y estándares de seguridad en entornos distribuidos
- Protocolo SSL/TLS: características y aplicaciones
- Protocolo IPSec y VPNs para comunicaciones seguras
- Protocolos de autenticación federada y delegada (SAML, OAuth 2.0, OpenID Connect)
- Protocolos para servicios web seguros (WS-Security, HTTPS)
- Criterios para la selección de protocolos según arquitectura y requisitos
- Evaluación comparativa y justificación de la elección de protocolos de seguridad
Actividades
Actividad 1: Análisis de amenazas y vulnerabilidades en un sistema distribuido real
Objetivo: Explicar principios fundamentales de seguridad e identificar amenazas y vulnerabilidades comunes (Objetivo 1)
Descripción:
- Se asignará a los estudiantes un sistema distribuido real o simulado (por ejemplo, una aplicación cliente-servidor o un servicio web distribuido).
- Los estudiantes deberán investigar y listar posibles amenazas y vulnerabilidades específicas de ese sistema.
- Deberán justificar cada amenaza/vulnerabilidad con base en las características del sistema.
- Finalmente, presentarán sus hallazgos en un informe o presentación.
Organización: Grupos de 3 a 4 estudiantes
Producto esperado: Informe o presentación detallada de amenazas y vulnerabilidades identificadas
Duración estimada: 2 sesiones de clase (4 horas)
Actividad 2: Comparación práctica de métodos de autenticación y autorización
Objetivo: Analizar y comparar métodos de autenticación y autorización en sistemas distribuidos (Objetivo 2)
Descripción:
- Se proporcionarán casos de uso con diferentes requerimientos de seguridad.
- Los estudiantes investigarán y propondrán métodos de autenticación y autorización adecuados para cada caso.
- Deberán comparar ventajas, desventajas y posibles riesgos de cada método.
- El resultado será un cuadro comparativo y una justificación escrita.
Organización: Parejas
Producto esperado: Tabla comparativa y documento justificativo
Duración estimada: 1 sesión de clase (2 horas)
Actividad 3: Implementación práctica de cifrado simétrico y asimétrico
Objetivo: Aplicar técnicas de cifrado para proteger información en aplicaciones distribuidas (Objetivo 3)
Descripción:
- Los estudiantes desarrollarán un pequeño prototipo en el que implementen cifrado simétrico para comunicación entre nodos y cifrado asimétrico para intercambio seguro de claves.
- Se les proporcionará un entorno de desarrollo y bibliotecas criptográficas básicas.
- Deberán documentar su código y explicar el flujo de cifrado y descifrado.
Organización: Individual
Producto esperado: Código fuente funcional y documentación técnica
Duración estimada: 2 sesiones de clase (4 horas) + trabajo autónomo
Actividad 4: Diseño y evaluación de un mecanismo integrado de seguridad
Objetivo: Diseñar mecanismos que integren autenticación, autorización y cifrado, evaluando su efectividad ante ataques (Objetivos 4 y 5)
Descripción:
- En grupos, los estudiantes diseñarán un esquema completo de seguridad para una aplicación distribuida dada, incorporando métodos de autenticación, autorización y cifrado.
- Deberán identificar posibles ataques y describir cómo su diseño los mitiga.
- Prepararán una presentación con el diseño, análisis de seguridad y justificación de protocolos y técnicas elegidas.
Organización: Grupos de 4 estudiantes
Producto esperado: Documento de diseño y presentación oral
Duración estimada: 3 sesiones de clase (6 horas)
Evaluación
Evaluación diagnóstica
Qué se evalúa: Conocimientos previos sobre principios básicos de seguridad y experiencia con sistemas distribuidos.
Cómo se evalúa: Cuestionario breve con preguntas teóricas y de análisis situacional.
Instrumento sugerido: Test en línea o impreso con preguntas de opción múltiple y respuesta corta.
Evaluación formativa
Qué se evalúa: Progreso en la comprensión de amenazas, métodos de autenticación/autorización, cifrado y diseño integrado de seguridad.
Cómo se evalúa: Revisión y retroalimentación continua de actividades prácticas (informes, código, presentaciones).
Instrumento sugerido: Rúbricas para evaluación de informes, código y presentaciones; sesiones de retroalimentación en clase.
Evaluación sumativa
Qué se evalúa: Dominio integral de los objetivos de la unidad, capacidad para diseñar y justificar mecanismos de seguridad en aplicaciones distribuidas.
Cómo se evalúa: Examen teórico-práctico que incluye análisis de casos, preguntas teóricas, diseño de esquemas de seguridad y resolución de problemas.
Instrumento sugerido: Examen escrito con preguntas abiertas y ejercicios prácticos; evaluación de proyecto final de diseño de seguridad.
Duración
La unidad está diseñada para desarrollarse en 4 semanas con una dedicación total aproximada de 24 horas distribuidas de la siguiente manera: 6 horas para la introducción y estudio de conceptos teóricos; 8 horas para actividades prácticas y talleres de implementación; 6 horas para el diseño integrado y evaluación de mecanismos de seguridad; y 4 horas para evaluaciones y retroalimentación.
Tecnologías y Herramientas para Aplicaciones Distribuidas
Frameworks, plataformas y servicios populares: REST, SOAP, gRPC, Docker, Kubernetes.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de describir las características y diferencias fundamentales entre los protocolos REST, SOAP y gRPC, identificando sus usos adecuados en aplicaciones distribuidas.
- Al finalizar la unidad, el estudiante será capaz de implementar servicios web utilizando frameworks basados en REST y gRPC, aplicando buenas prácticas de diseño e integración.
- Al finalizar la unidad, el estudiante será capaz de configurar y desplegar contenedores con Docker para aplicaciones distribuidas, asegurando portabilidad y consistencia en entornos de desarrollo y producción.
- Al finalizar la unidad, el estudiante será capaz de diseñar y administrar clústeres de Kubernetes para orquestar aplicaciones distribuidas, evaluando estrategias de escalabilidad y tolerancia a fallos.
- Al finalizar la unidad, el estudiante será capaz de analizar y seleccionar tecnologías y herramientas adecuadas para integrar soluciones distribuidas en proyectos colaborativos, fundamentando sus decisiones en criterios técnicos y de desempeño.
Contenidos Temáticos
1. Protocolos para Servicios Web en Aplicaciones Distribuidas
- Introducción a los protocolos de comunicación: Conceptos básicos de comunicación en aplicaciones distribuidas, importancia de los protocolos para la interoperabilidad y escalabilidad.
- REST (Representational State Transfer):
- Principios y arquitectura RESTful.
- Operaciones HTTP fundamentales (GET, POST, PUT, DELETE).
- Formato de mensajes (JSON, XML).
- Ventajas, desventajas y casos de uso típicos.
- SOAP (Simple Object Access Protocol):
- Arquitectura y elementos principales (envelope, header, body).
- Protocolos de transporte compatibles (HTTP, SMTP).
- WSDL (Web Services Description Language) para definición de servicios.
- Seguridad y transacciones en SOAP.
- Ventajas, desventajas y escenarios de uso.
- gRPC (Google Remote Procedure Call):
- Modelo de comunicación basado en RPC.
- Protocol Buffers como formato de serialización.
- Características: rendimiento, streaming, soporte multiidioma.
- Comparación con REST y SOAP.
- Casos de aplicación recomendados.
- Comparativa entre REST, SOAP y gRPC:
- Aspectos técnicos: formato de mensajes, protocolos de transporte, seguridad.
- Escenarios de uso adecuados según necesidades del proyecto.
- Consideraciones de interoperabilidad y soporte.
2. Implementación de Servicios Web con Frameworks REST y gRPC
- Frameworks populares para REST:
- Express.js (Node.js), Spring Boot (Java), Flask (Python).
- Configuración básica de endpoints RESTful.
- Manejo de rutas, parámetros y cuerpos de petición.
- Buenas prácticas en diseño RESTful:
- Uso correcto de verbos HTTP y códigos de estado.
- Versionado de API.
- Documentación con OpenAPI/Swagger.
- Autenticación y autorización (OAuth, JWT).
- Implementación de servicios con gRPC:
- Definición de servicios y mensajes con Protocol Buffers.
- Generación de código cliente y servidor.
- Manejo de streams y comunicación bidireccional.
- Integración con aplicaciones existentes.
- Integración y pruebas:
- Testing unitario y de integración para servicios REST y gRPC.
- Uso de herramientas como Postman para REST y BloomRPC o Evans para gRPC.
3. Contenedorización con Docker para Aplicaciones Distribuidas
- Conceptos fundamentales de contenedores:
- Diferencia entre máquinas virtuales y contenedores.
- Ventajas de la contenedorización en desarrollo y producción.
- Introducción a Docker:
- Arquitectura de Docker: cliente, demonio, registros.
- Imágenes, contenedores, volúmenes y redes.
- Construcción y gestión de imágenes Docker:
- Escritura de Dockerfile: instrucciones básicas y optimización.
- Construcción y etiquetado de imágenes.
- Publicación y descarga de imágenes en Docker Hub.
- Despliegue y orquestación básica:
- Ejecutar y administrar contenedores.
- Gestión de redes y volúmenes para aplicaciones distribuidas.
- Buenas prácticas para asegurar portabilidad y consistencia.
4. Orquestación de Aplicaciones Distribuidas con Kubernetes
- Conceptos básicos de Kubernetes:
- Arquitectura: nodos, pods, controladores y servicios.
- Objetos principales: Deployments, ReplicaSets, ConfigMaps, Secrets.
- Instalación y configuración de un clúster Kubernetes:
- Opciones para desarrollo local (Minikube, Kind).
- Conceptos de espacio de nombres y contexto.
- Despliegue y administración de aplicaciones:
- Creación y gestión de deployments y servicios.
- Escalabilidad horizontal y vertical.
- Estrategias de actualización y tolerancia a fallos (Rolling Updates, Rollbacks).
- Monitoreo y depuración:
- Uso de kubectl y herramientas de monitoreo básicas.
- Logs y diagnósticos de problemas comunes.
5. Selección y Análisis de Tecnologías y Herramientas para Soluciones Distribuidas
- Criterios técnicos para selección de tecnologías:
- Rendimiento, escalabilidad, compatibilidad y seguridad.
- Soporte comunitario y madurez tecnológica.
- Integración con ecosistemas existentes.
- Análisis comparativo de herramientas y plataformas:
- Evaluación de protocolos (REST, SOAP, gRPC) según casos de uso.
- Contenedores vs máquinas virtuales, elección entre Docker y otras tecnologías.
- Orquestadores: Kubernetes frente a alternativas.
- Gestión de proyectos colaborativos con tecnologías distribuidas:
- Integración continua y despliegue continuo (CI/CD).
- Herramientas para gestión de versiones y colaboración (Git, GitHub Actions).
- Buenas prácticas para asegurar interoperabilidad y cohesión del equipo.
Actividades
Actividad 1: Análisis Comparativo de Protocolos REST, SOAP y gRPC
Objetivo: Describir las características y diferencias fundamentales entre REST, SOAP y gRPC, identificando sus usos adecuados.
Descripción:
- Formar grupos de 3-4 estudiantes.
- Asignar a cada grupo la investigación detallada de uno de los protocolos.
- Elaborar un cuadro comparativo que incluya arquitectura, formatos de mensajes, protocolos de transporte, seguridad, casos de uso y ventajas/desventajas.
- Presentar los resultados en una sesión de discusión grupal donde cada equipo expone y se realiza una comparación conjunta.
Organización: Grupos
Producto esperado: Cuadro comparativo y presentación oral.
Duración estimada: 2 horas
Actividad 2: Implementación de un Servicio Web RESTful
Objetivo: Implementar servicios web utilizando frameworks basados en REST, aplicando buenas prácticas de diseño e integración.
Descripción:
- Individualmente, desarrollar una API RESTful sencilla para gestión de recursos (por ejemplo, una API para gestión de libros o usuarios) usando un framework a elección (Express.js, Flask o Spring Boot).
- Implementar operaciones CRUD utilizando verbos HTTP adecuados.
- Incluir manejo de errores y códigos de estado HTTP correctos.
- Documentar la API con Swagger u OpenAPI.
- Probar la API con herramientas como Postman.
Organización: Individual
Producto esperado: Código fuente de la API, documentación y reporte de pruebas.
Duración estimada: 4 horas
Actividad 3: Creación y Despliegue de un Contenedor Docker
Objetivo: Configurar y desplegar contenedores con Docker para aplicaciones distribuidas, asegurando portabilidad y consistencia.
Descripción:
- Tomar el servicio RESTful desarrollado en la actividad anterior.
- Crear un Dockerfile para construir la imagen del servicio.
- Construir la imagen y ejecutar el contenedor localmente.
- Probar que la API funciona correctamente dentro del contenedor.
- Documentar los pasos para reproducir el proceso.
Organización: Individual
Producto esperado: Dockerfile, imagen construida, contenedor funcionando y documentación.
Duración estimada: 3 horas
Actividad 4: Despliegue y Escalabilidad con Kubernetes
Objetivo: Diseñar y administrar clústeres de Kubernetes para orquestar aplicaciones distribuidas, evaluando estrategias de escalabilidad y tolerancia a fallos.
Descripción:
- En parejas, desplegar la aplicación contenida en Docker en un clúster Kubernetes local (Minikube o Kind).
- Crear los manifiestos YAML para deployment y service.
- Configurar escalabilidad horizontal con réplicas.
- Simular fallos deteniendo pods y observar la autorrecuperación.
- Documentar el proceso y resultados obtenidos.
Organización: Parejas
Producto esperado: Archivos YAML, evidencia de despliegue y escalabilidad, y reporte de la actividad.
Duración estimada: 4 horas
Actividad 5: Evaluación y Selección de Tecnologías para Proyecto Distribuido
Objetivo: Analizar y seleccionar tecnologías y herramientas adecuadas para integrar soluciones distribuidas en proyectos colaborativos.
Descripción:
- En grupos, proponer un proyecto de aplicación distribuida (por ejemplo, sistema de reservas o plataforma de microservicios).
- Analizar y seleccionar los protocolos, frameworks, contenedores y herramientas de orquestación más adecuados para el proyecto.
- Justificar las elecciones técnicas basándose en criterios de desempeño, escalabilidad, seguridad y facilidad de integración.
- Presentar la propuesta con un informe y exposición oral.
Organización: Grupos
Producto esperado: Informe escrito y presentación.
Duración estimada: 3 horas
Evaluación
Evaluación Diagnóstica
Qué se evalúa: Conocimientos previos sobre protocolos de comunicación, contenedores y herramientas para aplicaciones distribuidas.
Cómo se evalúa: Cuestionario en línea con preguntas de opción múltiple y verdadero/falso sobre conceptos básicos de REST, SOAP, gRPC, Docker y Kubernetes.
Instrumento sugerido: Plataforma de evaluación virtual o formulario digital.
Evaluación Formativa
Qué se evalúa: Progreso en la implementación práctica de servicios, contenedores y despliegues, así como participación en actividades colaborativas.
- Revisión continua de entregables parciales (código, Dockerfile, manifiestos Kubernetes).
- Observación y retroalimentación en presentaciones y discusiones grupales.
- Autoevaluación y coevaluación en actividades grupales.
Instrumento sugerido: Rúbricas de desempeño, listas de cotejo y foros de discusión.
Evaluación Sumativa
Qué se evalúa: Dominio integral de los objetivos de la unidad: descripción de protocolos, implementación de servicios, contenedorización, orquestación y selección tecnológica.
- Proyecto final que integre un servicio distribuido implementado con REST o gRPC, desplegado en Docker y Kubernetes.
- Informe técnico y presentación que incluya análisis comparativo y justificación de tecnologías usadas.
- Examen teórico-práctico sobre conceptos y herramientas vistas.
Instrumento sugerido: Rubrica para proyecto final, examen escrito y presentación oral.
Duración
Se recomienda una duración total de 5 semanas para la unidad, distribuidas de la siguiente manera:
- Semana 1: Introducción a protocolos REST, SOAP y gRPC, con actividades diagnósticas y análisis comparativo.
- Semana 2: Implementación práctica de servicios REST y gRPC con frameworks seleccionados.
- Semana 3: Contenedorización con Docker, creación y despliegue de imágenes y contenedores.
- Semana 4: Orquestación con Kubernetes, despliegue y administración de clústeres, escalabilidad y tolerancia a fallos.
- Semana 5: Análisis y selección tecnológica para proyectos distribuidos, presentación de proyectos finales y evaluación sumativa.
Se sugiere dedicar aproximadamente 4 a 5 horas por semana, combinando sesiones teóricas, laboratorios prácticos y actividades colaborativas.
Desarrollo Práctico de Aplicaciones Distribuidas
Metodologías de desarrollo, implementación y pruebas de aplicaciones distribuidas en entornos reales.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de aplicar metodologías ágiles para planificar y gestionar el desarrollo de aplicaciones distribuidas en entornos reales, garantizando la colaboración efectiva en equipo.
- Al finalizar la unidad, el estudiante será capaz de implementar y desplegar aplicaciones distribuidas utilizando tecnologías y herramientas modernas, siguiendo buenas prácticas de arquitectura y escalabilidad.
- Al finalizar la unidad, el estudiante será capaz de diseñar y ejecutar pruebas funcionales y de rendimiento en aplicaciones distribuidas, utilizando técnicas y herramientas adecuadas para identificar y corregir fallos.
- Al finalizar la unidad, el estudiante será capaz de evaluar y aplicar estrategias de manejo de errores y tolerancia a fallos durante la implementación de aplicaciones distribuidas en entornos reales.
- Al finalizar la unidad, el estudiante será capaz de documentar y presentar de forma clara y coherente el proceso de desarrollo, pruebas e implementación de aplicaciones distribuidas, demostrando comprensión integral del ciclo de vida del software distribuido.
Contenidos Temáticos
1. Metodologías Ágiles para Desarrollo de Aplicaciones Distribuidas
- Introducción a metodologías ágiles: conceptos, principios y valores.
- Scrum aplicado a proyectos de aplicaciones distribuidas: roles, artefactos y eventos.
- Kanban y gestión visual del flujo de trabajo en equipos distribuidos.
- Planificación y estimación de tareas en entornos distribuidos.
- Herramientas colaborativas para gestión ágil (Jira, Trello, GitHub Projects).
- Buenas prácticas para la comunicación y colaboración efectiva en equipos distribuidos.
2. Implementación y Despliegue de Aplicaciones Distribuidas
- Arquitectura de aplicaciones distribuidas: microservicios, servicios REST y eventos.
- Selección de tecnologías y herramientas modernas: contenedores (Docker), orquestadores (Kubernetes), servicios en la nube (AWS, Azure, GCP).
- Configuración del entorno de desarrollo y despliegue continuo (CI/CD) para aplicaciones distribuidas.
- Buenas prácticas de codificación para escalabilidad y mantenimiento.
- Automatización del despliegue y monitoreo básico.
3. Diseño y Ejecución de Pruebas en Aplicaciones Distribuidas
- Tipos de pruebas: funcionales, de integración, de sistema y de rendimiento.
- Herramientas para pruebas funcionales (Postman, Selenium) y de rendimiento (JMeter, Gatling).
- Diseño de casos de prueba específicos para sistemas distribuidos.
- Automatización de pruebas y su integración en pipelines CI/CD.
- Interpretación de resultados y técnicas para la identificación y corrección de fallos.
4. Manejo de Errores y Tolerancia a Fallos
- Estrategias para manejo de errores en sistemas distribuidos: retries, circuit breakers, fallback.
- Diseño para tolerancia a fallos y alta disponibilidad.
- Monitoreo y alertas para detectar fallos en aplicaciones distribuidas.
- Patrones de diseño para resiliencia (bulkhead, timeout, idempotencia).
- Pruebas de resiliencia y simulación de fallos.
5. Documentación y Presentación del Proceso de Desarrollo
- Importancia de la documentación en aplicaciones distribuidas.
- Formatos y herramientas para documentación técnica y de usuario (Markdown, Swagger/OpenAPI, diagramas UML).
- Documentación del ciclo de vida del software distribuido: planificación, desarrollo, pruebas, despliegue y mantenimiento.
- Buenas prácticas para presentaciones técnicas claras y coherentes.
- Elaboración de informes y presentaciones finales del proyecto.
Actividades
Actividad 1: Planificación Ágil de un Proyecto de Aplicación Distribuida
Objetivo: Aplicar metodologías ágiles para planificar y gestionar el desarrollo de una aplicación distribuida.
Descripción:
- Formar equipos de 4-5 estudiantes.
- Asignar un caso de estudio para desarrollar una aplicación distribuida sencilla.
- El equipo deberá definir roles Scrum, elaborar el backlog inicial y planificar el sprint 0, incluyendo estimaciones y definición de tareas.
- Utilizar herramientas digitales como Jira o Trello para gestionar el proyecto.
- Presentar un plan ágil detallado y la organización del equipo al docente y compañeros.
Organización: Grupos.
Producto esperado: Backlog, sprint planificado, tablero de tareas y presentación de planificación.
Duración estimada: 3 horas.
Actividad 2: Implementación y Despliegue de Microservicios con Contenedores
Objetivo: Implementar y desplegar una aplicación distribuida utilizando tecnologías modernas y buenas prácticas de arquitectura.
Descripción:
- En equipos o individual, desarrollar dos microservicios simples (por ejemplo, un servicio de usuarios y otro de productos) que se comuniquen mediante API REST.
- Contenerizar los microservicios usando Docker.
- Configurar un pipeline básico de CI/CD para construir y desplegar los contenedores en un entorno local o nube pública.
- Documentar las decisiones de arquitectura y escalabilidad adoptadas.
Organización: Individual o grupos pequeños (2-3 personas).
Producto esperado: Código fuente, archivos Docker, pipeline configurado y documentación técnica.
Duración estimada: 5 horas.
Actividad 3: Diseño y Ejecución de Pruebas Funcionales y de Rendimiento
Objetivo: Diseñar y ejecutar pruebas funcionales y de rendimiento para una aplicación distribuida.
Descripción:
- Utilizando la aplicación creada en la actividad anterior, diseñar casos de prueba funcionales que cubran las principales funcionalidades.
- Implementar scripts de prueba con Postman o Selenium para pruebas funcionales automáticas.
- Diseñar y ejecutar un plan de pruebas de carga y rendimiento usando JMeter o Gatling.
- Documentar los resultados y proponer correcciones basadas en los hallazgos.
Organización: Individual o grupos pequeños.
Producto esperado: Casos de prueba, scripts automatizados, reporte de pruebas y análisis de resultados.
Duración estimada: 4 horas.
Actividad 4: Implementación de Estrategias de Manejo de Errores y Pruebas de Resiliencia
Objetivo: Evaluar y aplicar estrategias de manejo de errores y tolerancia a fallos en aplicaciones distribuidas.
Descripción:
- Agregar a la aplicación distribuida mecanismos de manejo de errores: retries, circuit breaker y fallback.
- Simular fallos en uno o varios microservicios para evaluar la resiliencia del sistema.
- Realizar pruebas de resiliencia, documentando comportamiento y resultados.
- Elaborar un informe que describa las estrategias aplicadas, resultados y recomendaciones.
Organización: Grupos pequeños.
Producto esperado: Código con manejo de errores, reporte de pruebas de resiliencia y presentación de resultados.
Duración estimada: 4 horas.
Evaluación
Evaluación Diagnóstica
Qué se evalúa: Conocimientos previos sobre metodologías ágiles, arquitectura de aplicaciones distribuidas, pruebas y manejo de errores.
Cómo se evalúa: Cuestionario de opción múltiple y preguntas cortas al inicio de la unidad.
Instrumento sugerido: Plataforma LMS o formulario digital con preguntas cerradas y abiertas.
Evaluación Formativa
Qué se evalúa: Progreso en la aplicación de metodologías ágiles, implementación, pruebas, manejo de errores y documentación.
Cómo se evalúa: Revisión continua de productos parciales de las actividades (planificación ágil, código, scripts de prueba, informes), retroalimentación del docente y autoevaluación grupal.
Instrumento sugerido: Rúbricas para cada actividad y sesiones de retroalimentación en clase.
Evaluación Sumativa
Qué se evalúa: Competencia integral para desarrollar, probar, desplegar, manejar errores y documentar una aplicación distribuida.
Cómo se evalúa: Presentación final del proyecto completo (implementación, pruebas, manejo de errores, documentación y presentación oral), defensa ante el docente y evaluación escrita sobre conceptos clave.
Instrumento sugerido: Rúbrica de evaluación del proyecto final y examen escrito.
Duración
La unidad "Desarrollo Práctico de Aplicaciones Distribuidas" se recomienda impartir en un total de 4 semanas, con una carga horaria aproximada de 16 horas distribuidas de la siguiente manera:
- Semana 1 (4 horas): Introducción a metodologías ágiles y planificación del proyecto (Tema 1 + Actividad 1).
- Semana 2 (4 horas): Implementación y despliegue de microservicios con contenedores (Tema 2 + Actividad 2).
- Semana 3 (4 horas): Diseño y ejecución de pruebas funcionales y de rendimiento (Tema 3 + Actividad 3).
- Semana 4 (4 horas): Manejo de errores, tolerancia a fallos y documentación final (Temas 4 y 5 + Actividad 4 + Evaluación sumativa).
Esta distribución permite combinar teoría con práctica de manera equilibrada, asegurando que los estudiantes desarrollen competencias integrales en el desarrollo de aplicaciones distribuidas en entornos reales.
Escalabilidad y Rendimiento
Técnicas para mejorar la escalabilidad y optimizar el rendimiento de sistemas distribuidos.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de analizar diferentes técnicas de escalabilidad en sistemas distribuidos para identificar la más adecuada según el contexto del sistema.
- Al finalizar la unidad, el estudiante será capaz de evaluar el rendimiento de sistemas distribuidos utilizando métricas y herramientas específicas para detectar cuellos de botella y optimizar recursos.
- Al finalizar la unidad, el estudiante será capaz de diseñar soluciones que mejoren la escalabilidad y el rendimiento mediante la aplicación de patrones arquitectónicos y estrategias de balanceo de carga.
- Al finalizar la unidad, el estudiante será capaz de implementar técnicas de caché y replicación para optimizar la disponibilidad y velocidad de respuesta en aplicaciones distribuidas.
- Al finalizar la unidad, el estudiante será capaz de comparar y justificar la elección de diferentes mecanismos de optimización de rendimiento en función de los requisitos de sistemas distribuidos reales.
Contenidos Temáticos
1. Introducción a la Escalabilidad y Rendimiento en Sistemas Distribuidos
- Conceptos básicos de escalabilidad: definición, importancia y tipos (horizontal, vertical, diagonal).
- Rendimiento en sistemas distribuidos: parámetros clave y su impacto en la experiencia del usuario y la eficiencia del sistema.
- Desafíos comunes en la escalabilidad y el rendimiento de aplicaciones distribuidas.
2. Técnicas de Escalabilidad en Sistemas Distribuidos
- Escalabilidad horizontal vs. vertical: ventajas, desventajas y casos de uso.
- Escalabilidad dinámica y automática: conceptos y ejemplos de implementación.
- Uso de microservicios para mejorar la escalabilidad.
- Escalabilidad basada en contenedores y orquestadores (Docker, Kubernetes) para gestionar recursos.
- Análisis de casos prácticos para elegir la técnica adecuada según el contexto del sistema.
3. Evaluación del Rendimiento en Sistemas Distribuidos
- Métricas clave: latencia, throughput, uso de CPU, memoria, ancho de banda, tiempo de respuesta y disponibilidad.
- Herramientas de monitoreo y evaluación: Prometheus, Grafana, JMeter, Wireshark, y otros.
- Identificación y análisis de cuellos de botella en sistemas distribuidos.
- Pruebas de carga, estrés y capacidad: objetivos y metodologías.
4. Diseño de Soluciones para Mejorar Escalabilidad y Rendimiento
- Patrones arquitectónicos para escalabilidad y rendimiento:
- Patrón de Balanceo de Carga: tipos (round robin, least connections, IP hash), implementación y ventajas.
- Patrón de Colas y Procesamiento Asíncrono para desacoplar componentes.
- Patrón de Circuit Breaker para resiliencia y mejora de rendimiento.
- Estrategias de balanceo de carga: hardware vs. software, balanceadores internos y externos.
- Diseño para alta disponibilidad y tolerancia a fallos.
5. Técnicas de Caché y Replicación para Optimización
- Caché en sistemas distribuidos:
- Tipos de caché: local, distribuida, en memoria (Redis, Memcached).
- Políticas de caché: LRU, LFU, TTL.
- Consistencia de caché y posibles problemas (cache stampede, stale data).
- Replicación de datos:
- Replicación síncrona vs. asíncrona.
- Modelos de consistencia (eventual, fuerte, causal).
- Impacto en la disponibilidad y rendimiento.
- Casos de uso y ejemplos prácticos de implementación de caché y replicación.
6. Comparación y Justificación de Mecanismos de Optimización
- Criterios para la selección de técnicas y mecanismos de optimización basados en requisitos del sistema.
- Evaluación de trade-offs entre escalabilidad, rendimiento, consistencia y costo.
- Estudio de casos reales y análisis crítico de soluciones implementadas.
- Metodologías para justificar decisiones técnicas en la optimización de sistemas distribuidos.
Actividades
Actividad 1: Análisis Comparativo de Técnicas de Escalabilidad
Objetivo: Analizar diferentes técnicas de escalabilidad en sistemas distribuidos para identificar la más adecuada según el contexto del sistema.
Descripción:
- Se dividirá a los estudiantes en grupos pequeños.
- Cada grupo recibirá un escenario de sistema distribuido con características y requisitos específicos.
- Los grupos investigarán y analizarán las técnicas de escalabilidad más apropiadas para su caso (horizontal, vertical, microservicios, contenedores, etc.).
- Prepararán una presentación en la que expliquen la técnica elegida, sus ventajas, desventajas y justificación basada en el contexto.
- Finalmente, se realizará una sesión de discusión en clase para comparar las soluciones propuestas.
Organización: Grupos de 3-4 estudiantes
Producto esperado: Presentación y reporte escrito breve con análisis y justificación.
Duración estimada: 2 sesiones de 90 minutos cada una
Actividad 2: Evaluación Práctica de Rendimiento con Herramientas de Monitoreo
Objetivo: Evaluar el rendimiento de sistemas distribuidos utilizando métricas y herramientas específicas para detectar cuellos de botella y optimizar recursos.
Descripción:
- Los estudiantes instalarán y configurarán herramientas de monitoreo (por ejemplo, Prometheus y Grafana) en un entorno simulado o real de sistema distribuido proporcionado por el docente.
- Realizarán pruebas de carga utilizando JMeter u otra herramienta.
- Monitorearán y recogerán métricas relevantes durante las pruebas.
- Identificarán cuellos de botella y propondrán recomendaciones para mejorar el rendimiento.
- Elaborarán un informe con los resultados obtenidos y las acciones sugeridas.
Organización: Individual o parejas
Producto esperado: Informe técnico detallado con análisis de métricas y recomendaciones.
Duración estimada: 3 horas (sesión práctica y elaboración de informe)
Actividad 3: Diseño de Arquitectura Escalable con Patrones y Balanceo de Carga
Objetivo: Diseñar soluciones que mejoren la escalabilidad y el rendimiento mediante la aplicación de patrones arquitectónicos y estrategias de balanceo de carga.
Descripción:
- Los estudiantes recibirán un caso de estudio con requisitos funcionales y no funcionales para un sistema distribuido.
- Deberán diseñar una arquitectura que incluya patrones como balanceo de carga, colas, circuit breaker, etc.
- Se debe especificar el tipo de balanceo de carga a utilizar y justificar su elección.
- El diseño se presentará en un diagrama arquitectónico junto con una explicación escrita.
- Se fomentará la discusión y retroalimentación entre pares.
Organización: Grupos de 3 estudiantes
Producto esperado: Diagrama arquitectónico y documento explicativo.
Duración estimada: 2 sesiones de 90 minutos
Actividad 4: Implementación y Evaluación de Caché y Replicación
Objetivo: Implementar técnicas de caché y replicación para optimizar la disponibilidad y velocidad de respuesta en aplicaciones distribuidas.
Descripción:
- Los estudiantes implementarán una pequeña aplicación distribuida (por ejemplo, un servicio web con base de datos) en la que integrarán caché (Redis o Memcached) y replicación de datos (base de datos replicada o almacenamiento distribuido).
- Ejecutarán pruebas para medir la mejora en velocidad de respuesta y disponibilidad.
- Documentarán el proceso de implementación, resultados de rendimiento y análisis de consistencia.
Organización: Parejas o grupos de 3
Producto esperado: Código fuente, reporte de pruebas y análisis.
Duración estimada: 4 horas distribuidas en dos sesiones prácticas.
Evaluación
Evaluación Diagnóstica
Qué se evalúa: Conocimientos previos sobre conceptos básicos de escalabilidad y rendimiento en sistemas distribuidos.
Cómo se evalúa: Cuestionario de opción múltiple y preguntas abiertas breves.
Instrumento sugerido: Prueba escrita o plataforma digital de evaluación (quiz online).
Evaluación Formativa
Qué se evalúa: Progreso en el análisis, diseño e implementación de técnicas de escalabilidad y optimización del rendimiento.
Cómo se evalúa: Revisión continua de actividades prácticas, retroalimentación en presentaciones, informes y diseños.
Instrumento sugerido: Rúbricas para actividades prácticas, listas de cotejo y observación directa del docente.
Evaluación Sumativa
Qué se evalúa: Competencia para analizar, evaluar, diseñar, implementar y justificar técnicas de escalabilidad y optimización de rendimiento en sistemas distribuidos.
Cómo se evalúa: Proyecto final integrador que incluya:
- Análisis de un sistema distribuido real o simulado.
- Diseño arquitectónico con patrones y balanceo de carga.
- Implementación de caché y replicación.
- Evaluación de rendimiento con métricas y herramientas.
- Justificación técnica de decisiones tomadas.
Instrumento sugerido: Rúbrica detallada para evaluación del proyecto final, presentación oral y defensa ante el docente y compañeros.
Duración
La unidad "Escalabilidad y Rendimiento" se sugiere impartir en 4 semanas, distribuidas de la siguiente manera:
- Semana 1: Introducción y técnicas de escalabilidad (4 horas teóricas y análisis de casos).
- Semana 2: Evaluación del rendimiento y uso de herramientas (3 horas prácticas y 1 hora de discusión).
- Semana 3: Diseño de soluciones con patrones y balanceo de carga (3 horas teóricas y 2 horas de diseño en grupo).
- Semana 4: Implementación práctica de caché y replicación, y presentación del proyecto final (4-5 horas prácticas y evaluación).
Esta distribución permite combinar teoría, práctica, análisis y evaluación continua para un aprendizaje efectivo y aplicado.
Sistemas de Archivos y Almacenamiento Distribuido
Modelos y tecnologías de almacenamiento distribuido, bases de datos distribuidas y sistemas de archivos.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de explicar los modelos y arquitecturas de almacenamiento distribuido, identificando sus componentes y características principales.
- Al finalizar la unidad, el estudiante será capaz de analizar bases de datos distribuidas evaluando sus mecanismos de replicación y consistencia en entornos distribuidos.
- Al finalizar la unidad, el estudiante será capaz de diseñar sistemas de archivos distribuidos aplicando tecnologías actuales para optimizar el acceso y la gestión de datos en redes.
- Al finalizar la unidad, el estudiante será capaz de comparar diferentes tecnologías de almacenamiento distribuido, justificando su selección en función de requisitos específicos de aplicaciones distribuidas.
- Al finalizar la unidad, el estudiante será capaz de implementar y evaluar estrategias de tolerancia a fallos y sincronización en sistemas de archivos y almacenamiento distribuido.
Contenidos Temáticos
1. Introducción a los Sistemas de Archivos y Almacenamiento Distribuido
- Conceptos básicos y evolución histórica del almacenamiento distribuido.
- Importancia y aplicaciones en sistemas modernos distribuidos.
- Diferencias entre almacenamiento local y distribuido.
2. Modelos y Arquitecturas de Almacenamiento Distribuido
- Modelos de almacenamiento: compartido, replicado y distribuido.
- Arquitecturas comunes: cliente-servidor, par-a-par (P2P), almacenamiento en la nube.
- Componentes principales: nodos, controladores, redes y protocolos de comunicación.
- Características clave: escalabilidad, disponibilidad, consistencia, y rendimiento.
3. Bases de Datos Distribuidas: Replicación y Consistencia
- Definición y ventajas de bases de datos distribuidas.
- Mecanismos de replicación: replicación síncrona vs asíncrona.
- Modelos de consistencia: fuerte, eventual, causal y otros.
- Protocolos para mantener la consistencia: quorum, Paxos, Raft.
- Desafíos en entornos distribuidos: latencia, particiones y tolerancia a fallos.
4. Sistemas de Archivos Distribuidos (DFS)
- Concepto y funciones principales de un sistema de archivos distribuido.
- Tecnologías actuales: NFS, AFS, HDFS, Ceph, GlusterFS.
- Diseño y arquitectura: metadatos, bloques de datos, y gestión de acceso.
- Optimización del acceso a datos: caché, replicación y balanceo de carga.
- Seguridad en sistemas de archivos distribuidos: autenticación, autorización y cifrado.
5. Comparación y Selección de Tecnologías de Almacenamiento Distribuido
- Criterios de selección basados en requisitos funcionales y no funcionales.
- Comparativa entre sistemas basados en rendimiento, escalabilidad, consistencia y tolerancia a fallos.
- Estudio de casos de uso: sistemas de archivos distribuidos vs bases de datos distribuidas vs almacenamiento en la nube.
6. Estrategias de Tolerancia a Fallos y Sincronización
- Mecanismos de detección y recuperación de fallos en sistemas distribuidos.
- Protocolos de consenso aplicados a almacenamiento distribuido.
- Sincronización de datos y relojes en sistemas distribuidos.
- Técnicas para garantizar la integridad y disponibilidad del sistema ante fallos.
Actividades
1. Análisis y Presentación de Arquitecturas de Almacenamiento Distribuido
Objetivo: Explicar los modelos y arquitecturas de almacenamiento distribuido, identificando sus componentes y características principales.
Descripción:
- Dividir a los estudiantes en grupos pequeños.
- Asignar a cada grupo una arquitectura o modelo específico (e.g., cliente-servidor, P2P, almacenamiento en la nube).
- Investigar y preparar una presentación detallada que incluya componentes, funcionamiento, ventajas y desventajas.
- Realizar presentaciones en clase y abrir discusión para comparar modelos.
Organización: Grupos de 3-4 estudiantes.
Producto esperado: Presentación multimedia y resumen escrito.
Duración estimada: 2 sesiones de clase (2 horas cada una).
2. Estudio de Caso: Evaluación de Mecanismos de Replicación y Consistencia
Objetivo: Analizar bases de datos distribuidas evaluando sus mecanismos de replicación y consistencia.
Descripción:
- Proporcionar un caso de estudio con un escenario real o simulado de base de datos distribuida.
- Solicitar que los estudiantes identifiquen y describan los mecanismos de replicación y modelos de consistencia usados.
- Realizar un análisis crítico sobre las ventajas y limitaciones del enfoque implementado.
- Elaborar un informe y discusión en clase sobre posibles mejoras.
Organización: Individual o parejas.
Producto esperado: Informe escrito con análisis y recomendaciones.
Duración estimada: 1 semana.
3. Diseño de un Sistema de Archivos Distribuido para un Requisito Específico
Objetivo: Diseñar sistemas de archivos distribuidos aplicando tecnologías actuales para optimizar el acceso y la gestión de datos en redes.
Descripción:
- Plantear un escenario que requiera la gestión de grandes volúmenes de datos en red (por ejemplo, almacenamiento para una empresa multimedia).
- Solicitar a los estudiantes diseñar un sistema de archivos distribuido que contemple arquitectura, tecnologías, métodos de acceso y mecanismos de seguridad.
- Incluir justificación tecnológica y esquema de la arquitectura propuesta.
- Presentar y defender el diseño ante el grupo.
Organización: Grupos de 3-4 estudiantes.
Producto esperado: Documento de diseño y presentación oral.
Duración estimada: 2 semanas.
4. Simulación y Evaluación de Estrategias de Tolerancia a Fallos
Objetivo: Implementar y evaluar estrategias de tolerancia a fallos y sincronización en sistemas de archivos y almacenamiento distribuido.
Descripción:
- Proveer un entorno simulado o software (por ejemplo, un laboratorio virtual con HDFS o Ceph).
- Configurar replicación y mecanismos de sincronización.
- Simular fallos (caída de nodos, pérdida de conexión) y observar la recuperación.
- Registrar resultados y elaborar un informe que evalúe la efectividad de las estrategias empleadas.
Organización: Parejas o individual.
Producto esperado: Informe técnico con análisis de resultados y recomendaciones.
Duración estimada: 1 semana.
Evaluación
Evaluación Diagnóstica
Qué se evalúa: Conocimientos previos sobre conceptos básicos de almacenamiento distribuido y sistemas de archivos.
Cómo se evalúa: Cuestionario de opción múltiple y preguntas abiertas.
Instrumento sugerido: Test en línea o papel con 15 preguntas.
Evaluación Formativa
Qué se evalúa: Comprensión y aplicación de conceptos durante el desarrollo de actividades prácticas y discusiones.
Cómo se evalúa: Observación continua, revisión de productos parciales (presentaciones, informes), participación en debates y retroalimentación.
Instrumento sugerido: Rúbricas para presentaciones y reportes, listas de cotejo para participación.
Evaluación Sumativa
Qué se evalúa: Capacidad para explicar, analizar, diseñar, comparar e implementar estrategias en almacenamiento distribuido según los objetivos de la unidad.
Cómo se evalúa: Examen escrito con preguntas teóricas y ejercicios prácticos, entrega final de proyecto de diseño y evaluación de simulación.
Instrumento sugerido: Examen escrito, rúbrica para proyecto final, informe técnico de simulación.
Duración
La unidad "Sistemas de Archivos y Almacenamiento Distribuido" se sugiere impartir en un total de 6 semanas, con una dedicación aproximada de 4 horas por semana, distribuidas en clases teóricas, actividades prácticas y tiempo para trabajos fuera de clase. La distribución puede ser:
- Semana 1: Introducción y Modelos/Arquitecturas.
- Semana 2: Bases de Datos Distribuidas (replicación y consistencia).
- Semana 3: Sistemas de Archivos Distribuidos y tecnologías actuales.
- Semana 4: Comparación y selección de tecnologías.
- Semana 5: Estrategias de tolerancia a fallos y sincronización; inicio de actividades prácticas.
- Semana 6: Presentación de proyectos, evaluación práctica y cierre de unidad.
Computación en la Nube y Aplicaciones Distribuidas
Conceptos de computación en la nube, modelos de servicio y despliegue de aplicaciones distribuidas en la nube.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de explicar los conceptos fundamentales de la computación en la nube y sus modelos de servicio (IaaS, PaaS, SaaS) con ejemplos claros.
- Al finalizar la unidad, el estudiante será capaz de comparar y contrastar los diferentes modelos de despliegue en la nube (pública, privada, híbrida) mediante análisis de casos prácticos.
- Al finalizar la unidad, el estudiante será capaz de diseñar una arquitectura básica de aplicación distribuida desplegada en la nube, integrando componentes y servicios adecuados según requerimientos específicos.
- Al finalizar la unidad, el estudiante será capaz de implementar y evaluar una aplicación distribuida simple utilizando plataformas de computación en la nube, aplicando buenas prácticas de desarrollo y despliegue.
- Al finalizar la unidad, el estudiante será capaz de analizar las implicaciones de seguridad y tolerancia a fallos en aplicaciones distribuidas en la nube, proponiendo estrategias de mitigación adecuadas.
Contenidos Temáticos
1. Introducción a la Computación en la Nube
- Definición de computación en la nube: Orígenes, evolución y importancia actual.
- Características principales: Elasticidad, escalabilidad, acceso bajo demanda, multitenencia.
- Ventajas y desafíos de la computación en la nube en sistemas distribuidos.
2. Modelos de Servicio en la Nube
- IaaS (Infrastructure as a Service)
- Concepto y características.
- Ejemplos de proveedores y casos de uso.
- PaaS (Platform as a Service)
- Concepto y características.
- Ejemplos de plataformas y escenarios de aplicación.
- SaaS (Software as a Service)
- Concepto y características.
- Ejemplos de aplicaciones SaaS y beneficios para usuarios finales.
- Comparación entre IaaS, PaaS y SaaS: ventajas, limitaciones y selección según necesidades.
3. Modelos de Despliegue en la Nube
- Nube Pública
- Definición y características.
- Ventajas y desafíos.
- Ejemplos de uso.
- Nube Privada
- Definición y características.
- Ventajas y desafíos.
- Ejemplos de uso.
- Nube Híbrida
- Definición y características.
- Ventajas y desafíos.
- Ejemplos y casos prácticos.
- Análisis comparativo entre modelos de despliegue mediante casos prácticos reales.
4. Diseño de Arquitectura para Aplicaciones Distribuidas en la Nube
- Componentes fundamentales de una arquitectura distribuida en la nube: servidores, bases de datos, balanceadores, colas de mensajes.
- Selección de servicios en función de requerimientos funcionales y no funcionales (escalabilidad, latencia, costo).
- Patrones de diseño para aplicaciones distribuidas en la nube (microservicios, serverless, monolitos distribuidos).
- Herramientas y diagramas para el diseño arquitectónico (UML, diagramas de despliegue).
5. Implementación y Evaluación de Aplicaciones Distribuidas en la Nube
- Introducción a plataformas populares (AWS, Azure, Google Cloud Platform): servicios básicos para despliegue.
- Desarrollo de una aplicación distribuida simple: diseño, codificación y despliegue.
- Buenas prácticas en desarrollo y despliegue: integración continua, gestión de configuraciones, monitoreo.
- Evaluación del rendimiento y escalabilidad de la aplicación desplegada.
6. Seguridad y Tolerancia a Fallos en Aplicaciones Distribuidas en la Nube
- Principales riesgos y vulnerabilidades en entornos de nube.
- Mecanismos de seguridad: autenticación, autorización, cifrado, gestión de identidades.
- Estrategias para garantizar tolerancia a fallos: replicación, redundancia, recuperación ante desastres.
- Buenas prácticas y herramientas para la mitigación de riesgos y aseguramiento de la disponibilidad.
Actividades
Actividad 1: Análisis Comparativo de Modelos de Servicio en la Nube
Objetivo: Explicar los conceptos fundamentales de la computación en la nube y sus modelos de servicio (IaaS, PaaS, SaaS) con ejemplos claros.
Descripción:
- Los estudiantes investigan un proveedor cloud (AWS, Azure o GCP) y seleccionan un servicio representativo para cada modelo (IaaS, PaaS, SaaS).
- Preparan una presentación explicando cada modelo, características, ventajas, desventajas y un ejemplo real de uso.
- Discuten en clase las diferencias y similitudes entre los modelos.
Organización: Grupos de 3-4 estudiantes.
Producto esperado: Presentación audiovisual y resumen escrito.
Duración estimada: 2 horas (1 hora para investigación y preparación, 1 hora para presentación y discusión).
Actividad 2: Estudio de Caso sobre Modelos de Despliegue en la Nube
Objetivo: Comparar y contrastar los modelos de despliegue en la nube (pública, privada, híbrida) mediante análisis de casos prácticos.
Descripción:
- Se presenta un caso empresarial real con requerimientos específicos.
- Los estudiantes analizan y proponen qué modelo de despliegue es más adecuado, justificando la elección considerando ventajas, riesgos y costos.
- Discuten en plenaria las diferentes propuestas y conclusiones.
Organización: Parejas o tríos.
Producto esperado: Informe de análisis y presentación oral breve.
Duración estimada: 2 horas (1.5 horas para análisis y preparación, 0.5 horas para exposición y debate).
Actividad 3: Diseño Arquitectónico de una Aplicación Distribuida en la Nube
Objetivo: Diseñar una arquitectura básica de aplicación distribuida desplegada en la nube integrando componentes y servicios adecuados.
Descripción:
- Se propone un caso de aplicación distribuida con requisitos funcionales y no funcionales.
- Los estudiantes diseñan la arquitectura incluyendo selección de servicios cloud, diagramas de componentes y despliegue.
- Presentan y justifican su diseño frente a la clase.
Organización: Grupos de 3-4 estudiantes.
Producto esperado: Documento de diseño con diagramas y presentación explicativa.
Duración estimada: 3 horas (2 horas diseño, 1 hora presentación y retroalimentación).
Actividad 4: Implementación y Evaluación de una Aplicación Distribuida Simple en la Nube
Objetivo: Implementar y evaluar una aplicación distribuida simple utilizando plataformas cloud aplicando buenas prácticas.
Descripción:
- Se proporciona un prototipo básico para desplegar en una plataforma cloud (AWS, Azure o GCP).
- Los estudiantes configuran, despliegan y prueban la aplicación, monitoreando el rendimiento.
- Documentan la experiencia, mencionando las buenas prácticas aplicadas y problemas enfrentados.
Organización: Individual o parejas.
Producto esperado: Aplicación desplegada funcional y reporte técnico.
Duración estimada: 4 horas (3 para implementación y pruebas, 1 para entrega y discusión).
Actividad 5: Análisis de Seguridad y Tolerancia a Fallos en Aplicaciones en la Nube
Objetivo: Analizar implicaciones de seguridad y tolerancia a fallos proponiendo estrategias de mitigación.
Descripción:
- Se entregan escenarios con vulnerabilidades y fallos comunes en aplicaciones en la nube.
- Los estudiantes identifican riesgos, proponen soluciones y crean un plan de mitigación.
- Discuten en plenaria para enriquecer las estrategias.
Organización: Grupos de 3 estudiantes.
Producto esperado: Informe con análisis de riesgos y plan de mitigación.
Duración estimada: 2 horas (1.5 para análisis y elaboración, 0.5 para presentación y discusión).
Evaluación
Evaluación Diagnóstica
Qué se evalúa: Conocimientos previos sobre conceptos básicos de computación en la nube y aplicaciones distribuidas.
Cómo se evalúa: Cuestionario breve tipo test y preguntas abiertas sobre definiciones, modelos de servicio y despliegue.
Instrumento sugerido: Test en línea o en papel con preguntas de opción múltiple y respuesta corta.
Evaluación Formativa
Qué se evalúa: Comprensión y aplicación de conceptos durante el desarrollo de actividades prácticas (análisis, diseño, implementación).
Cómo se evalúa: Revisión continua de productos parciales (presentaciones, informes, diseños), participación en discusiones y retroalimentación entre pares.
Instrumento sugerido: Rúbricas para presentación y diseño arquitectónico, listas de cotejo para informes y ejercicios prácticos.
Evaluación Sumativa
Qué se evalúa: Dominio integral de los contenidos y habilidades: explicación de conceptos, comparación de modelos, diseño e implementación, análisis de seguridad y tolerancia a fallos.
Cómo se evalúa: Proyecto final donde el estudiante debe diseñar, implementar y evaluar una aplicación distribuida en la nube, junto con un análisis de seguridad y tolerancia a fallos.
Instrumento sugerido: Rúbrica de evaluación que contemple calidad del diseño arquitectónico, funcionalidad de la implementación, calidad del análisis de seguridad y presentación oral o escrita final.
Duración
La unidad se recomienda impartir en un bloque de 4 semanas, con una dedicación semanal aproximada de 4 a 5 horas distribuidas en sesiones teóricas y prácticas.
Semana 1: Introducción, modelos de servicio y evaluación diagnóstica (4 horas).
Semana 2: Modelos de despliegue y actividad de análisis de casos (4 horas).
Semana 3: Diseño arquitectónico y actividad práctica (5 horas).
Semana 4: Implementación, evaluación, seguridad, tolerancia a fallos y evaluación sumativa (5 horas).
Microservicios y Contenedores
Diseño basado en microservicios, ventajas, desafíos y uso de contenedores para despliegue.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de explicar el diseño basado en microservicios, identificando sus ventajas y desafíos, mediante el análisis de casos prácticos.
- Al finalizar la unidad, el estudiante será capaz de diseñar una arquitectura de aplicaciones distribuidas utilizando microservicios, aplicando principios de modularidad y escalabilidad.
- Al finalizar la unidad, el estudiante será capaz de implementar y desplegar microservicios utilizando contenedores, configurando ambientes de ejecución reproducibles y eficientes.
- Al finalizar la unidad, el estudiante será capaz de evaluar los beneficios y limitaciones del uso de contenedores en el despliegue de aplicaciones distribuidas, mediante comparativas técnicas fundamentadas.
- Al finalizar la unidad, el estudiante será capaz de integrar microservicios desplegados en contenedores dentro de un sistema distribuido, garantizando la comunicación y coordinación entre servicios.
Contenidos Temáticos
1. Introducción a Microservicios
- Definición y características principales del diseño basado en microservicios.
- Comparación entre arquitecturas monolíticas y microservicios.
- Ventajas del enfoque de microservicios: escalabilidad, modularidad, despliegue independiente.
- Desafíos comunes: complejidad en la coordinación, gestión de datos, latencia y fallos distribuidos.
- Análisis de casos prácticos reales que ejemplifican la adopción de microservicios en la industria.
2. Diseño de Arquitecturas Distribuidas con Microservicios
- Principios fundamentales para diseñar sistemas basados en microservicios.
- Modularidad: delimitación de servicios, definición de límites contextuales (bounded contexts).
- Escalabilidad: técnicas para escalar vertical y horizontalmente microservicios.
- Patrones de diseño para microservicios: API Gateway, Circuit Breaker, Service Discovery, CQRS.
- Herramientas y metodologías para modelar arquitecturas distribuidas: diagramas de componentes, diagramas de despliegue.
3. Contenedores para Implementación y Despliegue de Microservicios
- Concepto de contenedores y diferencias con máquinas virtuales.
- Principales tecnologías de contenedores: Docker, Podman.
- Creación de imágenes de contenedores para microservicios: Dockerfile y mejores prácticas.
- Configuración de ambientes de ejecución reproducibles y eficientes con contenedores.
- Orquestación básica: uso de Docker Compose para desplegar microservicios interconectados.
4. Evaluación Técnica de Contenedores en Aplicaciones Distribuidas
- Análisis de beneficios: portabilidad, aislamiento, eficiencia en recursos.
- Limitaciones y retos: persistencia de datos, seguridad, sobrecarga de red y almacenamiento.
- Comparativa técnica entre despliegue tradicional y con contenedores.
- Impacto en la gestión del ciclo de vida del software y en DevOps.
5. Integración y Comunicación entre Microservicios Desplegados en Contenedores
- Mecanismos de comunicación entre microservicios: REST, gRPC, mensajería asíncrona.
- Gestión de la coordinación y consistencia distribuida.
- Implementación de descubrimiento de servicios y balanceo de carga entre contenedores.
- Monitoreo y logging centralizado para microservicios en contenedores.
- Prácticas para garantizar la resiliencia y tolerancia a fallos en sistemas distribuidos.
Actividades
Actividad 1: Análisis de Casos Prácticos de Microservicios
Objetivo: Explicar el diseño basado en microservicios, identificando ventajas y desafíos mediante análisis de casos prácticos.
Descripción:
- Se asignan a los estudiantes casos reales de empresas que migraron a microservicios (e.g., Netflix, Amazon, Spotify).
- En grupos, investigan la arquitectura utilizada, los beneficios obtenidos y los desafíos enfrentados.
- Preparan una presentación que resuma el análisis, destacando los aprendizajes clave.
- Discusión en clase para contrastar diferentes enfoques y resultados.
Organización: Grupos de 3-4 estudiantes.
Producto esperado: Presentación y reporte escrito del análisis.
Duración estimada: 2 sesiones de 90 minutos.
Actividad 2: Diseño de Arquitectura de Microservicios para una Aplicación
Objetivo: Diseñar una arquitectura de aplicaciones distribuidas utilizando microservicios, aplicando modularidad y escalabilidad.
Descripción:
- Individualmente, los estudiantes eligen una aplicación simple (e.g., sistema de reservas, tienda en línea).
- Definen los microservicios necesarios, sus responsabilidades y límites contextuales.
- Crean diagramas de arquitectura que incluyan patrones de diseño aplicados.
- Explican las decisiones tomadas para asegurar escalabilidad y modularidad.
Organización: Individual.
Producto esperado: Documento y diagramas de arquitectura diseñados.
Duración estimada: 3 horas.
Actividad 3: Implementación y Despliegue de Microservicios con Contenedores
Objetivo: Implementar y desplegar microservicios utilizando contenedores configurando ambientes reproducibles.
Descripción:
- En parejas, desarrollan dos microservicios simples (por ejemplo, un servicio de usuarios y otro de productos) en un lenguaje de programación definido.
- Crean Dockerfiles para cada servicio y construyen las imágenes.
- Configuran Docker Compose para levantar ambos servicios y asegurar la comunicación entre ellos.
- Prueban el despliegue y documentan el proceso.
Organización: Parejas.
Producto esperado: Código fuente, archivos Docker y Docker Compose, informe de despliegue.
Duración estimada: 4 horas.
Actividad 4: Evaluación Comparativa y Debate sobre Uso de Contenedores
Objetivo: Evaluar beneficios y limitaciones del uso de contenedores en aplicaciones distribuidas mediante comparativas técnicas fundamentadas.
Descripción:
- Se asignan a grupos temas específicos (portabilidad, rendimiento, seguridad, gestión, etc.).
- Investigan y elaboran un análisis comparativo entre despliegue tradicional y en contenedores para su tema.
- Preparan argumentos para un debate en clase, exponiendo pros y contras.
- Realizan el debate, promoviendo preguntas y discusión crítica.
Organización: Grupos de 3 estudiantes.
Producto esperado: Documento de análisis y participación en debate.
Duración estimada: 2 sesiones de 90 minutos.
Evaluación
Evaluación Diagnóstica
Qué se evalúa: Conocimientos previos sobre arquitecturas de software, microservicios y contenedores.
Cómo se evalúa: Cuestionario breve de opción múltiple y preguntas abiertas.
Instrumento sugerido: Test en línea o en papel con preguntas sobre conceptos básicos y comparaciones entre arquitecturas.
Evaluación Formativa
Qué se evalúa: Proceso de aprendizaje durante la unidad: comprensión de conceptos, aplicación de diseño, implementación y análisis.
Cómo se evalúa: Revisión continua de las actividades de análisis de casos, diseño arquitectónico, implementación de contenedores y participación en debates.
Instrumento sugerido: Listas de cotejo para actividades prácticas, rúbricas para presentaciones y documentos entregados, observación de participación.
Evaluación Sumativa
Qué se evalúa: Logro de los objetivos al finalizar la unidad, integrando explicación, diseño, implementación, evaluación y comunicación.
Cómo se evalúa: Proyecto integrador individual que incluya:
- Explicación teórica del diseño basado en microservicios y sus ventajas/desafíos.
- Diseño arquitectónico detallado para una aplicación distribuida.
- Implementación y despliegue de al menos dos microservicios en contenedores.
- Análisis crítico de beneficios y limitaciones del despliegue en contenedores.
- Demostración de integración y comunicación entre microservicios desplegados.
Instrumento sugerido: Rúbrica de evaluación que valore cada componente con criterios claros de desempeño y calidad.
Duración
La unidad "Microservicios y Contenedores" tiene una duración sugerida de 3 semanas, distribuidas de la siguiente manera:
- Semana 1 (6 horas): Introducción a microservicios y análisis de casos prácticos, incluyendo la actividad de análisis en grupos.
- Semana 2 (6 horas): Diseño de arquitecturas y patrones de microservicios, desarrollo individual de diseño arquitectónico y discusión en clase.
- Semana 3 (8 horas): Implementación práctica con contenedores, orquestación básica, evaluación comparativa y debate, además de preparación del proyecto integrador.
Se recomienda distribuir las horas en sesiones teórico-prácticas para combinar explicación, actividades colaborativas y laboratorios técnicos.
Monitoreo y Gestión de Sistemas Distribuidos
Herramientas y técnicas para el monitoreo, diagnóstico y mantenimiento de aplicaciones distribuidas.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de identificar y describir las principales herramientas y técnicas utilizadas para el monitoreo de sistemas distribuidos, evaluando su aplicabilidad en diferentes escenarios.
- Al finalizar la unidad, el estudiante será capaz de analizar métricas de rendimiento y eventos generados por sistemas distribuidos para diagnosticar problemas y proponer soluciones efectivas.
- Al finalizar la unidad, el estudiante será capaz de diseñar estrategias de mantenimiento y gestión proactiva para aplicaciones distribuidas, considerando aspectos de tolerancia a fallos y escalabilidad.
- Al finalizar la unidad, el estudiante será capaz de implementar y configurar herramientas de monitoreo en entornos distribuidos, garantizando la recopilación y visualización adecuada de datos clave para la gestión del sistema.
Contenidos Temáticos
1. Introducción al Monitoreo y Gestión de Sistemas Distribuidos
- Conceptos básicos de sistemas distribuidos y su complejidad operativa.
- Importancia del monitoreo y la gestión para la disponibilidad, escalabilidad y tolerancia a fallos.
- Retos específicos en el monitoreo de sistemas distribuidos.
2. Herramientas para el Monitoreo de Sistemas Distribuidos
- Tipos de herramientas: agentes vs. sin agentes; basadas en métricas vs. basadas en logs.
- Principales herramientas de monitoreo:
- Prometheus: características, arquitectura y casos de uso.
- Grafana: integración con fuentes de datos y visualización avanzada.
- Elastic Stack (ELK): recopilación, almacenamiento y análisis de logs.
- Zabbix y Nagios: monitoreo tradicional y alertas.
- Herramientas específicas para contenedores y orquestadores (Kubernetes, Docker).
- Comparativa de herramientas: ventajas, limitaciones y escenarios recomendados.
3. Técnicas para el Monitoreo y Diagnóstico
- Monitoreo basado en métricas:
- Métricas clave: CPU, memoria, latencia, throughput, errores, etc.
- Recolección y agregación de métricas en entornos distribuidos.
- Monitoreo basado en logs y trazas:
- Centralización y análisis de logs.
- Trazabilidad distribuida (Distributed Tracing) con herramientas como Jaeger y Zipkin.
- Alertas y notificaciones: configuración y gestión de umbrales.
- Diagnóstico de problemas comunes: cuellos de botella, fallos intermitentes y degradación de servicio.
4. Análisis de Métricas y Eventos para Diagnóstico
- Técnicas para interpretar métricas y detectar anomalías.
- Correlación de eventos y métricas para identificar la causa raíz.
- Uso de dashboards y reportes para seguimiento continuo.
- Ejemplos prácticos de análisis de incidentes en sistemas distribuidos.
5. Estrategias de Mantenimiento y Gestión Proactiva
- Conceptos de mantenimiento proactivo y reactivo en sistemas distribuidos.
- Diseño de estrategias de tolerancia a fallos:
- Redundancia y replicación.
- Failover y recuperación automática.
- Escalabilidad y gestión dinámica de recursos.
- Planificación de actualizaciones y despliegues sin interrupciones.
- Prácticas recomendadas para la gestión continua y mejora del sistema.
6. Implementación y Configuración de Herramientas de Monitoreo
- Configuración básica y avanzada de Prometheus para la recolección de métricas.
- Integración de Prometheus con Grafana para visualización.
- Configuración de alertas y notificaciones automatizadas.
- Implementación de ELK Stack para análisis de logs en sistemas distribuidos.
- Automatización y despliegue de herramientas en entornos de contenedores.
- Buenas prácticas para garantizar la integridad y seguridad de la información monitoreada.
Actividades
Actividad 1: Evaluación y Comparativa de Herramientas de Monitoreo
Objetivo: Identificar y describir las principales herramientas y técnicas utilizadas para el monitoreo de sistemas distribuidos.
Descripción:
- Dividir a los estudiantes en grupos pequeños.
- Asignar a cada grupo una herramienta de monitoreo (Prometheus, Grafana, ELK, Zabbix, etc.).
- Cada grupo investiga características, ventajas, limitaciones y escenarios de aplicación de su herramienta.
- Preparar una presentación comparativa destacando aspectos clave.
- Exponer ante el resto de la clase y discutir la aplicabilidad en diferentes contextos.
Organización: Grupos
Producto esperado: Presentación comparativa y discusión grupal.
Duración estimada: 3 horas (investigación y presentación).
Actividad 2: Análisis de Métricas y Diagnóstico de Problemas
Objetivo: Analizar métricas de rendimiento y eventos generados para diagnosticar problemas y proponer soluciones.
Descripción:
- Proporcionar a los estudiantes un conjunto de datos de métricas y logs simulados de un sistema distribuido con problemas.
- Individualmente, analizar las métricas para identificar anomalías y posibles causas raíz.
- Elaborar un informe con el diagnóstico del problema y recomendaciones para su solución.
- Compartir hallazgos en sesión plenaria para discusión y retroalimentación.
Organización: Individual
Producto esperado: Informe de diagnóstico y propuesta de solución.
Duración estimada: 2 horas.
Actividad 3: Diseño de Estrategias de Mantenimiento Proactivo
Objetivo: Diseñar estrategias de mantenimiento y gestión proactiva considerando tolerancia a fallos y escalabilidad.
Descripción:
- Formar grupos para diseñar un plan de mantenimiento para una aplicación distribuida hipotética.
- El plan debe incluir mecanismos de tolerancia a fallos, escalabilidad y gestión continua.
- Presentar el diseño con justificación técnica y un cronograma de actividades de mantenimiento.
Organización: Grupos
Producto esperado: Plan de mantenimiento detallado con presentación.
Duración estimada: 3 horas.
Actividad 4: Implementación Práctica de Herramientas de Monitoreo
Objetivo: Implementar y configurar herramientas de monitoreo en entornos distribuidos para la recopilación y visualización de datos.
Descripción:
- En parejas, instalar y configurar un entorno básico de Prometheus y Grafana para monitorear una aplicación distribuida simple (por ejemplo, microservicios simulados).
- Configurar recolección de métricas, creación de dashboards y alertas básicas.
- Realizar una demostración práctica y entregar una guía paso a paso de la configuración realizada.
Organización: Parejas
Producto esperado: Entorno funcional de monitoreo con documentación y demostración.
Duración estimada: 4 horas.
Evaluación
Evaluación diagnóstica
Evaluar conocimientos previos sobre sistemas distribuidos y monitoreo.
- Qué se evalúa: Comprensión básica de conceptos relacionados con monitoreo y gestión de sistemas distribuidos.
- Cómo se evalúa: Cuestionario de opción múltiple y preguntas abiertas al inicio de la unidad.
- Instrumento sugerido: Test en línea o papel con preguntas conceptuales.
Evaluación formativa
Monitorear el progreso y comprensión durante las actividades prácticas.
- Qué se evalúa: Participación en actividades, calidad de análisis y propuestas, aplicación práctica de herramientas.
- Cómo se evalúa: Observación directa, retroalimentación continua y revisión de productos parciales.
- Instrumento sugerido: Rubricas para presentaciones, informes y configuraciones prácticas.
Evaluación sumativa
Evaluar la integración y aplicación completa de los conocimientos y habilidades adquiridas.
- Qué se evalúa: Capacidad para identificar herramientas, analizar métricas, diseñar estrategias y configurar sistemas de monitoreo.
- Cómo se evalúa: Proyecto final integrador que incluya un informe completo y una demostración práctica.
- Instrumento sugerido: Rubrica detallada que evalúe investigación, análisis crítico, diseño y habilidades técnicas.
Duración
La unidad está diseñada para desarrollarse en aproximadamente 3 semanas, con un total estimado de 15 horas distribuidas de la siguiente manera:
- Semana 1 (5 horas): Introducción, revisión de herramientas y actividad 1 (comparativa de herramientas).
- Semana 2 (5 horas): Técnicas de monitoreo, análisis de métricas y actividad 2 (diagnóstico de problemas) y actividad 3 (diseño de mantenimiento).
- Semana 3 (5 horas): Implementación práctica, configuración de herramientas y actividad 4 (implementación y demostración práctica), además de evaluaciones formativas y sumativas.
Casos de Estudio y Aplicaciones Reales
Análisis de casos prácticos y aplicaciones distribuidas en diferentes industrias.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de analizar casos de estudio representativos de aplicaciones distribuidas en diferentes industrias, identificando sus componentes y arquitecturas clave.
- Al finalizar la unidad, el estudiante será capaz de evaluar los protocolos y mecanismos de comunicación utilizados en aplicaciones distribuidas reales, justificando su elección en función del contexto del caso.
- Al finalizar la unidad, el estudiante será capaz de diseñar soluciones distribuidas basadas en casos prácticos, considerando aspectos de tolerancia a fallos, sincronización y seguridad.
- Al finalizar la unidad, el estudiante será capaz de integrar y presentar una propuesta de implementación de aplicaciones distribuidas en proyectos colaborativos, aplicando buenas prácticas de la industria.
Contenidos Temáticos
1. Introducción a los Casos de Estudio en Aplicaciones Distribuidas
- Importancia de los casos de estudio en la comprensión de sistemas distribuidos
- Metodología para el análisis de casos prácticos
- Contextualización de aplicaciones distribuidas en diferentes industrias
2. Análisis de Casos de Estudio Representativos
- Industria financiera: Sistemas de trading distribuidos y procesamiento de transacciones
- Industria de salud: Sistemas distribuidos para gestión de información clínica y telemedicina
- Industria de telecomunicaciones: Redes distribuidas para gestión y control de tráfico
- Industria de comercio electrónico: Plataformas distribuidas para gestión de inventarios y procesamiento de pedidos
- Componentes y arquitecturas clave en cada caso
3. Protocolos y Mecanismos de Comunicación en Aplicaciones Distribuidas Reales
- Protocolos comunes: HTTP/REST, gRPC, MQTT, AMQP, WebSocket
- Mecanismos de comunicación síncrona y asíncrona
- Justificación de la elección de protocolos según el contexto del caso
- Estudio comparativo de rendimiento, escalabilidad y seguridad
4. Diseño de Soluciones Distribuidas Basadas en Casos Prácticos
- Identificación de requerimientos funcionales y no funcionales
- Diseño de arquitecturas tolerantes a fallos: replicación, particionamiento y recuperación
- Mecanismos de sincronización y coherencia de datos
- Consideraciones de seguridad: autenticación, autorización, cifrado y auditoría
- Modelado y documentación del diseño
5. Integración y Presentación de Propuestas de Implementación
- Buenas prácticas de la industria en implementación de sistemas distribuidos
- Herramientas de colaboración y control de versiones
- Elaboración de propuestas técnicas: estructura, contenido y presentación
- Presentación efectiva ante audiencias técnicas y no técnicas
- Evaluación crítica y retroalimentación colaborativa
Actividades
Actividad 1: Análisis detallado de un caso de estudio en la industria financiera
Objetivo: Contribuye al objetivo de analizar casos de estudio representativos identificando componentes y arquitecturas clave.
Descripción paso a paso:
- Se proporciona un caso de estudio real sobre un sistema distribuido de trading financiero.
- Los estudiantes analizan la arquitectura del sistema, identificando módulos, protocolos y mecanismos de comunicación.
- Discuten en grupo los retos de diseño y las soluciones implementadas.
- Elaboran un informe que detalle los componentes y justifique las decisiones arquitectónicas.
Organización: Grupos de 3-4 estudiantes
Producto esperado: Informe escrito y presentación breve del análisis.
Duración estimada: 3 horas
Actividad 2: Evaluación comparativa de protocolos de comunicación en casos reales
Objetivo: Contribuye al objetivo de evaluar los protocolos y mecanismos de comunicación, justificando su elección.
Descripción paso a paso:
- Se asignan diferentes casos de aplicaciones distribuidas a parejas de estudiantes.
- Investigan los protocolos de comunicación usados y sus características técnicas.
- Comparan ventajas y desventajas según el contexto y requisitos del caso.
- Preparan una tabla comparativa y un breve informe justificando la elección del protocolo.
Organización: Parejas
Producto esperado: Tabla comparativa y documento justificativo.
Duración estimada: 2 horas
Actividad 3: Diseño de una solución distribuida para un caso práctico
Objetivo: Contribuye al objetivo de diseñar soluciones distribuidas considerando tolerancia a fallos, sincronización y seguridad.
Descripción paso a paso:
- Se presenta un caso práctico (por ejemplo, sistema distribuido para gestión de inventarios en comercio electrónico).
- Los estudiantes, organizados en grupos, realizan el diseño de la arquitectura del sistema.
- Incluyen componentes, protocolos, mecanismos de tolerancia a fallos, sincronización y seguridad.
- Documentan el diseño con diagramas arquitectónicos y una memoria técnica.
Organización: Grupos de 4-5 estudiantes
Producto esperado: Documento de diseño y diagramas UML o similares.
Duración estimada: 4 horas
Actividad 4: Presentación y defensa de una propuesta de implementación en proyecto colaborativo
Objetivo: Contribuye al objetivo de integrar y presentar propuestas aplicando buenas prácticas.
Descripción paso a paso:
- Los grupos desarrollan una propuesta completa de implementación basada en un caso asignado.
- Preparan una presentación que resuma diseño, protocolos, mecanismos y aspectos de seguridad y tolerancia.
- Presentan ante la clase simulando un comité técnico, respondiendo preguntas y defendiendo decisiones.
- Reciben retroalimentación tanto del docente como de los compañeros.
Organización: Grupos de 4-5 estudiantes
Producto esperado: Presentación oral y documento final de propuesta.
Duración estimada: 3 horas
Evaluación
Evaluación Diagnóstica
Qué se evalúa: Conocimientos previos sobre sistemas distribuidos, arquitecturas y protocolos de comunicación.
Cómo se evalúa: Prueba corta con preguntas de opción múltiple y preguntas abiertas sobre conceptos básicos.
Instrumento sugerido: Test en línea o en papel al inicio de la unidad.
Evaluación Formativa
Qué se evalúa: Progreso en la comprensión y aplicación de conceptos mediante actividades prácticas.
- Revisión de informes y tablas comparativas de las actividades 1 y 2.
- Observación y retroalimentación durante el diseño de la solución en la actividad 3.
- Feedback sobre presentaciones y defensa en la actividad 4.
Instrumento sugerido: Rúbricas para informes, diseños y presentaciones; listas de cotejo y observación directa.
Evaluación Sumativa
Qué se evalúa: Dominio integral de los objetivos de la unidad: análisis, evaluación, diseño e integración de aplicaciones distribuidas.
Cómo se evalúa: Calificación final basada en la calidad y profundidad del proyecto final (actividad 4) y un examen escrito que incluya análisis de casos y diseño.
Instrumento sugerido: Rúbrica detallada para proyecto final y examen escrito con preguntas de desarrollo y casos prácticos.
Duración
La unidad "Casos de Estudio y Aplicaciones Reales" está diseñada para desarrollarse en 3 semanas académicas, con una dedicación aproximada de 12 horas en total. La distribución sugerida es:
- Semana 1 (4 horas): Introducción y análisis de casos de estudio (temas 1 y 2), realización de la actividad 1.
- Semana 2 (4 horas): Protocolos y mecanismos de comunicación, evaluación comparativa y diseño de soluciones (temas 3 y 4), realización de actividades 2 y 3.
- Semana 3 (4 horas): Integración y presentación de propuestas (tema 5), realización de actividad 4, evaluaciones formativa y sumativa.
Proyecto Integrador I
Diseño y planificación de una aplicación distribuida que integre conceptos y técnicas aprendidas.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de diseñar una arquitectura de aplicación distribuida que integre los conceptos y componentes clave aprendidos, considerando requisitos funcionales y no funcionales específicos.
- Al finalizar la unidad, el estudiante será capaz de planificar y documentar el desarrollo de una aplicación distribuida, incluyendo la selección de protocolos de comunicación y mecanismos de sincronización adecuados para el proyecto.
- Al finalizar la unidad, el estudiante será capaz de aplicar estrategias de tolerancia a fallos y seguridad en la planificación del proyecto para garantizar la robustez y protección de la aplicación distribuida.
- Al finalizar la unidad, el estudiante será capaz de colaborar efectivamente en equipo para integrar soluciones distribuidas, utilizando herramientas de gestión de proyectos y control de versiones durante la fase de diseño y planificación.
- Al finalizar la unidad, el estudiante será capaz de evaluar críticamente las decisiones de diseño tomadas en la planificación, justificando su adecuación a los objetivos y limitaciones del proyecto.
Contenidos Temáticos
1. Introducción al Proyecto Integrador
- Objetivos generales del proyecto integrador y su importancia en el aprendizaje.
- Revisión de conceptos clave de aplicaciones distribuidas relevantes para el proyecto.
- Presentación del caso o problema a resolver mediante la aplicación distribuida.
2. Diseño de Arquitectura de Aplicaciones Distribuidas
- Revisión y análisis de requisitos funcionales y no funcionales específicos del proyecto.
- Modelos arquitectónicos comunes en aplicaciones distribuidas (cliente-servidor, microservicios, event-driven, etc.).
- Componentes y módulos clave: servicios, bases de datos distribuidas, middleware, front-end y back-end.
- Diagramas de arquitectura: cómo representar la arquitectura de la aplicación distribuida.
3. Planificación y Documentación del Desarrollo
- Selección de protocolos de comunicación (HTTP/HTTPS, gRPC, MQTT, WebSockets, etc.) y criterios para su elección.
- Mecanismos de sincronización y coordinación (locks distribuidos, consenso, relojes lógicos, etc.).
- Herramientas y formatos para la documentación técnica: diagramas UML, diagramas de secuencia, documentación de APIs.
- Planificación temporal y asignación de tareas: cronogramas, hitos y entregables.
4. Tolerancia a Fallos y Seguridad en Aplicaciones Distribuidas
- Estrategias de tolerancia a fallos: replicación, detección y recuperación de fallos, redundancia.
- Patrones de diseño para robustez: circuit breaker, retry, fallback.
- Seguridad en aplicaciones distribuidas: autenticación, autorización, cifrado de datos en tránsito y en reposo.
- Consideraciones de seguridad en comunicación y almacenamiento distribuido.
5. Trabajo Colaborativo y Gestión del Proyecto
- Herramientas de control de versiones (Git, GitHub/GitLab/Bitbucket): ramas, pull requests, resolución de conflictos.
- Gestión de proyectos: metodologías ágiles (Scrum, Kanban) aplicadas al proyecto integrador.
- Comunicación efectiva en equipos distribuidos: roles, reuniones, documentación compartida.
6. Evaluación Crítica y Justificación de Decisiones de Diseño
- Análisis crítico de las alternativas de diseño consideradas.
- Justificación basada en requisitos, limitaciones técnicas y contexto del proyecto.
- Impacto de las decisiones en la escalabilidad, mantenibilidad y rendimiento de la aplicación.
- Reflexión sobre posibles mejoras y riesgos asociados.
Actividades
Actividad 1: Análisis y Diseño de Arquitectura
Objetivo: Diseñar una arquitectura de aplicación distribuida que integre conceptos clave y considere requisitos específicos.
Descripción:
- Se presenta un caso de estudio con requisitos funcionales y no funcionales.
- En grupos, los estudiantes diseñan la arquitectura propuesta, identificando componentes, protocolos y diagramas de arquitectura.
- Preparan una presentación breve para explicar su diseño y las decisiones tomadas.
Organización: Grupos de 3-4 estudiantes.
Producto esperado: Documento de diseño arquitectónico con diagramas y presentación oral.
Duración estimada: 3 horas.
Actividad 2: Planificación y Documentación Técnica
Objetivo: Planificar el desarrollo de la aplicación, seleccionando protocolos y mecanismos adecuados, y documentar la planificación técnica.
Descripción:
- Cada grupo elabora un plan detallado que incluya selección de protocolos de comunicación y mecanismos de sincronización.
- Documentan el plan usando diagramas UML y un cronograma de desarrollo con hitos.
- Suben la documentación a un repositorio compartido y realizan una revisión cruzada entre grupos.
Organización: Grupos de 3-4 estudiantes.
Producto esperado: Plan de desarrollo documentado y repositorio con documentación técnica.
Duración estimada: 4 horas.
Actividad 3: Diseño de Estrategias de Tolerancia a Fallos y Seguridad
Objetivo: Aplicar estrategias de tolerancia a fallos y seguridad en la planificación del proyecto para garantizar robustez y protección.
Descripción:
- En grupos, identifican posibles fallos y vulnerabilidades en la arquitectura propuesta.
- Diseñan estrategias específicas para tolerancia a fallos y mecanismos de seguridad.
- Elaboran un informe justificando las decisiones y cómo se integran en el diseño general.
Organización: Grupos de 3-4 estudiantes.
Producto esperado: Informe de estrategias de tolerancia a fallos y seguridad con justificación técnica.
Duración estimada: 3 horas.
Actividad 4: Simulación de Gestión Colaborativa y Evaluación Crítica
Objetivo: Practicar la colaboración efectiva usando herramientas de gestión y evaluar críticamente las decisiones de diseño.
Descripción:
- Los grupos configuran un repositorio Git con control de versiones para el proyecto.
- Simulan un flujo de trabajo colaborativo con ramas, pull requests y resolución de conflictos.
- Realizan una sesión de retroalimentación para evaluar críticamente el diseño, identificando fortalezas y áreas de mejora.
- Documentan las conclusiones y planes de acción para iterar en el diseño.
Organización: Grupos de 3-4 estudiantes.
Producto esperado: Repositorio configurado con historial de trabajo colaborativo y documento de evaluación crítica final.
Duración estimada: 4 horas.
Evaluación
Evaluación Diagnóstica
Se evalúa el conocimiento previo sobre arquitecturas distribuidas, protocolos y conceptos básicos.
- Instrumento: Cuestionario diagnóstico en línea con preguntas de opción múltiple y cortas.
- Momento: Al inicio de la unidad.
- Propósito: Identificar fortalezas y áreas que requieren mayor énfasis en la unidad.
Evaluación Formativa
Se evalúa el progreso en el diseño, documentación y planificación mediante retroalimentación continua.
- Instrumentos: Revisión de entregables parciales (documentos de diseño, planes, informes), observación de presentaciones y participación en actividades colaborativas.
- Momento: Durante el desarrollo de las actividades.
- Propósito: Orientar mejoras y reforzar conceptos, fomentando la autoevaluación y coevaluación.
Evaluación Sumativa
Se evalúa la competencia global de la unidad considerando todos los objetivos planteados.
- Instrumento: Entrega final del proyecto integrador con documento completo de arquitectura, planificación, estrategias de tolerancia a fallos y seguridad, junto con la presentación oral grupal y repositorio con evidencias de trabajo colaborativo.
- Criterios: Calidad y coherencia del diseño, justificación de decisiones, uso adecuado de protocolos y mecanismos, integración de seguridad y tolerancia a fallos, y efectividad en la colaboración en equipo.
- Momento: Al finalizar la unidad.
Duración
Se sugiere una duración total de 3 semanas para esta unidad, con una distribución aproximada de:
- Semana 1: Introducción, análisis de requisitos y diseño arquitectónico (6 horas).
- Semana 2: Planificación, documentación técnica y diseño de estrategias de tolerancia a fallos y seguridad (8 horas).
- Semana 3: Trabajo colaborativo, simulación con control de versiones, evaluación crítica y presentación final (8 horas).
Las horas incluyen actividades en clase y trabajo autónomo supervisado.
Proyecto Integrador II y Presentación Final
Implementación, pruebas, documentación y presentación del proyecto integrador.
Objetivos de Aprendizaje
- Al finalizar la unidad, el estudiante será capaz de implementar el proyecto integrador utilizando tecnologías y arquitecturas de aplicaciones distribuidas, cumpliendo con los requisitos funcionales y no funcionales establecidos.
- Al finalizar la unidad, el estudiante será capaz de diseñar y ejecutar pruebas sistemáticas para validar la funcionalidad, rendimiento y seguridad del sistema distribuido desarrollado.
- Al finalizar la unidad, el estudiante será capaz de elaborar documentación técnica clara y coherente que describa la arquitectura, implementación, pruebas y resultados del proyecto integrador.
- Al finalizar la unidad, el estudiante será capaz de presentar de manera efectiva el proyecto integrador, comunicando los aspectos técnicos y resultados obtenidos ante un público académico.
- Al finalizar la unidad, el estudiante será capaz de integrar y coordinar el trabajo colaborativo del equipo para optimizar la entrega y calidad del proyecto integrador final.
Contenidos Temáticos
1. Implementación del Proyecto Integrador
-
Revisión de requisitos funcionales y no funcionales
Análisis detallado de los requisitos para asegurar la correcta implementación del sistema distribuido. -
Elección y aplicación de tecnologías y arquitecturas
Selección de frameworks, lenguajes, patrones de diseño y arquitecturas distribuidas (microservicios, colas de mensajes, etc.) adecuadas al proyecto. -
Desarrollo colaborativo y control de versiones
Uso de herramientas como Git para gestión del código y coordinación del trabajo en equipo. -
Integración continua y despliegue
Configuración de pipelines para integración continua, pruebas automatizadas y despliegue en entornos de prueba o producción.
2. Diseño y Ejecución de Pruebas Sistemáticas
-
Planificación de pruebas
Definición de casos de prueba para validar funcionalidad, rendimiento y seguridad. -
Pruebas funcionales
Verificación del correcto funcionamiento de cada componente y la integración entre ellos. -
Pruebas de rendimiento y escalabilidad
Uso de herramientas para medir tiempos de respuesta, carga y comportamiento bajo estrés. -
Pruebas de seguridad
Validación de mecanismos de autenticación, autorización y protección contra vulnerabilidades comunes. -
Documentación y análisis de resultados
Registro sistemático de incidencias y conclusiones sobre la calidad del sistema.
3. Elaboración de Documentación Técnica Integral
-
Documentación de arquitectura
Descripción clara de la arquitectura implementada, diagramas y justificación de decisiones. -
Documentación de implementación
Detalle del desarrollo, configuración y uso de tecnologías y componentes. -
Documentación de pruebas
Reportes de casos de prueba, resultados y análisis. -
Manual de usuario y guía de despliegue
Instrucciones para la instalación, configuración y uso básico del sistema.
4. Presentación Efectiva del Proyecto Integrador
-
Preparación de la presentación
Diseño de diapositivas y materiales visuales que sintetizan los aspectos técnicos y resultados. -
Técnicas de comunicación oral
Estrategias para explicar conceptos complejos de forma clara y responder preguntas del público académico. -
Simulación y retroalimentación
Ensayos de presentación con revisión crítica para optimizar el desempeño.
5. Coordinación y Trabajo Colaborativo en el Equipo
-
Roles y responsabilidades
Asignación clara de tareas para optimizar la productividad y calidad del proyecto. -
Herramientas de colaboración
Uso de plataformas para gestión de proyectos, comunicación y documentación compartida. -
Resolución de conflictos y toma de decisiones
Estrategias para manejar desacuerdos y asegurar el avance coordinado. -
Evaluación y mejora continua del trabajo en equipo
Retroalimentación periódica para optimizar procesos y resultados.
Actividades
Implementación Colaborativa del Proyecto Integrador
Objetivo: Implementar el proyecto integrador utilizando tecnologías distribuidas, cumpliendo requisitos funcionales y no funcionales.
Descripción:
- Formar equipos de trabajo y revisar conjuntamente los requisitos del proyecto.
- Seleccionar tecnologías y arquitecturas adecuadas para la implementación.
- Distribuir tareas entre los integrantes del equipo y gestionar el repositorio de código.
- Desarrollar e integrar los componentes siguiendo buenas prácticas de programación y control de versiones.
- Realizar despliegues en entornos de prueba para validar la integración continua.
Organización: Grupos
Producto esperado: Código fuente funcional con control de versiones y despliegue en entorno de prueba.
Duración estimada: 3 semanas
Diseño y Ejecución de Pruebas Sistemáticas
Objetivo: Diseñar y ejecutar pruebas para validar funcionalidad, rendimiento y seguridad del sistema distribuido.
Descripción:
- Elaborar un plan de pruebas detallado que incluya tipos de pruebas y casos específicos.
- Ejecutar pruebas funcionales verificando cada módulo y la integración completa.
- Realizar pruebas de carga y estrés utilizando herramientas especializadas.
- Ejecutar pruebas de seguridad básicas para detectar vulnerabilidades comunes.
- Documentar los resultados y proponer mejoras basadas en los hallazgos.
Organización: Grupos
Producto esperado: Informe de pruebas con resultados y recomendaciones.
Duración estimada: 1.5 semanas
Elaboración de Documentación Técnica Integral
Objetivo: Elaborar documentación técnica clara que describa la arquitectura, implementación, pruebas y resultados.
Descripción:
- Redactar la descripción de la arquitectura con diagramas y justificaciones.
- Documentar las implementaciones técnicas y configuraciones utilizadas.
- Incluir reportes de pruebas y análisis de resultados.
- Preparar manuales para usuarios y para el despliegue del sistema.
- Revisar y corregir la documentación para asegurar coherencia y claridad.
Organización: Grupos
Producto esperado: Documento técnico completo y manuales asociados.
Duración estimada: 1 semana
Presentación Final del Proyecto Integrador
Objetivo: Presentar de manera efectiva el proyecto integrador ante un público académico.
Descripción:
- Preparar diapositivas y materiales visuales que comuniquen claramente los aspectos técnicos y resultados.
- Ensayar la presentación en equipo, distribuyendo roles y tiempos.
- Simular preguntas y respuestas para anticipar dudas del público.
- Realizar la presentación formal ante el docente y compañeros.
- Recibir retroalimentación para evaluar la comunicación y dominio del tema.
Organización: Grupos
Producto esperado: Presentación oral apoyada con materiales visuales.
Duración estimada: 0.5 semanas
Evaluación
Evaluación Diagnóstica
Qué se evalúa: Conocimientos previos sobre arquitecturas distribuidas, metodologías de pruebas y documentación técnica.
Cómo se evalúa: Cuestionario de opción múltiple y preguntas abiertas al inicio de la unidad.
Instrumento sugerido: Test en línea o en papel con preguntas sobre conceptos clave y experiencias previas.
Evaluación Formativa
Qué se evalúa: Progreso en la implementación, calidad y cobertura de pruebas, avance en documentación y preparación para presentación.
Cómo se evalúa: Revisión de entregables parciales, sesiones de retroalimentación, observación del trabajo colaborativo y autoevaluaciones.
Instrumento sugerido: Rúbricas para código, informes de prueba, documentación técnica y desempeño en simulacros de presentación; reportes de progreso del equipo.
Evaluación Sumativa
Qué se evalúa: Calidad integral del proyecto integrador: implementación funcional, pruebas sistemáticas, documentación completa, presentación efectiva y desempeño colaborativo.
Cómo se evalúa: Evaluación final con revisión del sistema desplegado, análisis de documentación, presentación oral y evaluación del trabajo en equipo.
Instrumento sugerido: Rúbrica detallada que contemple criterios técnicos, comunicativos y colaborativos, además de una entrevista o defensa final ante el docente.
Duración
La unidad "Proyecto Integrador II y Presentación Final" está diseñada para desarrollarse en un total de 6 semanas, distribuidas de la siguiente manera:
- 3 semanas para la implementación colaborativa del proyecto, donde los estudiantes desarrollan el sistema y gestionan el código.
- 1.5 semanas dedicadas al diseño y ejecución de pruebas sistemáticas, incluyendo documentación de resultados.
- 1 semana para la elaboración de la documentación técnica integral que acompañe el proyecto.
- 0.5 semanas para la preparación y realización de la presentación final del proyecto integrador.
Esta distribución permite un abordaje sistemático y progresivo, fomentando el trabajo en equipo, la aplicación práctica y la comunicación efectiva.
Crea tus propios cursos con EdutekaLab
Diseña cursos completos con unidades, objetivos y actividades usando IA.
Comenzar gratis