¿Qué es realmente diferente entre SOA y Microservicios?

10

Descargo de responsabilidad

Espero no pisar los pies de nadie u ofender a los entusiastas de los conceptos.

Antecedentes

He estado buscando diferencias reales entre la arquitectura orientada a servicios y los microservicios, sin encontrar una respuesta clara.

Leo cosas como:

  • los efectos secundarios de SOA
  • SOA siendo antipatrón
  • Los microservicios vinieron para arreglar las fallas de SOA
  • Los ESB no son realmente ESB, sino EAI
  • Dependencia excesiva en los corredores de mensajes
  • Los vendedores abusan de la noción de SOA e intentan vender sus productos.
  • SOA crece sin control

Pero aún así, nada define claramente las diferencias arquitectónicas entre la Arquitectura Orientada a Servicios (como concepto) y los Microservicios (como concepto)

Según lo que entendí, ambos tienen:

  • Proveedores de servicios, haciendo solo una cosa
  • Service Gateway / ESB exponiendo esos servicios a los consumidores
  • Consumidores de servicios, acceso a servicios a través de ESB / Service Gateway

Pregunta

Entonces, ¿hay algo diferente aparte de volver a etiquetar SOA en Microservicios? ¿Es una restricción tecnológica colocada para limitar que los microservicios se conviertan en macro?

Nota: no estoy buscando opiniones, solo hechos concretos, con suerte en viñetas

Referencias

Actualizar

Parece que ocurrió un debate similar en una pregunta de desbordamiento de pila , con opiniones divididas ya sea que los microservicios sean una arquitectura orientada al servicio disfrazada.

Conclusión de la pregunta SO:

  • MS es un caso especial de SOA
  • MS respalda servicios de alojamiento de aplicaciones de menor tamaño
  • MS depende de la tecnología (el uso de HTTP en lugar de opciones de protocolo abierto)
  • MS depende de la tecnología para imponer disciplina (implementación automática de servicios)
  • MS considera ESB (malvado), pero usa API Gateways, que en mi humilde opinión es un tipo de ESB

Eso concluye que MS es SOA, si lo siguiente es cierto:

  • ¿La EM admite la noción de orquestación? Uno o más procesos maestros administran los flujos de trabajo
  • ¿Hay una capa de intermediario de mensajes en MS? Un conjunto de adaptadores que traducen formatos de mensajes del espacio de mensajes de los productores de servicios a los consumidores de servicios.
  • ¿Pueden los microservicios leer datos de aplicaciones empresariales monolíticas? ¿Pueden ser API de una aplicación monolítica? ¿O tiene que ser aplicaciones independientes autónomas, capaces de operar de forma independiente?

Si la respuesta a la última pregunta resultara no, entonces Microservicios no sería capaz de manejar sistemas de flujo de trabajo complejos, por ejemplo, sistemas de gestión de tarjetas de crédito o sistemas de reconciliación.

A.Rashad
fuente
La moda para la computación distribuida hoy en día es la de los "agentes" o "módulos" pequeños, poco acoplados, descentralizados y tolerantes a fallas que tienen responsabilidades claras y específicas y están conectados entre sí mediante un protocolo de comunicaciones simple y directo. SOA es más o menos lo contrario de todo eso. Estás observando la molehill de similitudes superficiales y mirando la montaña de diferencias.
Robert Harvey
1
¿No debería SOA también implementar pequeños componentes sueltos? Sé que en el back-end de SOA, hay aplicaciones multifuncionales, descritas principalmente como "Best of Breed" que brindan servicios a otras aplicaciones y consumen servicios de otras aplicaciones, utilizando cualquier formato de mensaje, protocolo y acceso medio adecuado para él
A .Rashad
Debería, pero como acabas de señalar, generalmente no lo hace.
Robert Harvey
Martin Fowler's Site (I think he hates it big time)Ese no era mi sentimiento cuando fui a su charla en Barcelona. Es consciente de las compensaciones y de cómo las personas se han cambiado ciegamente a esta arquitectura sin considerar que la EM no es adecuada para todos.
Laiv
1
Microservicios es un montón de marketing. No hay diferencia. La gente hacía esto hace años y ahora alguien le puso un nombre y ahora es algo nuevo. Tiene razón. MS es un caso (NO ESPECIAL) de SOA. Por favor, deja de tratar de sacarle provecho.
Kyle Johnson

