Microservices Especificación - HazelMartinez/Microservices GitHub Wiki
Objetivo General
Desarrollar una aplicación web que permita la interacción de un servicio de almacenamiento de información con un servicio de compresión aplicado a estos mismos datos.
Objetivos Específicos
Implementar una aplicación web que interactúa con servicios.
Implementar un servicio para la aplicación de algoritmos de compresión.
Implementar un servicio para el almacenamiento de información.
Implementar la solución de un problema a partir de un diseño OOP.
Implementar patrones de diseño en la solución de un problema.
Descripción del Problema
Key technologies: Docker, Microservices, Docker Compose
La arquitectura por construir es la siguiente:
Web application:
Es un container que ejecuta Apache Httpd. En este Web Server, se ejecuta una aplicación web escrita en React JS. La aplicación es sumamente sencilla. Provee una tabla que lista archivos almacenados en la base de datos. Permite subir/descargar archivos y mantener su metadata: Nombre, descripción, fecha de creación, última actualización y usuario que lo crea. Como puede notar, la solución tiene un componente de autorización y autenticación. Es decir, debe solicitar login al usuario. No todos los usuarios pueden subir archivos, solo los que tengan ciertos permisos. El archivo se guarda en una tabla de la base de datos del container de File Storage junto con su metadata.
El archivo se comprime mediante el servicio provisto por el microservicio de compresión.
Para la interfaz gráfica se recomienda utilizar los componentes de Material UI de Google para React.
Authentication & Authorization:
Es un container que provee un REST API que se ejecuta en NodeJS y que se alimenta de un XML que contiene la lista de usuarios y sus permisos. La aplicación web se comunica directamente por HTTP con este container.
Compression Microservice
Es un container que ejecuta un Spring Boot. A este microservicio se le envía un stream de datos y lo retorna comprimido utilizando Huffman.
FileStorage API
Es un microservicio que interactúa con un motor de bases de datos MySQL. Se compone de dos containers: el container de la base de datos MySQL y el container que ejecuta Liberty para el API en Java.
Notas importantes:
DockerHub provee imágenes listas de MySQL y Liberty.
Docker compose es una forma sencilla para configurar el cluster de containers. Debe investigar cómo usarlo.
El DockerFile de MySQL debe especificar algún script que ud debe construir para ejecutar los DDLs para crear la estructura de la base de datos.
A criterio del grupo, pueden montar toda la tarea en algún PaaS comercial que se los permita.