Esto no es un concepto nuevo, pero continúa siendo muy poderoso para poder desarrollar aplicaciones. La idea radica en separar las funciones por dominio, es decir, crear procesos que estén relacionados como por ejemplo la autenticación de usuarios. Vamos a tener una base de datos para los usuarios con todo lo necesario para autenticarlo al sistema, además de un endpoint (API) que nos permite consultar y hacer las operaciones necesarias para esta tarea.
Como vemos en este ejemplo separamos las tareas y datos en dominios para poder agruparlas por sus características similares o iguales. Si queremos trabajar cien por ciento como microservicios debemos hacer una base de datos separada para cada uno de los servicios también. Ahora yo he visto algunas empresas que desarrollan una única base de datos y crean APIs para cada una de las tareas.
Esta implementación tiene muchas ventajas a la hora de desarrollar nuestras aplicaciones
- Los tiempos de publicación de las aplicaciones son menores
- Se pueden aislar los errores más fácilmente y se puede encontrar directamente en el servicio donde está ocurriendo
- La publicación de un servicio no afecta a los otros servicios
- Los tamaños de las aplicaciones son mucho más pequeñas.
- No tenemos que publicar todos los servicios a la vez
- Se mantiene una total independencia del desarrollo por cada dominio
- Cada servicio podría ser desarrollado por diferentes equipos y diferentes lenguajes
- Con los cambios tan acelerados de la tecnología esto nos permite actualizar los servicios poco a poco.
- Cualquier cambio requerido se hace directamente en el servicio especifico
Algunas desventajas que podemos tener
- Dependiendo donde y como se instalen los servicios los costos pueden aumentar
- Con el crecimiento de servicios puede aumentar la dificultad de administración de los mismos.
- Dependiendo de la cantidad de servicios hacer pruebas podría ser complicado
- Dependiendo de la cantidad de servicios podríamos tener problemas con rendimiento de la aplicación ya que tendría que llamar muchos servicios para hacer una tarea.
- La comunicación entre servicios puede ser compleja y la integración de los datos.
Desde mi punto de vista la implementación de microservicios es muy útil y facilita mucho la distribución de las aplicaciones. Se podrían enfrentar retos con la integración de datos y la comunicación entre los servicios. De todas maneras, esto no es algo que todas las empresas deben de seguir todo depende del tipo de aplicación que se este desarrollando y de la infraestructura que se cuente. Por otro lado, se pueden hacer híbridos entre arquitecturas para logar optimizar recursos, tiempo de desarrollo, testing, etc. y hacer lo que realmente es necesario para cada empresa.