Available courses

La masificación del uso de los computadores y su interconexión en redes constituye la base de la tecnología actual en la cual son explotables las aplicaciones distribuidas. De allí que los conocimientos que permitan desarrollar de manera eficiente aplicaciones distribuidas constituye un pilar esencial en la formación. El propósito de esta asignatura familiarizar al estudiante con conocimientos generales sobre sistemas distribuidos, herramientas y soluciones específicos en el área y con problemas conocidos relacionados con los sistemas distribuidos. 

Al finalizar el curso el estudiante estará en capacidad de:

  • Manejar conceptos básicos relacionados con sistemas distribuidos.

  • Comprender propiedades de los algoritmos distribuidos y establecer comparaciones entre algoritmos distribuidos.

  • Identificar problemas claves en sistemas distribuidos y comprender algoritmos clásicos definidos para resolverlos.

  • Desarrollar algoritmos distribuidos.


El propósito de esta materia es proporcionar al estudiante conocimientos teórico-prácticos que le permitan comprender los componentes fundamentales de los sistemas distribuidos.

El curso tendrá un carácter teórico-práctico a fin de familiarizar al estudiante con herramientas básicas de programación sobre plataformas distribuidas.

El contenido de este curso está organizado en siete temas: Generalidades de los sistemas distribuidos, comunicación, procesos, nominación, consistencia y duplicación, tolerancia a fallas y seguridad. Simultáneamente se estudian herramientas básicas de programación distribuida, tales como los sockets y librerías de comunicación.

Al finalizar el curso, el estudiante será capaz de identificar los componentes principales de un sistema distribuido y habrá adquirido conocimientos necesarios para analizar, diseñar y evaluar soluciones para ambientes de computación distribuida. Así mismo se habrá familiarizado con alguna herramienta básica de programación de aplicaciones distribuidas.

Sistema distribuido

Un sistema distribuido se define como una colección de computadoras separadas físicamente y conectadas entre sí por una red de comunicaciones; cada máquina posee sus componentes de hardware y software que el programador percibe como un solo sistema (no necesita saber qué cosas están en qué máquinas). El programador accede a los componentes de software (objetos) remotos, de la misma manera en que accedería a componentes locales, en un grupo de computadoras que usan un middleware entre los que destacan (RPC) y SOAP para conseguir un objetivo.

Los sistemas distribuidos deben ser muy confiables, ya que si un componente del sistema se descompone, otro componente debe ser capaz de reemplazarlo. Esto se denomina tolerancia a fallos.

El tamaño de un sistema distribuido puede ser muy variado, ya sean decenas de hosts (red de área local), centenas de hosts (red de área metropolitana), o miles, o millones de hosts (Internet); esto se denomina escalabilidad. 1​


El propósito de esta materia es proporcionar al estudiante conocimientos teórico-prácticos que le permitan comprender los componentes fundamentales de los sistemas distribuidos.

El curso tendrá un carácter teórico-práctico a fin de familiarizar al estudiante con herramientas básicas de programación sobre plataformas distribuidas.

El contenido de este curso está organizado en siete temas: Generalidades de los sistemas distribuidos, comunicación, procesos, nominación, consistencia y duplicación, tolerancia a fallas y seguridad. Simultáneamente se estudian herramientas básicas de programación distribuida, tales como los sockets y librerías de comunicación.

Al finalizar el curso, el estudiante será capaz de identificar los componentes principales de un sistema distribuido y habrá adquirido conocimientos necesarios para analizar, diseñar y evaluar soluciones para ambientes de computación distribuida. Así mismo se habrá familiarizado con alguna herramienta básica de programación de aplicaciones distribuidas.

Sistema distribuido

Un sistema distribuido se define como una colección de computadoras separadas físicamente y conectadas entre sí por una red de comunicaciones; cada máquina posee sus componentes de hardware y software que el programador percibe como un solo sistema (no necesita saber qué cosas están en qué máquinas). El programador accede a los componentes de software (objetos) remotos, de la misma manera en que accedería a componentes locales, en un grupo de computadoras que usan un middleware entre los que destacan (RPC) y SOAP para conseguir un objetivo.

Los sistemas distribuidos deben ser muy confiables, ya que si un componente del sistema se descompone, otro componente debe ser capaz de reemplazarlo. Esto se denomina tolerancia a fallos.

El tamaño de un sistema distribuido puede ser muy variado, ya sean decenas de hosts (red de área local), centenas de hosts (red de área metropolitana), o miles, o millones de hosts (Internet); esto se denomina escalabilidad. 1​

