IceFlix: diseño de microservicios - Entrega final de la convocatoria extraordinaria#
El objetivo principal del proyecto es desarrollar un sistema distribuido basado en microservicios. Para ello se tomará como modelo la popular plataforma de streaming NetFlix para crear una pequeña plataforma de streaming bajo demanda, utilizando algunos de los servicios disponibles en ZeroC ICE. Los objetivos principales de la práctica son:
Familiarizarse con la invocación a métodos remotos.
Control de eventos.
Diseñar algoritmos tolerantes a fallos comunes en sistemas distribuidos.
Utilización del servicio de distribución de eventos IceStorm.
Aumentar la cardinalidad de cada servicio, pudiendo lanzarse varias instancias del mismo.
Utilización de los canales de eventos para mantener el estado de la ejecución sincronizado.
Desacoplar la comunicación entre servicios a través de comunicación indirecta de uno a muchos.
Fomentar el trabajo en equipos multidisciplinares.
Introducción#
Conocida por todos es la plataforma de streaming bajo demanda Netflix, lo que quizás no es tan popular es la gran competencia técnica que existe detrás, el increíble sistema distribuido que soporta el uso simultáneo de la plataforma por millones de usuarios en todo el mundo. No todos los detalles de su funcionamiento han sido publicados por la empresa, sin embargo, sí los suficientes para poder hacernos una idea general de su funcionamiento.

Fig. 2 Arquitectura de servicios de Netflix#
Una colección de microservicios soporta el funcionamiento de la plataforma: autenticación, facturación, catalogado, recodificación, análisis y profiling de clientes (big data), etc. Estos microservicios se ejecutan en varias regiones de AWS. Por otro lado, Netflix dispone de sus propios servidores físicos (OCA’s) que almacenan los archivos de vídeo y están diseñados específicamente para ofrecer un gran rendimiento en tareas de streaming.
Obviamente no se pretende crear una arquitectura de una complejidad semejante, pero sí intentaremos implementar una pequeña maqueta con una serie de microservicios que cooperarán entre sí para ofrecer video bajo demanda de una forma similar a como lo hace la conocida plataforma. No vamos a utilizar mecanismos de caché ni a implementar muchos de los servicios disponibles en la plataforma real: nos centraremos en autenticación, catalogado de medios y transferencia de fichero (en lugar de streaming).
Además de lo anterior, debemos enfrentarnos a problemas como mantener la coherencia del estado entre las diferentes instancias de cada servicio, o cómo comunicar ciertos cambios entre los servicios.