Si trabaja en TI o en el campo del cloud computing, probablemente esté al tanto del debate entre la arquitectura orientada a servicios (SOA) y los microservicios. Después de todo, todo el mundo habla estos días de microservicios y aplicaciones ágiles.
A primera vista, los dos enfoques parecen similares y, en cierto modo, lo son. Ambos implican entornos de nube o nube híbrida para un desarrollo e implementación ágiles de las aplicaciones, y ambos pueden escalarse para cumplir con las exigencias operativas y de velocidad del big data. Ambos dividen las aplicaciones grandes y complejas en componentes pequeños y flexibles con los que es más fácil trabajar. Y ambos difieren de una arquitectura tradicional monolítica en que cada servicio tiene su propia responsabilidad.
Sin embargo, incluso con estos puntos en común clave, un examen más detallado de los dos enfoques revela diferencias importantes.
Boletín del sector
Manténgase al día sobre las tendencias más importantes e intrigantes del sector en materia de IA, automatización, datos y mucho más con el boletín Think. Consulte la Declaración de privacidad de IBM.
Su suscripción se enviará en inglés. Encontrará un enlace para darse de baja en cada boletín. Puede gestionar sus suscripciones o darse de baja aquí. Consulte nuestra Declaración de privacidad de IBM para obtener más información.
La arquitectura orientada a servicios (SOA) es un enfoque empresarial para el desarrollo de componentes de aplicación que se benefician de los componentes de software reutilizables o servicios. En la arquitectura de software SOA, cada servicio está compuesto por el código y las integraciones de datos necesarios para ejecutar una función empresarial específica: por ejemplo, comprobar el crédito de un cliente, acceder a un sitio web o procesar una solicitud de hipoteca
Las interfaces de servicio proporcionan un acoplamiento dinámico, lo que significa que pueden ser llamadas con poco o ningún conocimiento de cómo se implementa la integración por debajo. Gracias a este acoplamiento dinámico y a la forma en que se publican los servicios, los equipos de desarrollo pueden ahorrar tiempo reutilizando componentes en otras aplicaciones de la empresa. Esto supone tanto un beneficio como un riesgo. Como resultado del acceso compartido al bus de servicios empresariales (ESB), si surgen problemas, también puede afectar a los demás servicios conectados.
Los datos XML son un ingrediente clave para las soluciones basadas en la arquitectura SOA. Las aplicaciones SOA basadas en XML pueden utilizarse para crear servicios web, por ejemplo.
La SOA surgió a finales de la década de 1990 y representa una etapa importante en la evolución del desarrollo y la integración de aplicaciones. Antes de que la SOA fuera una opción, conectar una aplicación monolítica a datos o funciones de otro sistema requería una compleja integración punto a punto que los desarrolladores tenían que volver a crear para cada nuevo proyecto de desarrollo. Exponer esas funciones a través de SOA elimina la necesidad de recrear la integración profunda cada vez.
SOA proporciona cuatro tipos de servicios diferentes:
Cada servicio consta de tres componentes:
Los servicios SOA se pueden combinar para crear servicios y aplicaciones de nivel superior.
Al igual que la SOA, las arquitecturas de microservicios se componen de componentes especializados, reutilizables y poco acoplados que suelen funcionar de forma independiente unos de otros. Los microservicios también usan un alto grado de cohesión, también conocido como contexto delimitado. El contexto limitado se refiere a la relación entre un componente y sus datos como una entidad o unidad autónoma con pocas dependencias. En lugar de adoptarse en toda la empresa, los microservicios suelen comunicarse a través de interfaz de programación de aplicaciones (API) para crear aplicaciones individuales que realizan una funcionalidad empresarial específica. Este enfoque los hace más ágiles, escalables y resilientes, especialmente en áreas específicas de la empresa. Normalmente, Java es el lenguaje de programación elegido para desarrollar microservicios. También se pueden usar otros lenguajes de programación, como Golang y Python.
Los microservicios son un verdadero enfoque arquitectónico nativo de la nube, que a menudo funcionan en contenedores, lo que los hace más escalables y portátiles para la creación de servicios independientes. Los equipos pueden utilizar microservicios para actualizar el código más fácilmente, utilizar pilas diferentes para componentes distintos y escalar los componentes independientemente unos de otros. Este planteamiento reduce el despilfarro y el coste que supone tener que escalar aplicaciones porque una única característica puede estar soportando demasiada carga. Debido a su independencia, los microservicios producen servicios que son más tolerantes a fallos que las alternativas.
Vea el siguiente vídeo para obtener más información sobre la arquitectura de microservicios:
La principal distinción entre ambos enfoques se reduce al alcance. En pocas palabras, la arquitectura orientada a servicios (SOA) tiene un alcance empresarial, mientras que la arquitectura de microservicios tiene un alcance de aplicación.
Muchos de los principios básicos de cada enfoque se vuelven incompatibles cuando se descuida esta diferencia. Si acepta la diferencia de alcance, puede darse cuenta rápidamente de que los dos pueden complementarse entre sí, en lugar de competir.
Estos son algunos casos de uso en los que entra en juego esta distinción:
En la SOA, la reutilización de las integraciones es el objetivo principal y, a nivel empresarial, es esencial esforzarse por conseguir algún nivel de reutilización. La reutilización y el uso compartido de componentes en una arquitectura SOA aumentan la escalabilidad y la eficacia.
En la arquitectura de microservicios, la creación de un componente de microservicio que se reutiliza en tiempo de ejecución en toda una aplicación da como resultado dependencias que reducen la agilidad y la resiliencia. Los componentes de microservicios generalmente prefieren reutilizar el código copiando y aceptando la duplicación de datos para ayudar a mejorar el desacoplamiento.
Los servicios reutilizables de la SOA están disponibles en toda la empresa mediante protocolos predominantemente sincrónicos, como las API RESTful.
Sin embargo, dentro de una aplicación de microservicios, las llamadas síncronas introducen dependencias en tiempo real, lo que se traduce en una pérdida de resiliencia. Estas dependencias también pueden causar latencia, lo que afecta al rendimiento. Dentro de una aplicación de microservicios, se prefieren los patrones de interacción basados en la comunicación asíncrona, como el abastecimiento de eventos, en el que se utiliza un modelo de publicación/suscríbase para permitir que un componente de microservicios se mantenga actualizado sobre los cambios que se producen en los datos de otro componente.
Un objetivo claro de la prestación de servicios en una SOA es que todas las aplicaciones obtengan y alteren los datos de forma sincrónica directamente en su fuente primaria, lo que reduce la necesidad de mantener patrones complejos de sincronización de datos.
En las aplicaciones de microservicios, lo ideal es que cada microservicio tenga acceso local a todos los datos que necesita para asegurar su independencia de otros microservicios (y de hecho de otras aplicaciones) incluso si esto significa cierta duplicación de datos en otros sistemas. Por supuesto, esta duplicación añade complejidad, por lo que debe equilibrarse con las ganancias en agilidad y rendimiento, pero esto se acepta como una realidad del diseño de microservicios.
Para algunas organizaciones, la arquitectura SOA es un trampolín para reemplazar el monolito, proporcionando un entorno más flexible y ágil. Los servicios SOA se pueden desarrollar y utilizar en un entorno grande, pero no abordan las necesidades específicas de las empresas individuales que desean abordar los procesos comerciales dentro de su ámbito. DevOps se puede utilizar para ayudar a una organización a pasar de la arquitectura SOA a microservicios para abordar necesidades específicas.
Los estilos arquitectónicos tienen sus ventajas, así que ¿cómo puede determinar cuál funciona mejor para sus propósitos? En general, depende del tamaño y la diversidad de su entorno de aplicaciones.
Tanto SOA como los microservicios pueden utilizar la automatización para acelerar los procesos empresariales. Los entornos más grandes y diversos tienden a inclinarse por la arquitectura orientada a los servicios (SOA), que admite la Integración entre aplicaciones heterogéneas y protocolos de mensajería a través de un bus de servicios empresariales (ESB). Los entornos más pequeños, incluidas las aplicaciones web y móviles, no requieren una capa de comunicación tan robusta y son más fáciles de desarrollar utilizando una arquitectura de microservicios.
Algunos señalarán que la SOA vs. el debate sobre los microservicios es mucho más complicado, y eso es cierto. Hay mucho más de lo que parece. Para una explicación técnica más detallada de estos matices, le animamos a que profundice en los artículos de SOA y microservicios de Learn Hub, que proporcionan una gran cantidad de información. Sin embargo, desde una perspectiva empresarial, el alcance es la distinción crucial.
Para obtener más información sobre cómo crear aplicaciones ágiles, descargue su copia gratuita del ebook "Agile Applications Architecture".
Un servicio totalmente gestionado y de inquilino único para desarrollar y entregar aplicaciones Java.
Utilice el software y las herramientas de DevOps para crear, implementar y gestionar aplicaciones nativas de la nube en varios dispositivos y entornos.
El desarrollo de aplicaciones en la nube significa crear una vez, iterar rápidamente e implementar en cualquier lugar.