Las aplicaciones web desempeñan un papel vital en todas las organizaciones modernas. Pero, si una organización no prueba y asegura adecuadamente sus aplicaciones web, los adversarios pueden comprometer estas aplicaciones, dañar la funcionalidad de la empresa y robar datos. Las aplicaciones web son actualmente la fuente predominante de vulnerabilidades de software explotadas en ataques en línea en todo el mundo. La mayoría de estos ataques explotan clases simples y fácilmente reparables de vulnerabilidades de seguridad. Desafortunadamente, muchas organizaciones operan bajo la impresión errónea de que un escáner de seguridad de aplicaciones web descubrirá de manera confiable fallas en sus sistemas. Existe una necesidad clara y muy insatisfecha de que todos los programadores web tengan conocimientos de seguridad. También hay una gran escasez mundial de profesionales de la seguridad capaces de evaluar la seguridad de las aplicaciones web.

Este curso proporciona una introducción a la rama de la seguridad de la información denominada Seguridad de Aplicaciones Web que trata específicamente con la seguridad de los sitios web, las aplicaciones web y los servicios web. Se cubren los principales tipos de vulnerabilidades en las aplicaciones web y se introducen las mejores prácticas profesionales actuales en codificación y testing, proporcionando el conocimiento y habilidades primordiales necesarias para desarrollar y evaluar aplicaciones web de manera satisfactoria.

El abordaje de este tema se hace principalmente a través del conocimiento de las principales técnicas que emplean los atacantes para vulnerar los sistemas de las organizaciones. Parte del principio de que para poder realizar una buena defensa, es necesario conocer las amenazas. Este enfoque permite que los estudiantes puedan adentrarse en este campo, y que además de emplear soluciones de escaneo de vulnerabilidades, puedan realizar penetration testing de aplicaciones web.


     La ciencia de la computación es una disciplina que se basa en un elemento tecnológico: el computador. Existe una relación fundamental entre el hardware y diversos aspectos de programación, por ende, para poder escribir software de forma adecuada es muy importante comprender el sistema de computación como un todo. Debido a esto se requiere un dominio de los aspectos teóricos y de los fundamentos tecnológicos involucrados en todo sistema de cómputo. El curso es de carácter teórico-práctico, involucrando a su vez el desarrollo de proyectos y laboratorios que permiten poner en práctica los conocimientos impartidos.

La computación en la nube ayuda a las organizaciones a obtener ahorros de costos y eficiencias sin gastar recursos de capital por adelantado, al tiempo que moderniza y expande sus capacidades de TI. La infraestructura basada en la nube es rápidamente escalable, segura y accesible a través de Internet: se paga solo por lo que usa. Por lo tanto, las empresas de todo el mundo, grandes y pequeñas, se están moviendo hacia soluciones de computación en la nube para satisfacer sus necesidades computacionales, incluido el uso de Infraestructura como servicio (IaaS) y Plataforma como servicio (PaaS). También se ha observado un cambio fundamental del software distribuido de forma masiva para su instalación, al software como servicio (SaaS) en los centros de datos de todo el mundo. Además, proveedores como Amazon, Google y Microsoft han abierto sus centros de datos a terceros al proporcionar servicios de bajo nivel como almacenamiento, computación y ancho de banda. Esta tendencia está creando la necesidad de un nuevo tipo profesional que pueda ser arquitecto empresarial, desarrollador, realizar control de calidad y a la vez ser operativo, alguien que comprenda y pueda utilizar de manera efectiva las tecnologías y soluciones de computación en la nube.

En este curso, los estudiantes estarán expuestos a temas críticos y prácticas actuales de la computación en nube, como los modelos de servicio en la nube (IaaS, PaaS, SaaS); virtualización y cómo se relaciona con la nube; computación elástica; almacenamiento en la nube; redes en la nube; bases de datos en la nube; seguridad en la nube; y arquitectura, desarrollo e implementación de aplicaciones en la nube, factores motivadores, beneficios y desafíos de la nube, problemas de rendimiento y a nivel de sistema, recuperación ante desastres, nubes federadas. El formato de este curso será una mezcla de clases teóricas y demostraciones prácticas, tareas, presentaciones y proyectos que proporcionarán al estudiante una exposición a los principales servicios en la nube, como Amazon Web Services (AWS), Microsoft Azure o Google Compute Engine (GCE). Al completar este curso, los estudiantes tendrán una comprensión más profunda de lo que es la computación en la nube y las diversas tecnologías que la componen, junto con la experiencia práctica de trabajar con al menos un importante proveedor de la nube. Los talleres se harán sobre alguna de las principales infraestructuras de Nube, aprovechando los licenciamientos y acuerdos académicos existentes entre la UCV y proveedores de servicios en la nube.

El objetivo de este curso es ayudar a los estudiantes a comprender esta profunda transformación que está causando Cloud Computing y tecnologías emergentes relacionadas, como la Inteligencia Artificial. Este curso revisará las tecnologías de Cloud Computing que darán forma a nuestro futuro cercano, así como también intentará visualizar en qué dirección nos llevará esta tecnología.