Primero, ¿qué estás tratando de lograr? SOA es útil para sistemas que necesitan cambiar con relativa facilidad y ser accesibles para un nuevo programador. Por otro lado, tiende a tener una compensación de rendimiento porque termina segregando la persistencia, de modo que su interacción ocurre en el servidor de aplicaciones en lugar de en la base de datos. Por lo general, esta compensación de rendimiento no es un problema, pero si está trabajando en un sistema transaccional de alto rendimiento, es posible que deba comprometerse colocando algunos algoritmos en la base de datos y que estos violen el desglose de sus servicios.
Así que si quieres los pros y no está particularmente preocupado por los contras, comience por leer algunos libros aplicables sobre el tema:
Lo que se quiere es tendencia hacia un diseño con objetos de servicio de alto nivel cuyas relaciones son gestionados a través de dependency injection través de un recipiente service locator. En el caso de ColdFusion ColdSpring es un ejemplo. Esto luego permite object mocking para que pueda probar la unidad fácilmente. Por ejemplo, si los servicios viven en otros servidores, entonces tienen objetos de servicio localmente que son proxies que se pasarán como dependencias. Para probar estos proxies se burlan de modo que no tengan que hablar con el servidor remoto.
En cuanto a la gestión de errores y las interrupciones del servidor. Supongo que está preocupado principalmente por tratar problemas fuera del control del servidor local. Esta es otra razón para usar un objeto proxy de servicio. Haga que este objeto sea responsable de manejar los tiempos de espera, los valores de respuesta erróneos y similares, efectivamente un anti corruption layer.
En cuanto al intercambio de bases de datos, construiría las relaciones de mi tabla para reflejar mis relaciones de objeto de servicio. Entonces, si las tablas en cuestión tienen datos que solo se relacionan a través de los servicios, no aplicaré ninguna restricción de clave externa. Entonces, si bien podrían estar en la misma base de datos, no importa. Esto le permite mover esos servicios y tablas de bases de datos en otro lugar con relativamente pocos cambios en el código.
Y ESB generalmente se ve como un componente crítico en una arquitectura orientada a servicios. Sin un ESB para manejar las tareas de mediación y enrutamiento, todo lo que tiene es una arquitectura punto a punto que usa servicios web. –
@ Brooks-Bilson, pero "la arquitectura punto a punto que usa servicios web" ya puede calificarse como arquitectura SOA, ¿correcto? – Henry