Todos desarrollamos hoy aplicaciones que contienen una capa de servicios. De hecho la mayor parte de las veces detrás solemos tener una capa DAO o algo similar en las que los servicios se apoyan.
MicroServicios
¿Qué relación hay entre un Servicio y un MicroServicio? . Normalmente cuando trabajamos con servicios siempre hay varios servicios que comparten un mismo contexto. Por ejemplo puede haber varios servicios para gestionar las nóminas y otro conjunto de servicios para gestionar por ejemplo los proveedores.
Una vez definidos los contextos y aislados un grupo de servicios de otros podemos publicar la funcionalidad de estos a través de REST.
Una vez que tenemos nuestros servicios agrupados de esta forma les convertiremos en aplicaciones independientes .
Estas aplicaciones se pueden desplegar en un contenedor de forma totalmente independiente:
MicroServicios y ventajas
Al ser cada microservicio independiente tenemos varias ventajas. Primero es más fácil para los desarrolladores hacerse con ellos ya que son relativamente “pequeños” y fáciles de abordar.
Segundo si un microservicio falla no afecta a los demás ya que son totalmente independientes. Por otro lado facilita el despliegue ya que no tenemos que desglegar aplicaciones gigantescas sino “microservicios” de tal forma que si solo tenemos que actualizar uno de ellos pues solo redesplegamos este. Por otro lado y una de las cosas más importantes podemos acceder a estos microservicios desde todo tipo de dispositivo ya que los tenemos publicados vía REST o algún tipo de RPC.
No tienes en cuenta la transaccionalidad que puede darse entre los distintos microservicios, ni la necesidad de hacer rollback si alguno de ellos falla, que fallarán, ni la necesidad de comunicar los distintos microservicios mediante algun broker de mensajes para paliar la sincronicidad propia de los servicios REST que impide escalar de manera natural dichos microservicios.
Tienes razón , faltan cosas . espero en los próximos meses tener tiempo para generar más contenidos de microservicios 🙂 . Un saludo
Actualmente estoy en el proceso de digerir el libro “Microservices patterns”, de Chris Richardson, libro que te recomiendo. Actualmente se está terminando de escribir, creo que va por el capitulo 8 de 10, yo por el capitulo 5, pero se puede leer ya como livebook en Manning. Muy recomendable, te introduce en como manejar dicha transaccionalidad distribuida usando el concepto lógico de sagas como un conjunto de eventos que ocurren en las distintas máquinas gestionadas como si fuesen una maquina de estados distribuidas de manera que solo se avanza al siguiente estado cuando se resuelve la transacción ACID localmente y… Read more »
Esta claro que es una arquitectura compleja y que supone grandes retos
Estamos buscando devs que manejen este tema y sean muy buenos en Java para que se unan a nuestro equipo de Rappi 😉 espero no spamiar esta gran discución con ofertas de empleo, pero este es un tema relacionado y estamos buscando personas muy buenas cómo el autor y algunos de los que han comentado.
Gracias.
Soy programadorm y domino la tecnolgía JEE, como framework web utilicé Primefaces y como IDE Netbeans. En fin, me interesa tu propuesta y si me envías tu dirección te puedo enviar mi CV.
mateo.escobar@rappi.com
Primefaces ya fue 😛 y no tiene nada que ver con micro servicios, actualmente para esta tecnología existe spring boot y esta orientado a las clouds y no para los servers habituales
Saludos
A que correo envio hoja de vida ?
Hola muy interesante tu descripción quería aprovechar para mencionar que tengo un canal donde estoy subiendo como hacer microservicios, les comparto el link por si desean darle una mirada:
https://www.youtube.com/user/xazpentx
Muchas gracias por el aporte 🙂
Osea si entiendo bien solo tengo que hacer digamos varios servicios en respuestas JSON(por ejemplo) y consumirlos como REST?, el conjunto de todos los servicios se hace un microservicio?. Eso es todo?
Ademas a día de hoy se desplegarían independientes completamente a través de soluciones tipo docker 🙂
Cecilio, muy bueno el post!
Te cuento que estoy trabajando sobre una arquitectura en capas(3), con tecnologías como Jsf, Spring, e Hibernate.
Tendrás algún ejemplo de como implementar microservicios sobre una arquitectura así? Gracias!
JSF no esta orientado a eso en principio. Tendrías que separar lo que es la parte JSF del resto
[…] Otros artículos relacionados: Iterator , MicroServicios […]
Tengo una gran duda con respecto a los microservicios, una aplicación monolítica la podías construir por módulos y tener cada módulo en un jar, agregabas tus jar a tu classpath y agregabas Spring Security y listo, tenias una aplicación web con cierto grado de seguridad (autenticación y autorización). ¿Cómo se maneja este tema en una arquitectura de microservicios? Entiendo que mi aplicación web (Front End) podria seguir bajo el esquema planteado con anterioridad, con la única diferencia de que no tendría que integrar varios jar ya que la funcionalidad que estos brindaban está ahora en un microservicio. Pero ¿cómo garantizo… Read more »
Deberas tener un MicroServicio que gestione la seguridad , pero todo esto es empezando 🙂 hay que ver como evoluciona todo
Funciona de la misma forma, mira tu aplicación web (el front) no debería llamar directamente a cada uno de los microservicios, más bien, tu aplicación web (el front) debe consumir digamos un proxy en su propio backend, es decir un servicio interno el cual funcione como proxy a un Gateway el cual es un microservicio que a su vez, sabe a que microservicio llamar. Un ejemplo en palabras vanas seria, tu front, llama a un api interna en tu aplicación llamada /miServicio y esta uri estará protegida con spring security. Esta uri /miServicio, llamara a un gateway por ejemplo /gateway/servicioX… Read more »
[…] artículos relacionados: MicroServicios , Java […]
Lo que a mi me complica de los microservicios es la interdependencia, por ej si un microservicio es usado por 10 app web distintas y este microservio se cae, las 10 app no podran funcionar full. En cambio si cada una de ellas tiene este mismo servicio como parte de la aplicación, entonces si una se cae, solo ella se cae. Eso me tiene un poco indeciso acerca de este enfoque. Pongo como ejemplo un microservicio de Login usado por distintas web. Al final si se cae, muchas web pueden quedar sin servicio y en vez de ser independientes, se… Read more »
Es una arquitectura en la cual el tema de cluster y escalabilidad será clave 🙂
En la práctica lo que comentas no sucede, si un microservicio se cae, en teoría deberías mantener más de uno desplegado, es decir tener varias instancias del mismo microservicio activo, es decir, escalado, y los clientes o consumidores de ese microservicio deben implementar un balanceador de carga el cual es el encargado de dirigir las peticiones al microservicio más sano o más disponible con el fin de que ninguno caiga, sin embargo, si uno cae, estarán activos otros microservicios que darán soporte a tu aplicación. no tiene sentido que implementes una arquitectura de microservicios desplegando un único microservicio de cada… Read more »
Como bien dices, una gran ventaja es el despliegue. Podemos desplegar nuevas versiones sin tener que reiniciar ni reempaquetar otras aplicaciones que consuman estos microservicios. Pero hay que ir con cuidado a la hora de reiniciar servidores, puede que una aplicación se despliegue antes que un microservicio y se queje de que no está disponible.
Si esas cosas vamos a tener que valorarlas ya que por ahora los standares que yo recuerde no tienen nada para decidir ordenes de despliegue 🙁
Pero recordemos también que un MicroServicio tiene que ser lo más independiente posible
Hola Cecilio, caí en tu página ya que soy reclutadora y me han pedido cubrir una vacante de perfil Microservicios, la problemática que tengo es que no me queda claro que tecnologías buscar, además, mi cartera de candidatos se reduce en JAVA, .NET, Analistas/PM etc, pero ninguna en Microservicios, puedes ayudarme a saber en qué cartera encontrarlo y de que tecnologías básicas se apoya esta herramienta?.
En principio normalmente la gente de Java y .NET pueden tener perfil orientados a microservicios , pero hay que sumar conocimientos en temas como docker , devops , kubernetes y arquitecturas REST y Web Api. Espero te ayuden mis comentarios 🙂