¿Qué es SOA “en inglés llano”? [cerrado]

112

¿Alguien puede explicar en un lenguaje sencillo de qué se trata SOA ? Escucho SOA aquí, SOA allá, pero no puedo entender exactamente qué es y para qué se utiliza. ¿Fue un concepto simple y luego se convirtió en algo enorme o qué?

Todos los documentos, incluido el wiki, son un poco abstractos o tal vez soy un idiota y no lo entiendo. ¿Hay una guía para idiotas sobre esto?

¿Qué hay exactamente detrás de estas tres letras?

Elena
fuente
7
Creo que también sería bueno si la gente dejara de explicar SOA de manera abstracta de maneras que solo las personas que ya lo entienden pueden entender y mostrar ejemplos de codificación de "Hola, mundo". El código de demostración habla más fuerte que el parloteo.
Phil
@Phil - Comprueba mi respuesta. Intenté usar una analogía.
Niklas
Hay una guía para idiotas, en realidad: amazon.com/Service-Oriented-Architecture-Dummies-Edition/dp/…
nullability
3
Amazon es un ejemplo perfecto, de hecho. En algún momento, Bezos insistió en que cada parte del código base de Amazon tenía que ser una API y responder a las solicitudes web. Artículo aquí: apievangelist.com/2012/01/12/… . Puede ver esto cuando inicia sesión: ¡Amazon usa OpenID para su propio sistema de inicio de sesión! La mayoría de los sitios web utilizan un sistema integrado para iniciar sesión. Una ventaja es que creo que pueden usar el mismo inicio de sesión para todos sus sitios y servicios.
Jordan Reiter

Respuestas:

49

Puede que le resulte útil este artículo (¿Qué es SOA? - Explicación de SOA y servicios web) .

Un pequeño adelanto:

  • SOA es un estilo de arquitectura de aplicaciones de tal manera que se componen de agentes de software discretos que tienen interfaces simples y bien definidas y están orquestados a través de un acoplamiento flexible para realizar una función requerida.

  • Hay 2 roles en SOA: un proveedor de servicios y un consumidor de servicios. Un agente de software puede desempeñar ambos roles. SOA no es un concepto completamente nuevo; sin embargo, este artículo se centra principalmente en SOA implementado con servicios web.

KB22
fuente
6
Mmmmm ... CORBA, IDL, cliente-servidor ... ¡suena tan de los 80 que duele! ;-D
CesarGon
64

SOA es una nueva insignia para algunas ideas muy antiguas:

  • Divida su código en módulos reutilizables.

  • Encapsule en un módulo cualquier decisión de diseño que pueda cambiar.

  • Diseñe sus módulos de tal manera que puedan combinarse de diferentes formas útiles (a veces llamadas "familia" o "línea de productos").

Todos estos son principios fundamentales del desarrollo de software, muchos de ellos articulados por primera vez por David Parnas.

Lo nuevo en SOA es

  • Lo estás haciendo en una red.

  • Los módulos se comunican enviándose mensajes entre sí a través de la red, en lugar de mediante mecanismos de lenguaje de programación más tradicionales, como las llamadas a procedimientos. En particular, en una arquitectura orientada a servicios, las partes generalmente no comparten un estado mutable (variables globales en un programa tradicional). O si comparten el estado, ese estado se guarda cuidadosamente en una base de datos que es en sí misma un agente y que puede administrar fácilmente varios clientes simultáneos.

Norman Ramsey
fuente
43

Veo muchas respuestas que explican una Arquitectura Orientada a Servicios (SOA) utilizando palabras y términos técnicos aún más avanzados. Me gustaría intentar explicárselo al profano, utilizando una analogía en un lenguaje sencillo.

Pero primero se
podría describir una descripción de una SOA SOA en tres capas, como se ve en la siguiente imagen. Por un lado tenemos al Proveedor y por otro lado tenemos al Consumidor , separados por un Puente donde se comunican los dos lados.

