Transacción distribuida (3) Marco de transacciones distribuidas de Seata: Introducción al modo AT

Introducción a Seata

Seata es una solución de transacciones distribuidas de código abierto dedicada a proporcionar servicios de transacciones distribuidas de alto rendimiento y fáciles de usar. Seata proporcionará a los usuarios modos de transacción AT, TCC, SAGA y XA para crear una solución distribuida única para los usuarios.

En enero de 2019, el equipo de middleware de Alibaba lanzó el proyecto de código abierto Fescar (Fast & EaSy Commit And Rollback) para crear soluciones de transacciones distribuidas de código abierto con la comunidad. La visión de Fescar es hacer que el uso de transacciones distribuidas sea tan simple y eficiente como el uso de transacciones locales, y resolver gradualmente todos los problemas que encuentran los desarrolladores en las transacciones distribuidas.

Después de que Fescar fuera de código abierto, Ant Financial se unió a la comunidad de Fescar para participar en la co-construcción y contribuyó con el modo TCC en Fescar 0.4.0.

Con el fin de crear una comunidad de código abierto de transacciones distribuidas más neutral, abierta y ecológicamente más rica, después de votar por los miembros principales de la comunidad, todos decidieron actualizar la marca de Fescar y la renombraron Seata, que significa: Arquitectura de transacción autónoma extensible simple , que es una solución integral de transacciones distribuidas.

Seata integra la acumulación de Alibaba y Ant Financial en la tecnología de transacciones distribuidas, y ha acumulado una rica experiencia práctica en nuevos escenarios de venta minorista, computación en la nube y nuevas finanzas, pero debe realizar la visión que es aplicable a todos los escenarios de transacciones distribuidas. largo camino por recorrer.



 

Solución de transacciones Seata AT

El modo AT (transacción automática) de Seata es una solución de transacción distribuida no intrusiva . Analicemos el principio de su ejecución en combinación con escenarios comerciales específicos.

Escena empresarial

Sistema de pedidos

Cuando un usuario realiza un pedido, se lleva a cabo el siguiente proceso de tres pasos:

  1. El sistema de pedidos guarda el pedido.
  2. El sistema de pedidos llama a los servicios de inventario para reducir el inventario de productos básicos.
  3. El sistema de pedidos llama al servicio de cuentas para deducir el monto del usuario.

Estos tres pasos deben gestionarse como un negocio completo, ya sea un éxito general o un fracaso general.

Principios básicos de Seata AT

La transacción Seata AT se divide en dos etapas para administrar la transacción global: la
primera etapa:  ejecutar cada transacción de sucursal y la
segunda etapa:  controlar el compromiso final o la reversión de la transacción global


 

La primera etapa: ejecutar cada transacción de sucursal

En el sistema de microservicios, cada servicio no puede percibir si la transacción se ejecuta con éxito o no, en este momento se necesita un servicio especial para coordinar el estado de ejecución de cada servicio. Este servicio se llama TC (Coordinador de transacciones), el coordinador de transacciones.

Antes de que el sistema de órdenes comience a ejecutar la orden guardada, primero inicie el TM (Administrador de transacciones), y el TM se aplica al TC para iniciar una transacción global:

En este momento, TC generará un ID de transacción global , llamado  XID , y pasará el XID a TM:

¡Esto inicia la transacción global !

Después de que se abre la transacción global, se ejecuta el negocio de crear una orden. Primero ejecute la orden de guardado, luego se iniciará un RM (Administrador de recursos) primero, y el XID se pasará al RM.

RM es responsable de administrar las transacciones de la sucursal (es decir, las transacciones locales de microservicios), comunicarse con TC, informar el estado de ejecución de las transacciones de la sucursal y recibir instrucciones de compromiso o reversión para transacciones globales.

RM primero utilizará XID para registrar transacciones de sucursales con TC y llevar las transacciones de sucursales a la jurisdicción de las transacciones globales correspondientes.

Ahora puede ejecutar la transacción de la sucursal que guarda el pedido. Una vez que la transacción de la sucursal se ejecuta con éxito, RM informará el estado de la transacción:

Después de que TC lo reciba, pasará la información de estado a TM:

En este punto, el proceso de guardar el pedido ha terminado. Lo siguiente es llamar al servicio de inventario para reducir el inventario de la mercancía, que es el mismo que el proceso de ejecución del pedido.

Primero llame al servicio de inventario, inicie RM y pase el XID:

El RM del servicio de inventario usa XID para registrarse con el TC, y está incluido en los asuntos globales:

Una vez que la transacción local se ejecuta con éxito, se informa el estado y el TC enviará el estado a TM:

Del mismo modo, complete la transacción de la sucursal de la cuenta:

La segunda etapa: controlar el compromiso final de la transacción global

Ahora, TM (Global Transaction Manager) ha recopilado el estado de éxito de todas las transacciones de la sucursal, tomará una decisión para determinar el éxito de la transacción global y enviará la solicitud de confirmación de la transacción global al TC:

Luego, TC enviará una instrucción de operación de confirmación a todos los RM, y RM completará la operación de confirmación final:

La segunda etapa: controlar la reversión final de la transacción global

Lo anterior es el caso de ejecución exitosa de la transacción global, echemos un vistazo al caso de ejecución de transacción fallida.

Suponiendo que durante la ejecución del negocio de la orden, la transacción de la sucursal de deducir el monto de la cuenta falla, el estado de falla se informa al TC y luego se envía al TM:

TM tomará una decisión, determinará que la transacción global ha fallado y enviará una solicitud de reversión de la transacción global a TC :

Luego, TC enviará una instrucción de operación de reversión a todos los RM, y RM completará la operación de reversión final:

El mecanismo de trabajo específico de Seata AT

He entendido los principios básicos y el flujo de trabajo de Seata AT anteriores, entonces, ¿cómo implementa Seata específicamente las operaciones de compromiso y reversión de transacciones globales? Analicemos el mecanismo de trabajo específico de Seata.


 

La primera etapa: ejecutar la transacción de la sucursal

Tome el servicio de inventario en el negocio de pedidos integral como ejemplo, hay una pieza de información de inventario en la tabla de inventario:

Ahora tenemos que realizar operaciones comerciales para reducir el inventario, de 50 a 40 piezas:

Antes de realizar la operación de modificación de inventario, se eliminará la información de inventario anterior:

Ahora puedes modificar el inventario:

Luego, saque los nuevos datos actualizados:

A continuación, los datos antiguos y los nuevos se fusionarán y guardarán en una tabla de registro de reversión de transacciones: tabla undo_log:

En este punto, la primera etapa, la transacción de la sucursal se completa y el estado se informa al TC:

La segunda etapa: controlar la reversión final de la transacción global

Si la transacción global falla, la transacción de la sucursal que se ha comprometido en la primera fase debe revertirse.

Primero, recibirá una instrucción de reversión de transacción global de TC:

A continuación, de acuerdo con el registro de la tabla de registro de reversión de transacciones (undo_log), restaure el producto a los datos de inventario antiguos:

Luego elimine el registro de transacciones y finalmente complete la segunda fase de la operación de reversión:

La segunda etapa: controlar el compromiso final de la transacción global

Lo anterior es la operación de reversión de transacciones globales. Si la transacción global es exitosa, para completar el envío final, la operación de envío final en modo AT es muy simple y solo es necesario eliminar los datos de registro.

Primero reciba la instrucción de confirmación de transacción global del TC:

Luego, elimine el registro de transacciones directamente y complete la operación de confirmación de la segunda etapa:

 

Supongo que te gusta

Origin blog.csdn.net/abu1216/article/details/110943801
Recomendado
Clasificación