Compensating Service Transaction

Los servicios pueden o no pueden tener la lógica interna adecuada para manejar algunas excepciones, preservando la integridad de la composición restante. Sin embargo, con excepciones graves o imprevistos, los servicios a menudo no tienen otra opción que propagar la excepción a otros servicios en la composición. Del mismo modo, cuando la propia plataforma de ejecución genera una excepción, puede ser necesario detener la ejecución de la composición o terminar la instancia de composición por completo.
Al aplicar Atomic Service Transaction, estas situaciones son resueltas al permitir que todos los servicios puedan revertir a su estado original antes de que se destruya la compociocion de la instancia. Con el fin de obtener este tipo funcionalidad, los recursos de back-end (tablas, registros, otros sistemas) típicamente tendrán que ser bloqueados durante la duración de la transacción, y dependiendo de dicha duración y el alcance de la transacción, puede afectar seriamente al rendimiento y también puede reducir la escalabilidad del inventario general del servicio.

 En lugar de ser envuelto en una transacción atómica, la composición de servicios se complementa con la lógica de compensación. Esta lógica difiere de transacciones atómicas en que no requiere servicios para mantener los recursos del estado o de bloqueo originales para la duración de la transacción.
Mientras no existan requisitos para restaurar una actividad de tiempo de ejecución de nuevo a su estado original, las excepción se pueden manejar sin poner en peligro la integridad de la composición.

 La lógica de compensación se define típicamente en estos niveles:
• Miembro de la composición
• Controlador de composición
Un servicio se considera un miembro de la composición cuando se está compuesta por la lógica de composición de los padres. Para cada capacidad que altera el estado de la implementación del servicio subyacente (incluyendo cualquier repositorio u otros recursos que se accedan por la lógica de servicio), se añade la capacidad de deshacer. Esto permite que la lógica de la composición de los padres pueda responder a una excepción llamando a la capacidad de deshacer de cada servicio que se invoca hasta ese momento.
El controlador de composición puede ser un servicio de tarea que está componiendo otros servicios o puede representar la lógica de composición padre, que es parte de una plataforma basada en orquestación. Cuando se aplica dentro de los entornos de Middleware, el papel de un controlador de composición es comparable a la de un gestor de transacciones.
De cualquier manera, esta lógica se puede ampliar con rutinas que también responden a las excepciones con lógica pre-determinada para su manejo. La única diferencia es que, en este caso, la lógica reside con la lógica de tareas, como por abstracción de proceso.
En el plano regulador, la lógica de compensación podrá invocar opcionalmente las capacidades de deshacer de los servicios para miembros de composición. También puede ser diseñado para realizar funciones adicionales, como el envío de un mensaje de notificación o puesta en marcha de una nueva instancia de la composición después de dar por terminada la instancia anterior. En la mayoría de los casos, la lógica de compensación invalidará el último estado "committed", en contra a la cancelación del regreso al pre-estado original.
 Principios
 Ventajas
 \*Permite excepciones en tiempo de ejecución, las cuales deben resolverse con la posibilidad de una reducción de bloqueo de recursos y el consumo de memoria.
\* Pérdida de acoplamiento