Respuestas:

12

Proveedores de servicios, haciendo solo una cosa

La diferencia principal, que tiene consecuencias generalizadas del proyecto, es que con Microservicios, estos Proveedores de servicios son implementables y escalables de forma independiente .

Esto es genial, porque puedes ser más ágil. Si un servicio necesita ser cambiado, simplemente cambia ese, ninguno de sus familiares. Si desea probar un nuevo marco o lenguaje, simplemente haga un reemplazo directo para ese servicio. Si de repente necesita una capacidad de 100x, encienda algunas máquinas nuevas con ese servicio para manejar esa afluencia. Si desea versionar algo, solo versione sin tocar toda la aplicación. Y hace que las cosas sean más fáciles de monitorear, instrumentar, dividir entre equipos, obsoletas ...

Pero viene con algunas implicaciones pesadas:

  • Su proceso de lanzamiento debe cambiar, porque implementar algunos servicios es muy diferente de implementar algunas docenas de servicios.
  • Su proceso de lanzamiento debe cambiar, ya que implementar un servicio en una máquina es muy diferente de implementar en una docena de máquinas.
  • El diseño, el uso y la implementación de su base de datos deben cambiar porque no tiene sentido implementar un servicio si necesita implementar esta gran base de datos compartida para que funcione (rompiendo todos sus otros servicios).
  • Su diseño y uso de bibliotecas debe cambiar porque no tiene sentido implementar un servicio si necesita actualizar esta biblioteca compartida (rompiendo todos sus otros servicios).
  • Su registro / autorización / administración de sesión / etc. necesita cambiar porque es bastante fácil compartir cosas cuando solo es un servicio, pero diferente cuando tiene un montón de pequeños servicios independientes que componen el producto, y van a quiero compartir cosas Ah, y todas esas cosas compartidas deben lidiar con estar potencialmente en diferentes versiones.
  • Tu comunicación necesita cambiar. Con pocos servicios, puede dividir las cosas en líneas donde la comunicación no ocurre a menudo y / o podría ocurrir lentamente. Con los microservicios, se hablarán mucho entre ellos, y la alta latencia no va a ser suficiente.
Telastyn
fuente
1
Es por todas estas razones que veo los microservicios como una solución específica a un problema específico (escalado a través de la computación distribuida), y no como una arquitectura de aplicación general.
Robert Harvey
1
Enh, tienen un impacto lo suficientemente extendido que creo que deberían verse como una arquitectura de aplicación con escalabilidad / computación distribuida como una ventaja (con complejidad y otras desventajas como la compensación).
Telastyn
1
Entonces, desde un punto de vista arquitectónico, los microservicios son microsistemas independientes que hacen una cosa, mientras que las SOA son aplicaciones monolíticas con múltiples servicios expuestos a los consumidores.
A.Rashad
1
Estoy más confundido ahora! ¿Es posible que una aplicación monolítica exponga microservicios? ¿o tiene que ser micro aplicaciones independientes?
A.Rashad
1
Eche un vistazo a este artículo en DZone Microservices vs SOA .
Laiv
2

Aquí está el resultado final La única diferencia obvia entre SOA y Microservicios es la noción de

Tuberías tontas de puntos finales inteligentes

A diferencia de SOA , eso dependería de consumidores y productores de servicios ajenos, delegando la gestión del tráfico, la traducción de formatos de mensajes y la organización de servicios a sistemas externos, por ejemplo, ESB, Service Orchestrator, Message broker.

A.Rashad
fuente