El consumidor utiliza una serie de Aplicaciones necesarias para su negocio y el proveedor utiliza Componentes que proporcionan información a estas aplicaciones. Se comunican a través de un conjunto de servicios utilizando una arquitectura común.


ingrese la descripción de la imagen aquí


La analogía
Imagine una casa en el campo, que en muchos sentidos es parte de una comunidad más grande, como una ciudad o un pueblo. La ciudad tiene sus propios sistemas complejos para proporcionar agua y electricidad, manejar el saneamiento, proporcionar transporte y otros servicios públicos. La casa es el consumidor en este modelo, la ciudad (o comunidad) es el proveedor y las tuberías, alcantarillas, líneas eléctricas, fibras ópticas, etc. es la infraestructura en la que se comunican.

Este modelo podría compararse libremente con una SOA. La gente de la casa usa una serie de "aplicaciones" diferentes como radiadores, computadoras, inodoros, lámparas, calefacción por suelo radiante, bañeras, etc. A estas aplicaciones no les importa cómo la ciudad genera el agua, crea la electricidad o maneja los desechos durante tanto tiempo como funciona. Los componentes de la ciudad son generadores, bombas de agua y áreas de saneamiento. Proporciona a la casa todas estas necesidades, pero depende de la casa utilizarla de la forma que crea conveniente.

Espero que esto le haya dado al menos a alguien una mejor imagen de una SOA.

Niklas
fuente
27

Supongamos que tiene cuatro cocineros. En SOA, asumes que se odian entre sí, por lo que te esfuerzas por dejar que tengan que hablar entre ellos lo menos posible.

¿Cómo haces eso? Bueno, primero definirás los roles y la interfaz: el cocinero 1 hará la ensalada, el cocinero 2 hará la sopa, el cocinero 3 hará el bistec, etc. Luego, colocarás los platos bien organizados sobre la mesa (así que estos son los interfaces) y diga: "Todos, por favor, coloquen su creación en los platos asignados. No se preocupen por nadie más".

De esta manera, los cuatro cocineros tienen que hablar entre ellos lo menos posible, lo cual es muy bueno en el desarrollo de software, no necesariamente porque se odien, sino por otras razones como ubicación física, eficiencia en la toma de decisiones, etc.

También significa que puede combinar los platos (servicios) a su gusto. Por ejemplo, puede usar el postre para servir un café, o simplemente tomar la sopa y combinarla con un pan que compró en otra empresa para ofrecer un menú más económico, o dejar que otros restaurantes usen sus ensaladas para combinar con sus platos, etc. .

Una de las implementaciones más exitosas de SOA fue en Amazon. Debido a su diseño, podrían volver a empaquetar toda su infraestructura y venderla como Amazon Web Service.

* Este es solo un aspecto de SOA.

Enno Shioji
fuente
17

SOA es un estilo arquitectónico, pero también una visión sobre cómo se deben desarrollar e integrar aplicaciones heterogéneas. El objetivo principal de SOA es alejarse de las aplicaciones monolíticas y tener en su lugar un conjunto de servicios reutilizables. que se pueden componer para crear aplicaciones.

En mi humilde opinión, SOA solo tiene sentido a nivel empresarial y no significa nada para una sola aplicación.

En muchas empresas, cada departamento tenía su propio conjunto de aplicaciones empresariales, lo que implicaba

  1. Se implementaron funciones similares varias veces

  2. Los datos (por ejemplo, datos de clientes o empleados) deben compartirse entre varias aplicaciones

  3. Las aplicaciones estaban centradas en el departamento.

Con SOA, la idea es que los servicios reutilizables estén disponibles en toda la empresa, de modo que la aplicación pueda construirse y componerse a partir de ellos. La promesa de SOA es

  1. No es necesario volver a implementar características similares una y otra vez (por ejemplo, proporcionar un servicio al cliente o empleado)

  2. Facilita la integración de aplicaciones juntas y el acceso a datos o características comunes

  3. Esfuerzo de desarrollo centrado en la empresa.

