Grupo Familia comienza en el año de 2001 su estrategia de relacionamiento con clientes cuando el internet daba sus primeros pasos en Colombia y en ese momento el reto era poder crear relaciones con clientes a través de contenido de valor. En el momento Grupo Familia trabajaba bajo una arquitectura on-premise que no respondía a las necesidades de ese momento y a la proyección que se tenían planeada.
Un requerimiento de suma importancia en este proyecto es que la solución debe tener la capacidad de poder entregar actualizaciones en producción de una manera más ágil, fiable y recurrente, adicionalmente tener la capacidad de ser resiliente ante un error en los despliegues y que nos permita tener la capacidad de recuperarnos prontamente con la mínima intervención manual.
El proceso de mejora se apalancó en una estrategia de CI/CD enfocada en automatizar el despliegue del flujo de valor de forma ágil y sin intervención manual, tanto para los despliegues como para automatizar la recuperación del sistema.
Se enfocó en el diseño de una arquitectura tecnológica respaldada en una infraestructura totalmente basada en la nube que permitiera ajustarse continuamente y atender sin inconvenientes la creciente demanda en funcionalidades y usuarios.
La arquitectura es desacoplada, basada en microservicios y microfrontends logrando el mayor aprovechamiento de la nube desde sus diferentes servicios como IaaS, PaaS y SaaS. Se logró alinear procesos, datos, herramientas e infraestructura, además de estandarizar integraciones con terceros.
Como pilar fundamental de la solución se implementó un modelo DevOps apalancado en CI/CD con herramientas como Jenkins, que permite desplegar las diferentes iniciativas de negocio en tiempos óptimos, infraestructura como código con Terraform y servicios como AWS EKS con contenedores orientados a microservicios elásticos y escalables según las necesidades del tráfico, favoreciendo así la continuidad del negocio.
Para las soluciones de back-end, que se crean con Java SpringBoot y se almacenan en contenedores con Docker, los pipelines incluyen 7 etapas (Inicializar, Obtener código, Crear código, Pruebas unitarias, Análisis de código, Crear/Publicar imagen e Implementar) y un proceso final para la detección de fallas en el proceso de implementación.
En caso de algún error en el proceso de despliegue se genera una notificación informando el error para que pueda ser validado y corregido.
Para las pruebas de back-end se realizan dos tipos: con el equipo de QA se realizan pruebas de caja negra automatizadas con Postman, con múltiples escenarios probados y con la unidad del equipo de Back-end se entregan pruebas con una cobertura mínima del 80%, evaluadas por la herramienta SonarQube .
El IaC se implementa a través de Terraform utilizando una estrategia de módulos para segmentar la infraestructura de cada uno de los sitios del cliente, el código se almacena dentro de un repositorio en GitLab.
Al monitorear la solución con servicios como AWS CloudWatch y AWS OpenSearch, se pueden tomar acciones preventivas basadas en métricas de valor que ayudan a los recursos a ser costo eficientes.
Dentro de las herramientas de terceros utilizamos Microsoft VSCode como IDE. Debido al hecho de que el código de AWS Lambda Functions está en NodeJs y ReactJS, VS Code es la herramienta adecuada para el desarrollo en lenguajes basados en javascript.
Para la configuración e implementación del servicio, utilizamos Serverless Framework. Para el repositorio de código, la gestión de la configuración y las integraciones continuas, utilizamos Jenkins.
Se logró realizar entregas de contenido en menos de una hora reduciendo en un 80% aproximadamente el tiempo.
Despliegues de componentes en AWS EKS en máximo 10 minutos por microservicio, mejorando el tiempo de entrega en 1 día aproximadamente comparado con la anterior solución legacy.
Otra problemática solucionada fue la capacidad que obtuvimos de la recuperación del sistema por fallos en los despliegues, implementando infraestructura como código, logrando así que en 1 hora tengamos nuevamente todo el sitio al aire y no varias horas o días como sucedía con la arquitectura anterior.