¿Por qué las personas que actúan como microservicios son algo nuevo?

no podemos definir simplemente como … los microservicios se utilizan para dividir nuestra aplicación y la acoplamos libremente.

En el desarrollo de software, las aplicaciones heredadas a gran escala se desarrollan en base a SOA.

Hoy en día, las industrias de desarrollo de software utilizan microservicios en lugar de SOA.

SOA es un patrón arquitectónico para softwares de diseño.

En estos días, hay muchas discusiones sobre Microservicios en el lugar de trabajo o en conversaciones tecnológicas. Y si ha trabajado con SOA anteriormente, podría preguntarse cuál es la diferencia entre SOA y Microservicios. Aquí hay una comparación de ambas arquitecturas en detalles.

1. SOA

Una arquitectura orientada a servicios es un patrón de arquitectura de software, cuyos componentes de aplicación proporcionan servicios a otros componentes a través de un protocolo de comunicaciones a través de una red. La comunicación puede involucrar el paso simple de datos o podría involucrar dos o más servicios que coordinan servicios de conexión entre sí. Los servicios (como los servicios web RESTful) llevan a cabo algunas funciones pequeñas, como validar un pedido, activar una cuenta o proporcionar servicios de carrito de compras.

Hay 2 roles principales en SOA, un proveedor de servicios y un consumidor de servicios. Un agente de software puede desempeñar ambos roles. La capa del consumidor es el punto donde los consumidores (usuarios humanos, otros servicios o terceros) interactúan con la SOA y la capa del proveedor consta de todos los servicios definidos dentro de la SOA. La siguiente figura muestra una vista rápida de una arquitectura SOA.

Enterprise Service Bus (ESB) es un estilo de la arquitectura de integración que permite la comunicación a través de un bus de comunicación común que consiste en una variedad de conexiones punto a punto entre proveedores y consumidores. Además de lo anterior, el almacenamiento de datos se comparte dentro de todos los servicios en SOA.

Ahora, echemos un vistazo a la arquitectura de Microservicios, luego comparemos ambos juntos.

2. Arquitectura de microservicios

Microservices es un patrón de arquitectura de software en el que las aplicaciones complejas se componen de pequeños procesos independientes que se comunican entre sí mediante API independientes del lenguaje.

Los microservicios deben ser una necesidad real en la arquitectura del sistema, ya que podrían diseñarse incorrectamente. Significa que un servicio debe poder implementarse de manera independiente, o ser capaz de cerrar un servicio cuando no es necesario en el sistema y eso no debería tener ningún impacto en otros servicios. La siguiente figura muestra una vista rápida de una arquitectura de microservicios.

Como se muestra arriba, cada servicio tiene su propia base de datos o una base de datos se comparte entre algunos de los microservicios.

3) Arquitectura de microservicios vs. SOA

Como se discutió anteriormente, ambas arquitecturas tienen ventajas y desventajas similares y algunas diferencias. En ambas arquitecturas, cada servicio, a diferencia de una arquitectura monolítica, tiene una cierta responsabilidad. Por lo tanto, los servicios se pueden desarrollar en varias pilas tecnológicas que aportan diversidad tecnológica al equipo de desarrollo. El desarrollo de los servicios puede organizarse dentro de múltiples equipos, sin embargo, cada equipo necesita saber sobre el mecanismo de comunicación común en SOA.

En microservicios, los servicios pueden operar y desplegarse independientemente de otros servicios, a diferencia de SOA. Por lo tanto, es más fácil implementar nuevas versiones de servicios con frecuencia o escalar un servicio de forma independiente.

En SOA, ESB podría convertirse en un único punto de falla que afecta a toda la aplicación. Dado que cada servicio se está comunicando a través de ESB, si uno de los servicios se ralentiza, podría provocar que el ESB se obstruya con solicitudes de ese servicio. Por otro lado, los microservicios son mucho mejores en tolerancia a fallas. Por ejemplo, si hay una pérdida de memoria en un microservicio, solo ese microservicio se verá afectado. Los otros microservicios continuarán manejando las solicitudes.

En ambas arquitecturas, los desarrolladores deben lidiar con la complejidad de la arquitectura y un sistema distribuido. Los desarrolladores deben implementar el mecanismo de comunicación entre servicios entre microservicios (si la cola de mensajes se usa en arquitecturas de microservicios) o dentro de ESB y servicios.

