Devo implementare una transazione che si estende su componenti non accoppiati (SOA + MOM).
Quando viene ricevuto un particolare evento, FOO e BAR devono eseguire un'operazione transazionale: cioè, entrambe le transazioni su FOO-DB e BAR-DB devono essere eseguite correttamente o nessuna di esse. La coerenza qui è molto importante.
Quando l'evento è ricevuto (1), FOO esegue un'operazione su un database (2).
Se l'operazione fallisce, non accade più nulla.
Se l'operazione ha esito positivo, un messaggio viene inviato a BAR tramite un MOM (Kafka) (3).
BAR esegue un'operazione su un altro database (4).
Se l'operazione fallisce, l'operazione precedentemente eseguita su FOO-DB deve essere ripristinata (5, 6).
Se l'operazione ha esito positivo, va tutto bene.
In questo momento sto usando Kafka. Mi piace la sua semplicità e velocità, ma sono aperto a considerare altre soluzioni se renderebbero questa situazione più facile da implementare / mantenere / estendere.
Sono abbastanza nuovo per architetture e pattern SOA e MAM, quindi mi chiedo:
- questo è uno scenario / modello comune?
- come viene comunemente implementato?
- i mezzi semplici offerti da Kafka sono sufficienti per implementarlo in modo affidabile o sarebbe meglio prendere in considerazione altre soluzioni?
- è il gestore delle transazioni distribuite solitamente fornito dal MOM o dal database? e se è il DB, come può essere fatto usando diversi DB?
Ci scusiamo per le molte domande, spero che non siano troppo per una singola domanda. Grazie!