Trovo il concetto di transazione davvero utile quando si lavora con i database perché ovviamente consente di eseguire il rollback delle modifiche se un passaggio di una modifica va storto.
C'è un modo per estendere lo stesso principio a più servizi? Supponiamo che io abbia il seguente esempio di qualcuno che carica qualcosa su un sito web (non ideato a proposito, ho a che fare con qualcosa di simile ora):
// Store data in an object store
$object->putToS3();
// Add to ElasticSearch node
Search::indexObject($object);
// Remove local files
$object->deleteLocalFiles();
// Increment some Redis counter
Redis::hmset(...);
// Add to database
$object->save();
C'è qualche soluzione standardizzata su come posso annullare tutte queste azioni se qualcuno fallisce, per mantenere i miei dati nello stato corretto? Non ho molta conoscenza a riguardo.
Ciò che so, tuttavia, è che farebbe schifo per avere qualcosa aggiunto al tuo database che non esiste nella tua soluzione di archiviazione o nel tuo negozio Redis.
Qualcuno ha avuto a che fare con qualcosa di simile?