Microservicios - Ejemplo con Docker, Go y MongoDB

Publicado el 24/08/2016

Introducción

Cinema es un proyecto ficticio que utiliza microservicios para el sistema de un cine. La lógica de Cinema está compuesta por 4 microservicios, todos escritos en Go, utilizando MongoDB para la gestión de datos y Docker para aislar y desplegar el ecosistema.

  • Servicio Users: Brinda información de los usuarios.
  • Servicio Movie: Brinda información de las películas como valoración, título, etc.
  • Servicio Show Times: Brinda información sobre la programación de las películas.
  • Servicio Booking: Brinda información sobre las reservaciones de los usuarios referente a la programación de las películas.

El caso de uso Cinema está basado en el proyecto escrito en Python por Umer Mansoor.

La estructura del proyecto está basada en el conocimiento obtenido del libro Web Development with Go escrito por Shiju Varghese, ISBN 978-1-4842-1053-6

Requerimientos

  • Docker 1.12
  • Docker Compose 1.8

Se tiene que agregar dominios virtuales en la máquina local para poder utilizar los puntos de entrada a las funcionalidades. Para el ejemplo se utiliza: movies.local, bookings.local, users.local y showtimes.local.

Los dominios virtuales han sido definidos en el fichero docker-compose.yml y configurados en el fichero /etc/hosts. Adicione la siguiente línea en el fichero /etc/hosts:

127.0.0.1   movies.local bookings.local users.local showtimes.local

Código fuente

Usted puede descargar el código fuente utilizando este enlace.

Diagrama de servicios

Iniciar servicios

docker-compose up -d

Detener servicios

docker-compose stop

Incluir nuevos cambios

Si necesita modificar el código fuente usted puede desplegar los nuevos cambios escribiendo:

docker-compose build

Restaurar información en la base de datos.

Puede iniciar los microservicios utilizando la base de datos vacía, pero si prefiere, puede restaurar un juego de datos siguiendo los siguientes pasos:

Acceda al contenedor de MongoDB escribiendo:

docker exec -it cinema-db /bin/bash

Restaure la información escribiendo:

/backup/restore.sh

Salga del contenedor:

exit

Documentación

Servicio User

Este servicio brinda información sobre los usuarios de Cinema.

Rutas:

  • GET - http://users.local/users : Obtiene todos los usuarios.
  • POST - http://users.local/users : Crea un usuario
  • DELETE - http://users.local/users/{id} : Elimina a un usuario por el id

Servicio Movie

Este es utilizado para gestionar la información de las películas. Cada película tiene el título, valoración en escala del 1-10, director, entre otros.

Rutas:

  • GET - http://movies.local/movies : Obtiene todas las películas
  • POST - http://movies.local/movies : Crea una película
  • GET - http://movies.local/movies/{id} : Obtiene una película por el id
  • DELETE - http://movies.local/movies/{id} : Elimina una película por el id

Servicio Showtimes

Este servicio brinda la programación de las películas en ciertas fechas.

Rutas:

  • GET - http://showtimes.local/showtimes : Obtiene todas las programaciones
  • POST - http://showtimes.local/showtimes : Crea una programación
  • GET - http://showtimes.local/showtimes/{id} : Obtiene una programación por el id
  • DELETE - http://showtimes.local/showtimes/{id} : Elimina una programación por el id

Servicio Booking

Este servicio brinda información sobre las reservaciones realizadas por los usuarios referente a las programaciones.

Rutas:

  • GET - http://bookings.local/bookings : Obtiene todas las reservaciones
  • POST - http://bookings.local/bookings : Crear una reservación.

Puertos expuestos

El puerto 27017 está expuesto para que sea consultado de manera local por el sistema Robomongo. El puerto 80 está expuesto para que sea consultado por dispositivos, navegadores webs u otros microservicios.

Pantallas

Iniciar servicios

Restaurar base de datos

Servicio - Obtener todos los usuarios (Postman)

Servicio - Obtener toas las películas (Postman)

Servicio - Obtener todos las programaciones (Postman)

Servicio - Obtener todos las reservaciones (Postman)

Base de datos, imagen completa (Robomongo)

Revisiones significativas

Publicado el 24/08/2016