La visión de SOA requiere un cambio tecnológico así como un cambio organizacional . Si bien resuelve algunos problemas, también introduce otros, por ejemplo, la seguridad es mucho más difícil con SOA que con la aplicación monolítica. Por lo tanto, SOA está sujeto a discusión sobre si funciona o no.

Esta es la vista de 1000 pies de SOA. Sin embargo, no se detiene aquí. Hay otros conceptos que complementan a SOA como la orquestación de procesos de negocio (BPM), bus de servicios empresariales (ESB), procesamiento de eventos complejos (CEP), etc. Todos ellos abordan el problema de la alineación de TI / negocio , es decir, cómo tener la TI poder respaldar el negocio de manera eficaz.

ewernli
fuente
1
sí, pero alguien más quiere que usted compre o use su monolito para controlar todo, como Oracle SOA o usar Microsoft WCF. ¿No habrá siempre un monolito?
johnny
WCF y Oracle SOA son dependencias tecnológicas que son irrelevantes con una solución SOA. El concepto se basa en servicios independientes de fácil mantenimiento, no en una tecnología específica.
BentOnCoding
4
+1 por mencionar el significado 'grande' de SOA a nivel de organización. Muchas de las otras respuestas se centran en el aspecto del componente de software, que estrictamente hablando no es el panorama completo (incluso si es el significado que la gente usa la mayor parte del tiempo).
occulus
10

SOA es el acrónimo de Arquitectura Orientada a Servicios.

SOA está diseñando y escribiendo aplicaciones de software de tal manera que distintos módulos de software pueden integrarse sin problemas con un alto grado de reutilización.

La mayoría de la gente restringe SOA para escribir servicios web de software cliente / servidor. Pero es un contexto demasiado pequeño de SOA. SOA es mucho más grande que eso y en los últimos años los servicios web han sido el medio principal de comunicación, lo que probablemente sea la razón por la que la gente piensa en SOA como servicios web que restringen los límites y el significado de SOA en general.

Puede pensar en escribir un módulo de acceso a la base de datos que sea tan independiente que pueda funcionar por sí solo sin dependencias. Este módulo puede exponer clases que pueden ser utilizadas por cualquier software de host que necesite acceso a la base de datos. No hay configuración de inicio en la aplicación de host. Todo lo que se necesita o se requiere se comunica a través de clases expone por módulo de acceso a la base de datos. Podemos llamar a estas clases como servicios y considerar el módulo como habilitado para el servicio.

La práctica de SOA proporciona un alto grado de reutilización al aplicar DRY [No repita usted mismo], lo que da como resultado un software de fácil mantenimiento. La capacidad de mantenimiento es lo primero en lo que piensa cualquier arquitectura de software: SOA le ofrece eso.

esta. __curious_geek
fuente
6

Según tengo entendido, el concepto básico es que se crean pequeños "servicios" que proporcionan algo útil a otros sistemas y se evita la construcción de grandes sistemas que tienden a hacer todo dentro del sistema.

Así que define un protocolo que utilizará para la interacción (digamos, podría ser servicios web SOAP) y deje que su "sistema-que-hace-algún-trabajo-comercial" interactúe con los pequeños servicios para lograr su "gran objetivo". .

ingenuos
fuente
2
Por favor, no adivine las cuestiones de arquitectura. Stackoverflow es un lugar para obtener respuestas de expertos, no una suposición aleatoria de un artículo que echaste un vistazo el año pasado. Es triste que esta respuesta haya recibido votos.
BentOnCoding
4

lo que suele suceder en las grandes organizaciones es que con el tiempo todo es monolítico o sistemas dispares en todas partes o un poco de ambos. Alguien finalmente entra y dice que tenemos un lío. Ahora, quieres rediseñar (dinero a alguien) todo para que se oriente en una especie de paradigma monotlítico que dependa de a quién pagues pero al mismo tiempo poder agregar piezas y partes independientemente del maestro / monolito.

Entonces compra SOA de Oracle y Oracle se convierte en el jefe de todas sus partes. Todos los demás jugadores que ingresan tienen que trabajar con SOA a través de un servicio (servicio web o lo que tenga). Oracle monolith se encarga de todo (monolith no significa despectivo). Oh, sí, tienes ASP.NET MVC en el frente o algo más.