Examen de la unidad es más difícil ya que los desarrolladores deben burlarse del mecanismo de comunicación en las pruebas. Debido a muchos tipos de servicios diferentes, la implementación y la complejidad operativa son una preocupación en ambas arquitecturas.

En SOA, los servicios comparten el almacenamiento de datos (como se muestra en la Figura 1) mientras que cada servicio puede tener un almacenamiento de datos independiente en microservicios. Compartir el almacenamiento de datos tiene sus ventajas y desventajas. por ejemplo, los datos pueden ser reutilizados por todos los servicios mientras que conlleva dependencia y estrechamente acoplado dentro de los servicios.

Por último, pero no menos importante, la principal diferencia entre SOA y microservicios radica en el tamaño y el alcance. El microservicio tiene que ser significativamente más pequeño de lo que SOA tiende a ser y principalmente es un servicio pequeño (er) desplegable independientemente. Por otro lado, un SOA puede ser un monolito o puede estar compuesto por múltiples microservicios.

También es importante que SOA se haya diseñado e implementado en varios estilos que podrían ser diferentes con lo que se describe aquí, generalmente debido a un enfoque en ESB que se utiliza para integrar aplicaciones monolíticas.

Poco después de publicar la pregunta, encontré este video y lo vi. Parece responder a la pregunta de alguna manera, pero deja algunas preguntas esenciales para ser respondidas, probablemente porque fue una breve charla.

Algunas de las preguntas que tengo son:

  1. ¿Qué sucede cuando desea consultar datos en los almacenes de datos individuales de estos microservicios?
  2. ¿Cómo dice que consultamos un conjunto heterogéneo de fuentes de datos, posiblemente algunas de las cuales son NoSQL?
  3. ¿No va eso en contra de llamar a las bases de datos NoSQL “orientadas a los agregados”?
  4. ¿Qué sucede con las transacciones dentro de estos microservicios?
  5. ¿Y no hay un conflicto entre hacer que un microservicio sea demasiado granular y que su almacén de datos necesite ser “un agregado” para contener los límites de transacción dentro del agregado?

Si me siento y lo pienso más profundamente, surgirán muchas más preguntas que ahora son débiles y podré articularlas.

En general, estoy de acuerdo con el Sr. Fowler en que los microservicios no son algo nuevo, tal como sospechaba.

Donde encuentro un poco desconcertante es la ceremonia de atribución de este nuevo nombre para describir un fenómeno que no es nuevo y que se basa principalmente en el sentido común y la necesidad.

Además, estoy frustrado por el lanzamiento que derriba todo lo que se elogió hace solo unos años como la panacea para todos los males. Simplemente se reemplaza por algo más basado en el sentido común o, a veces, exactamente lo mismo pero que tiene un nuevo nombre.

More Interesting

¿Cómo trabajan juntos los programadores en un proyecto?

¿Cómo desarrollaron los equipos el software antes del surgimiento de Scrum y Kanban?

¿Cuáles son algunos problemas de diseño de arquitectura de software que se enfrentan al implementar una aplicación de transmisión de video como YouTube?

¿Por qué los estudiantes de electrónica y comunicación van a trabajos de software?

¿Es común que las grandes empresas contraten ingenieros de software para escribir aplicaciones especializadas para su empresa?

¿El software MuleSoft Anypoint es propietario?

¿Cuál es la mejor manera de aprender sobre ingeniería de software?

¿Cómo empezar a aprender sobre Arduino? ¿Hay algún sitio web que ofrezca dichos cursos?

Cómo cambiar mi trabajo de front-end a desarrollador de software

Para un programador promedio, ¿en cuántos lenguajes de programación debería ser muy competente?

¿Cuál es la mejor literatura sobre el diseño de plataformas de bases de datos? ¿Por qué?

¿Cuál será la diferencia en el salario de un probador y desarrollador con los mismos años de experiencia y el mismo nivel de conocimiento en sus respectivos campos?

¿Cuál es su herramienta de revisión / inspección de código favorita y por qué?

¿Por qué la mayoría de los desarrolladores de software junior están presionados por más trabajo por una pequeña cantidad de dinero en comparación con otros puestos en la misma industria?

Tiene una gran cantidad de casos de prueba con tiempo y recursos limitados. ¿Cómo se realizan las pruebas de regresión?