18
Consumer Driven Contract With Pact
En la Actualidad a menudo pensamos en microservicios a la hora de hacer nuevas implementaciones o desarrollos. Este tipo de arquitecturas tiene bastantes ventajas a comparacione de aplicaciones monoliticas, pero asi mismo tambien tiene varios problemas que si no sabemos manejarlos podrian ocasionar problemas importantes en la alta disponibilidad de los Microservicios
Mayor Informacion: https://youtu.be/VHVPOonGK6s
Imaginemos que tenemos dos equipos A y B:
A necesita la informacion de los usuarios para la realizacion de pagos en el sistema. Para esto el equipo B debe crear un servicio el cual va a devolver esta informacion.
Entre los dos equipos hablean y llegan a nste acuerdo entre los servicios.
El tiempo pasa y esta integracion sigue funcionando bien. Hasta que un dia un desarrollador nuevo llega al equipo B. y piensa que el campo ID de ususario deberia ser un campo tipo int, en vez de un string, convence al equipo de esto, hace el desarrollo y hacen el despliegue. Como no comunicaron el cambio al equipo A. Cuando el servicio engine-service empuieza a hacer transacciones al servicio user-service empiezan a generarse errores 500. porque el tipo de dato de este campo no concuerda con el que habian acordado. Esto genero indisponibilidad y perdidas de mucho dinero en el lapso de tiempo en que se genero el error, se descubrio la causa y se reverso el cambio.
Esta clase de errores aunque muy simples,pueden generar mucho ruido en el ciclo de vida de desarrollo de las aplicacones. Por lo que es importante encontrar estrategias con las cuales podamos verificar los acuerdos de contratos de una manera automatizada.
Mayor Informacion: https://youtu.be/Mgm8HkG69TU
Tipo de Test que permite verificar la integracion entre dos o mas servicios permitiendo comprobar que la solucion para la evolucion de las APIS es Valida.
CDC divide el test en 2 partes que se pueden ejecutar en momentos distintos:
- Consumidor
- Productor del servicio
Consumidor : El servicio consumidor define reglas a las cuales debe acoplarse el servicio proveedor para que pueda funcionar de manera correcta. Luego de esto este acuerdo en formato JSON se sube a una locacion comun entre el consumidor y el proveedor.
Productor del servicio: El servicio proveedor descarga este acuerdo y empuieza a verificar que las reglas planteadas por el servicio consumidor las cumple, si es asi envia una notificacion a la locacion comun de lo contrario tambien notifica los errores.
Mayor Informacion: https://youtu.be/7z0B396vZXs
Multiples herramientas y frameworks se han desarrollado para poder solucionar este tipo de problemas los que mas se destacan son:
- Spring Cloud Contract
- Pact
Para el ejemplo implementado sera con pact.
Funcionamiento general de Pact:
Mayor Informacion:
Para la implementacion de nuestro ejemplo vamos a utilizar la siquiente arquitectura, la cual cuenta con multiples tecnologias e integraciones.
Para ver la demo del funcionamiento de esta arquitectura te invo a ver esta serie, donde se muestra paso a paso cada componeente y su interaccion con pact.
Repositorio ejemplo: https://github.com/jjoc007/poc-consumer-driven-contract-multi-language
18