Lo principal es mover cosas dentro y fuera del sistema sin impacto y mantener al proveedor Oracle SOA, Microsoft WCF, como el cerebro de todo. todo está bien, fluido, las cosas entran y salen con poco o ningún impacto, incluso los servicios humanos, no solo las computadoras.

Para mí, solo significa un montón de servicios web (o como los llamemos en el futuro) con una buena interfaz. Y si es el propietario de la base de datos, simplemente acceda a la base de datos y deje de preocuparse por las palabras de moda. está bien.

Johnny
fuente
3

Bueno, ya ve ... SOA significa Arquitectura Orientada a Servicios ... En las palabras más simples, escribe un fragmento de código que es muy genérico, es decir, hace algo que puede usarse en muchas aplicaciones ... puede ser algo como una libreta de direcciones o puede ser una calculadora. y lanza este código en el IIS. Entonces brindas un servicio a través de tu código. Entonces eres un proveedor de servicios. Ahora alguien quiere usar un código similar, entonces no tiene que volver a escribir el código. Simplemente usa su código tal vez a través de un servicio web. Por tanto, se convierte en consumidor de servicios. Por lo tanto, la creación de un programa utilizando dichos servicios se denomina SOA. Y el acoplamiento flojo está ahí, ya que el proveedor de servicios y el consumidor pueden estar interactuando incluso si están usando lenguajes de programación diff. Espero que entiendas.

dev ray
fuente
3

de los blogs de ittoolbox.

A continuación, se describen las similitudes y diferencias con las técnicas de diseño anteriores:

• SOA versus programación estructurada o Similitudes: más similar a las llamadas a subrutinas donde se pasan parámetros y la operación de la función se abstrae del llamador, por ejemplo, enlace y ejecución CICS y la palabra reservada COBOL CALL. Los cuadernos se utilizan para definir la estructura de datos que normalmente se define como un esquema XML para los servicios. o Diferencias: SOA está débilmente acoplado, lo que implica que los cambios en un servicio tienen menos impacto en el consumidor (el programa de "llamada") y los servicios son interoperables entre lenguajes y plataformas.

• SOA versus OOA / OOD o Similitudes: encapsulación, abstracción e interfaces definidas o Diferencias: SOA está vagamente acoplado sin jerarquía de clases o herencia, abstracciones de bajo nivel - nivel de clase versus servicio empresarial

• SOA versus desarrollo basado en componentes (CBD) heredado, por ejemplo, CORBA, DCOM, EJB o Similitudes: reutilización mediante el ensamblaje de componentes, interfaces, llamadas remotas o Diferencias: amplia adopción de estándares, esquemas XML frente a objetos matriculados, orquestación de servicios, diseño para reutilización es más fácil, los servicios se centran en el negocio frente a los de TI, los servicios de negocio son por supuesto (amplio en alcance)

• SOA (para integración) versus integración de aplicaciones empresariales (EAI) o Similitudes: mejores prácticas (interfaces bien definidas, esquemas estandarizados, arquitectura dirigida por eventos), interfaces reutilizables, esquemas comunes o Diferencias: estándares, adopción y herramientas mejoradas

Jani Syed
fuente
3

Al leer las respuestas anteriores, me parece que SOA es lo que los desarrolladores (al menos buenos) han estado haciendo desde el primer día.

ziggy
fuente
2

También podría significar "Struct of Arrays" (a diferencia de "Array of Structs"), que es un tema común en la programación paralela (especialmente SIMD), ¡pero supongo que eso no es lo que quieres decir aquí!

