Cet article présentera en détail comment implémenter le modèle TCC des transactions distribuées à l'aide de PHP. TCC signifie "Try-Confirm-Cancel", qui est une solution courante pour assurer la cohérence des transactions dans les systèmes distribués. L'ensemble du processus est divisé en trois étapes: tenter l'exécution, confirmer l'exécution et annuler l'exécution.
La transaction distribuée TCC est une solution au problème de cohérence des transactions dans les systèmes distribués. Les transactions autonomes traditionnelles garantissent la cohérence des données grâce aux caractéristiques acides, tandis que le traitement des transactions est plus compliqué dans les environnements distribués car ils impliquent plusieurs services indépendants. TCC résout efficacement ce problème en divisant la phase d'exécution de la transaction.
Pendant la phase d'essai, le système tente d'effectuer des opérations commerciales et enregistre l'état actuel. Ce n'est que lorsque la tentative sera réussie, la prochaine étape confirmera l'exécution; Sinon, l'opération d'annulation sera déclenchée.
La phase de confirmation confirme que l'essai de phase précédente a été exécuté avec succès et persiste l'opération. Cette opération est idempotente et peut être exécutée en toute sécurité plusieurs fois sans effets secondaires.
La phase d'annulation est utilisée pour faire reculer le fonctionnement de la phase d'essai, restaurant l'état du système avant le début de la transaction. Cette opération est également idempotente, garantissant que plusieurs exécutions n'affectent pas l'état final.
Ce qui suit est un exemple de PHP pour démontrer comment implémenter une transaction distribuée simple TCC, en supposant que deux nœuds de service A et B participent à des transactions à nœuds transversales.
Tout d'abord, préparez le code pour deux nœuds, qui peuvent être construits à l'aide d'un cadre PHP tel que Laravel, et assumer respectivement différentes responsabilités des transactions.
class TransactionManager
{
public function try()
{
// Effectuer des opérations commerciales à ce stade,Et enregistrer le statut
}
public function confirm()
{
// Confirmer l'exécution à ce stade,Et persister les données
}
public function cancel()
{
// Annuler l'exécution à ce stade,et restaurer l'État à l'État avant le début de la transaction
}
} class NodeAController
{
public function transfer()
{
$transactionManager = new TransactionManager();
$transactionManager->try();
}
}
class NodeBController
{
public function confirm()
{
$transactionManager = new TransactionManager();
$transactionManager->confirm();
}
public function cancel()
{
$transactionManager = new TransactionManager();
$transactionManager->cancel();
}
} class TransactionController
{
public function handle()
{
try {
$nodeAController = new NodeAController();
$nodeAController->transfer();
$nodeBController = new NodeBController();
$nodeBController->confirm();
} catch (Exception $e) {
$nodeBController->cancel();
}
}
}Grâce à cet exemple, nous démontrons comment implémenter le modèle TCC de transaction distribuée avec PHP, et expliquer clairement les responsabilités et les méthodes de mise en œuvre d'essayer, de confirmer et d'annuler. Le modèle TCC garantit efficacement la cohérence des transactions dans les systèmes distribués.
Dans les projets réels, il peut être encore amélioré et élargi en fonction des besoins de l'entreprise, tels que l'ajout de mécanismes de rémunération des transactions et les files d'attente de messages pour améliorer la robustesse et la disponibilité du système.
J'espère que cet article peut aider les lecteurs à mieux comprendre et appliquer le modèle TCC de transaction distribuée et réaliser une architecture de service distribuée très fiable.