Qué son los micro servicios y por qué deberían importarme
Por Dave Recktenwald, Territory Sales Manager en Interactive Intelligence.
Créeme: si estás de alguna forma involucrado en seleccionar tecnología para tu empresa, este tema debería importarle. En pocas palabras, microservicios es un término usado para describir una arquitectura de software en la que los diversos subsistemas de una aplicación son independientes, o tienen entre sí una interdependencia muy débil. Esto contrasta con las arquitecturas de software monolíticas, en las que todos los servicios están estrechamente interconectados.
La mayoría de las aplicaciones de software empresarial legado (correo electrónico, CRM, comunicaciones unificadas/contact center) fueron construidas bajo un concepto arquitectónico monolítico. Todos los diversos subsistemas (como los que manejan los inicios de sesión, el enrutamiento, el reporting, la recuperación de datos / almacenamiento, etc.) en general están diseñados para funcionar estrechamente en un mismo servidor. Típicamente, si uno de esos subsistemas falla, todos fallan. Si alguno de ellos debe ser parchado o actualizado, todos se ven afectados. Y si queremos redundancia y escalabilidad, todos deben ser replicados.
Esa clase de sistemas monolíticos se beneficiarían enormemente si fueran rediseñados utilizando microservicios ¿Cómo es eso? Veámoslo con la analogía de un chef en la atareada cocina de un restaurante. En lugar de iniciar sesiones, rutear objetos y enviar/recibir datos, los cocineros deben preparar distintos tipos de pedidos como aperitivos, platos principales y postres.
En una arquitectura monolítica, existe un único chef que prepara cada plato específicamente para ti. Si tiene la mala suerte de cortarse un dedo al confeccionar una ensalada, la producción de los demás pedidos también se interrumpe. Si el chef debe aprender una nueva receta de sopa, toda la producción se detendrá también.
Teniendo en cuenta que las interrupciones de tal tipo son inaceptables, el restaurante deberá tener otro chef, con idénticas aptitudes, esperando en el banquillo listo para tomar el relevo. Este escenario es problemático para varias razones. Para empezar, tener dos chefs altamente calificados dedicados a una sola cocina es bastante caro, en particular teniendo en cuenta que sólo estará utilizando uno a la vez. En segundo lugar, la transición entre un chef y otro nunca es tan suave como se espera. Inevitablemente, cuando el segundo jefe de cocina se hace cargo, algunas órdenes se perderán, se cometerán errores y la producción de platillos terminará siendo más lenta. ¿Y qué ocurrirá cuando surjan esas grandes cenas dos o tres veces al año? Su chef no será capaz de mantenerse al día.
Ahora imagine una cocina que utiliza microservicios. En lugar de tener uno (o dos) chefs que lo saben todo, tenemos una gran cantidad de micro chefs. Cada uno de ellos sabe hacer una sola cosa, pero la hacen muy bien.
Tenemos uno que sabe hacer sopa, otro que hace pan, uno que asa carne a la parrilla, otro que hace postres. Ahora bien, si uno de los micro chefs se lastima, o necesita entrenamiento, sólo una pequeña área de la cocina se ve afectada.
Claro que tener muchos cocineros no parece algo fácil de manejar, ni eficiente en cuanto a los costos, ¿no es cierto? Bueno, no hasta que mueves la cocina a la nube y tienes varios comensales que consumen sus platos.
Una vez que vinculamos los microservicios con las tecnologías en la nube para que sean capaces de balancear las cargas y auto-escalar si es necesario, recién entonces vemos el beneficio real.
Si no has ordenando sopa probablemente alguien más lo hará, de modo que el micro chef de sopa se pondrá a trabajar seguramente utilizando el balanceo de carga. Pero si varias personas piden sopa al mismo tiempo, las herramientas de auto-escala van a proveer más micro chefs de sopa sobre la marcha, y los enviará a casa después de la cena para garantizar que no estemos pagando personal de más. Si se agrega una nueva receta de sopa al menú, será enseñada únicamente a los micro chefs de sopa, para evitar distraer al resto. A su vez, los balanceadores de carga distribuirán el menú actualizado con la nueva sopa entre los nuevos clientes, sin generar ningún retraso cuando el menú cambia.
En el mundo del software, a este concepto de actualización constante del menú sin tener que dejar de aceptar nuevos clientes (ni impactar negativamente en la experiencia de los clientes existentes) se lo llama entrega continua. Felizmente, los días de parches y complicadas actualizaciones para una aplicación quedaron atrás.
Las plataformas de software modernas basadas en microservicios experimentan un tiempo de actividad extremadamente alto, son infinitamente escalables y no requieren ningún tiempo de inactividad por mantenimiento.
Si está buscando en el mercado una nueva tecnología en la nube, asegúrate de realizar a tu proveedor las siguientes dos preguntas:
1) ¿Es necesario ponerse en contacto con usted si quiero duplicar mis usuarios?
2) ¿Hay un tiempo de inactividad para el mantenimiento y las actualizaciones?
Si la respuesta a cualquiera de estas preguntas es sí, probablemente la solución no está utilizando microservicios, ni se beneficia de las múltiples ventajas que hemos visto en este artículo.