Tom
fuente
¡¡Votaciones poco duras sin comentarios !!
Tom
2
@Downvoters: La pregunta en realidad no da suficiente contexto para justificar la respuesta negativa de Tom. El hecho de que todos los demás estén paralizados por el término SOA en el contexto de las arquitecturas de servicio no significa que esto sea incorrecto.
Sebastian Mach
1
@phresnel La etiqueta es soa y si puede pasar el cursor sobre ella durante un segundo, verá una descripción clara del contexto de la pregunta.
BentOnCoding
4
@Robotsushi: Y si puedes investigar la etiqueta durante un segundo, puedes ver que la descripción se agregó más de un año después de la respuesta de Tom.
Sebastian Mach
Creo que si no está seguro del contexto de una pregunta, no podrá dar una respuesta experta. Una simple pregunta en el comentario sobre la naturaleza de la pregunta habría resuelto rápidamente este misterio.
BentOnCoding
2

SOA es una palabra de moda que fue inventada por los proveedores de tecnología para ayudar a vender sus tecnologías relacionadas con Enterprise Service Bus. La idea es que usted haga que sus pequeñas aplicaciones de isla en la empresa (por ejemplo: sistema de contabilidad, sistema de control de existencias, etc.) expongan todos los servicios, de modo que puedan ser orquestados de manera flexible en 'aplicaciones', o más bien convertirse en partes de negocios agregados de ámbito empresarial. lógica.

Básicamente, un montón de viejas tonterías que casi nunca funcionan, porque pasa por alto el punto de que las razones por las que la tecnología es como es en una organización se debe a la cultura, la evolución, la historia de la empresa, y el bloqueo es tan alto que cualquier El intento de reestructurar la tecnología está destinado al fracaso.

Centinela
fuente
1

Escuche la edición de esta semana del podcast Floss Weekly , que cubre SOA. Las descripciones son de bastante alto nivel y no profundizan en demasiados detalles técnicos (aunque hubieran sido útiles ejemplos más concretos y reconocibles de proyectos SOA.

Dana la cuerda
fuente
1

Una arquitectura de aplicación tradicional es:

  • Una interfaz de usuario
  • Cosas indefinidas (implementación) que están encapsuladas / ocultas detrás de la interfaz de usuario

Si desea acceder a los datos mediante programación, es posible que deba recurrir al raspado de pantalla.

SOA me parece que es una arquitectura que se enfoca en exponer datos y / o API legibles por máquina, en lugar de exponer UI.

ChrisW
fuente
1

SOA o Arquitectura Orientada a Servicios es un patrón de arquitectura de software en el que las aplicaciones o sistemas se construyen a partir de servicios de software subyacentes (y generalmente distribuidos) que se ajustan a un conjunto específico de características, a saber:

  1. Basado en interfaz, política y contrato
  2. Transparencia de ubicación
  3. Autónomo
  4. Resumen
  5. Reutilizable
  6. Composable
  7. Apátrida
  8. Detectable
  9. Extensible
  10. Débilmente acoplado

El objetivo principal de SOA es la agilidad del desarrollo de software, es decir, la capacidad de responder al cambio de manera fácil y económica, lo que permite a las empresas responder rápidamente a los mercados cambiantes.

Los servicios se implementan típicamente (pero de ninguna manera exclusivamente) como servicios web, es decir, operan sobre el ubicuo protocolo web HTTP, y se implementan utilizando SOAP basado en XML o el paradigma REST ligero (y más popular).

Robert Morschel
fuente
1

¡Depende de quién seas!

Si es propietario de un negocio, SOA es una solución para aumentar sus ingresos y agilidad empresarial. Si eres un arquitecto empresarial, SOA es una forma de dibujar un software agradable y limpio en un lienzo en blanco. Si es arquitecto, SOA es la solución para diseñar servicios acoplados libremente sobre una plataforma de integración, para simplemente conectar los servicios a los puntos de venta. Si eres un desarrollador, SOA es un paradigma de programación donde un servicio está en el centro del diseño y el código.

Debería leer 100-SOA-Questions [pdf]

Salud

Oussama L.
fuente
1

La Arquitectura Orientada a Servicios (SOA) es un estilo de arquitectura de software que crea aplicaciones como una colección de partes conectables, cada una de las cuales puede ser reutilizada por otras aplicaciones.

Joe Pardi
fuente