Microservicios, introducir cambios de forma segura

Anamnesis de un motivado

Microservicios, introducir cambios de forma segura

En una entrada anterior os conté unas nociones fundamentales sobre una arquitectura software basada en microservicios. Si no la has leído, te recomiendo hacerlo antes de continuar.

En todos los ecosistemas naturales existe un compendio de seres vivos conectados sobre un mismo hábitat. Viven en una estrecha simbiosis que se autorregula para mantener un equilibrio. Un pez picotea la hoja de una planta para alimentarse y expulsa sus residuos por la cloaca. Residuos que son el alimento de las bacterias nitrificantes y cuya acción libera nitrógeno en el agua del río. Nitrógeno que es utilizado por las plantas para su desarrollo. Todo conectado, equilibrado y en armonía. Cuantas más plantas, más comida para los peces. Cuantos más peces, más nitrógeno. Cuanto más… Bueno, ya os lo imagináis. ¿No?

¿Y si en este ecosistema ideal introducimos una nueva especie depredadora ajena? Pues que se comerá a los peces o las plantas o se beberá el agua o vete a saber qué diantres… Lo evidente es que causará un desequilibrio. Desequilibrio que puede llegar Incluso a matar todo el ecosistema.

Llevado al ámbito de los microservicios…

Ya os mencioné que un ecosistema de microservicios es un conjunto de aplicaciones que se comunican para ofrecer unos resultados. Que dicha comunicación sea sólida es la clave de su estabilidad. ¿Y cómo evito que mi ecosistema se desestabilice? Te propongo un método, que si sigues con disciplina, será uno de los centinelas que van a impedir que entre la serpiente en la madriguera.

Imaginemos que tenemos dos servicios, uno provee de información y otro la consume. Por lo que entre ellos existe una relación de productor y consumidor.

La esencia, la premisa, la regla de oro es la siguiente:

El servicio productor podrá ser modificado siempre que no perjudique al consumidor. Y el consumidor, no podrá pedirle al productor información que este no le pueda brindar.

¿Sencillo verdad? Se lo que estás pensando. Tu quieres poder añadir más funcionalidad a tus servicios, cambiar de tecnología, mejorarlos. Y esta premisa que te propongo parece muy inflexible. Parece que vas a hacer algo y no lo podrás tocar en la vida. ¡¡Pues no!! Te voy a mostrar como puedes hacer los cambios que quieras y aún así respetar la norma.

¿Cómo lo hace la naturaleza? ¡¡Con tiempo y varios pasos!!

En nuestro río, las plantas van a cambiar. Resulta que hay muchos peces y se las están comiendo a velocidad de vértigo. Las plantas se han defendido haciendo que sus hojas sean cada vez más fuertes. Y los peces, si quieren seguir alimentándose de ellas, tendrán que evolucionar. Porque llegará el momento en el que todas las plantas tiernas desaparezcan y solo queden las duras. Así que los peces tenderán a tener una dentadura más potente. ¡¡Y esto ocurre desde el inicio de la vida!!

Volvamos a nuestro ecosistema de microservicios.

Hemos pensado en añadir nueva funcionalidad al ecosistema simple propuesto más arriba (productor y consumidor).

Empezamos haciendo cambios en el productor, que ahora va a proveer (además de lo que venía sirviendo hasta ahora), de un nuevo y mejorado formato de la información. ¿Hemos perjudicado al consumidor? No, ya que seguimos sirviéndole lo que necesitaba exactamente igual que antes.

El nuevo formato que ofrece el productor, nos interesa. Ofrece ventajas con respecto al anterior. Es más rápido, contiene menos información inútil, todo son ventajas. Entonces modificamos el consumidor para que a partir de ahora consuma lo nuevo. ¿Pedimos información que no nos van a brindar? No, ya que solo hemos pasado de consumir una a consumir otra.

Por último, modificamos el productor con la finalidad de dejar de producir información en el formato antiguo y quedarnos solo como productores del nuevo. ¿Hemos perjudicado al consumidor? No, ya que no había consumidores de la información en ese formato.

En el siguiente esquema está representada la secuencia de pasos que debemos llevar a cabo en nuestros microservicios para mantener nuestro ecosistema estable:

Este flujo, nos permite introducir cambios en un ecosistema de microservicios manteniendo en todo momento la estabilidad. ¿Y qué puede salir mal? Podemos caer en la desgracia de eliminar del productor el formato antiguo de información, mientras sigue siendo consumida por algún consumidor no contemplado. Y por lo tanto, que no hemos modificado para consumir lo nuevo.

Pero… ¡¡sorpresa!!

Para esto hay herramientas automáticas que van a prevenir que te olvides de algún consumidor. El método que os he contado guarda mucha relación con la forma trabajar que tienen estas herramientas. Así que tómalo como una base de la que partir, te ayudará a entenderlas y a implementarlas de forma efectiva. Pronto hablaré de ellas.