Tutorial 4 - Sidecar, Adaptadores y Embajadores
Repositorio con código base para el desarrollo de sidecars, adaptadores y embajadores. En este repositorio se presenta como crear un adaptador gRPC para que sistemas externos se puedan comunicar con un sistema legado usando un API REST. Para conocer más acerca de gRPC en Python puede consultar el siguiente link.
Este repositorio está basado en el repositorio de arquitectura hexagonal visto en el tutorial 3 del curso. Por tal motivo, puede usar ese mismo repositorio para entender algunos detalles que este README no cubre.
Estructura del proyecto
Este repositorio sigue en general la misma estructura del repositorio de origen. Sin embargo, hay un par de adiciones importantes a mencionar:
- src/sidecar: En este directorio encuentra el código para el adaptador gRPC de AeroAlpes. En el, podrá encontrar el módulo
aeroalpes
, el cual cuenta con la definición de los servicios gRPC y mensajes Protobuf en el directorioprotos
. Por otra parte, el móduloservicios
implementa las interfaces definidas en los archivos proto anteriomente descritos. Finalmente el módulopb2py
aloja los archivos compilados.proto
en Python (para ver como compilarlos lea la siguientes secciones). El archivomain.py
corre el servidor ycliente.py
un cliente que crea una reserva usando un mensaje en JSON definido en el directoriomensajes
. - .Dockerfile: Cada servicio cuenta con un Dockerfile para la creación de la imagen y futura ejecución de la misma. El archivo
adaptador.Dockerfile
es el encargado de instalar las dependencias de nuestro servicio en gRPC y los comandos de ejecución. Mientras que el archivoaeroalpes.Dockerfile
es el encargado de definir nuestro backend. - docker-compose.yml: Este archivo nos define la forma de componer nuestros servicios. En este caso usted puede ver como creamos el Sidecar/adaptador por medio del uso de una red común para la comunicación entre contenedoras. En el caso de desplegar esta topología en un orquestador de contenedoras, el concepto va a ser similar.
- sidecar-aeroalpes.yml: Este es un archivo template para el despliegue de las contenedoras en mismo Pod en Kubernetes. Podrá observar que solo se expone el puerto del servicio gRPC, el cual sirve como adaptador con la contenedora del backend de AeroAlpes. Puede modificar y extender este template para desplegarlo en su cluster personal.
AeroAlpes
Ejecutar Aplicación
Desde el directorio principal ejecute el siguiente comando.
flask --app src/aeroalpes/api run
Siempre puede ejecutarlo en modo DEBUG:
flask --app src/aeroalpes/api --debug run
Ejecutar pruebas
coverage run -m pytest
Ver reporte de covertura
coverage report
Crear imagen Docker
Desde el directorio principal ejecute el siguiente comando.
docker build . -f aeroalpes.Dockerfile -t aeroalpes/flask
Ejecutar contenedora (sin compose)
Desde el directorio principal ejecute el siguiente comando.
docker run -p 5000:5000 aeroalpes/flask
Sidecar/Adaptador
Instalar librerías
En el mundo real es probable que ambos proyectos estén en repositorios separados, pero por motivos pedagógicos y de simpleza,
estamos dejando ambos proyectos en un mismo repositorio. Sin embargo, usted puede encontrar un archivo sidecar-requirements.txt
,
el cual puede usar para instalar las dependencias de Python para el servidor y cliente gRPC.
pip install -r sidecar-requirements.txt
Ejecutar Servidor
Desde el directorio principal ejecute el siguiente comando.
python src/sidecar/main.py
Ejecutar Cliente
Desde el directorio principal ejecute el siguiente comando.
python src/sidecar/cliente.py
Compilación gRPC
Desde el directorio src/sidecar
ejecute el siguiente comando.
python -m grpc_tools.protoc -Iprotos --python_out=./pb2py --pyi_out=./pb2py --grpc_python_out=./pb2py protos/vuelos.proto
Crear imagen Docker
Desde el directorio principal ejecute el siguiente comando.
docker build . -f adaptador.Dockerfile -t aeroalpes/adaptador
Ejecutar contenedora (sin compose)
Desde el directorio principal ejecute el siguiente comando.
docker run -p 50051:50051 aeroalpes/adaptador
Docker-compose
Para desplegar toda la arquitectura en un solo comando, usamos docker-compose
. Para ello, desde el directorio principal, ejecute el siguiente comando:
docker-compose up
Si desea detener el ambiente ejecute:
docker-compose stop
En caso de querer desplegar dicha topología en el background puede usar el parametro -d
.
docker-compose up -d
Comandos útiles
Listar contenedoras en ejecución
docker ps
Listar todas las contenedoras
docker ps -a
Parar contenedora
docker stop <id_contenedora>
Eliminar contenedora
docker rm <id_contenedora>
Listar imágenes
docker images
Eliminar imágenes
docker images rm <id_imagen>
Acceder a una contendora
docker exec -it <id_contenedora> sh