Eu já precisei usar transações distribuidas, mas somente no caso simples, um coordenador, múltiplos recursos. Esse é facil, até que funciona bem, e não deixa o sistema em estados de inconsistencia bizarros no caso de falhas.
Nunca vi sistemam que usem múltiplos coordenadores - distribuídas pra valer. Esse é o pior caso, e o mais facil de deixar o sistema naqueles muitos estados “buraco negro” o próprio XA diz existir.
Um fato, XA e two-phase commit não garantem 100% de atomicidade, garantem que em um cenário de falha razoavel seja possivel abortar a transação globalmente de forma consistente. Isso até que funciona, mas apenas quando todos participantes estão disponíveis para fazer recovery ASAP.
Mas falando de SOA, SOA para valer, no qual um sistema fala com outros sistemas completamente aliens. Fazer uma transação distribuida é impraticavel por vários motivos:
:arrow: O protocolo XA existe 1 tonelada de estados intermediários, teu serviço vai ser obrigado a saber da existência deles e permitir sistemas remotos intervirem nisso.
:arrow: A troca de mensagens é grande, o tempo de resposta fica bem compromentido se os sistemas existirem em sites diferentes.
:arrow: Transações distribuidas sofrem do mal do inderminismo no caso de falhas em vários cenários.
:arrow: Pago 1000 reais para quem conseguir me explicar ao vivo todos estados e transições do protocolo XA sem qualquer auxílio.
:arrow: Transações compensatórias eu sei explicar em um guardanapo e até estagiário consegue entender.
:arrow: Encarando a cruel realidade, nenhum ISP testa o serviço de DTC dele com o de outros fornecedores, então intraoperabilidade entre DTCs é lenda urbana.
Caramba, transações distribuidas são um treco muito, muito dificil para fazer funcionar quando temos controle de tudo na nossa mão, falando com 2-3 provedores de serviço distinto vai ser um caos.