distributed transactions - ¿Qué es una “transacción distribuida”?
distributed-transactions (5)
El artículo de Wikipedia para transacciones distribuidas no es muy útil.
¿Puede dar una descripción de alto nivel de lo que es una transacción distribuida?
Además, ¿puede dar un ejemplo de por qué una aplicación o base de datos debe realizar una transacción que actualice los datos en dos o más computadoras en red? Entendí el ejemplo clásico del banco; Me interesan más las transacciones distribuidas en bases de datos de escala web como Dynamo, Bigtable, HBase o Cassandra.
He intentado representar los detalles de las transacciones distribuidas en esta publicación. ¿Cómo ajustaría la transacción distribuida (XA) para mejorar el rendimiento?
Los datos válidos para transacciones distribuidas son datos que tienen requisitos muy altos para la consistencia. Por lo general, esto es dinero o algo más que nunca podemos tener datos obsoletos. Normalmente, defino dos categorías Datos en vivo y datos en los que no existe una necesidad inmediata de corrección / consistencia.
Ahora la segunda parte de la pregunta sobre Dynamo, Bigtable, HBase o Cassandra.
No puede dibujar un paralelo entre las bases de datos NOSQL y las transacciones distribuidas. La existencia misma de esta clase de bases de datos se justifica como un medio para evitar transacciones distribuidas. La transacción distribuida se centra en la coherencia. Eso es todo lo contrario con los almacenamientos de NOSQL que se centran en la disponibilidad y partición.
El modelo transaccional habitual utilizado en dichas bases de datos es la consistencia eventual.
Las transacciones distribuidas abarcan varios sistemas físicos, mientras que las transacciones estándar no. La sincronización entre los sistemas se convierte en una necesidad que tradicionalmente no existiría en una transacción estándar.
De su referencia de Wikipedia ...
... una transacción distribuida se puede ver como una transacción de base de datos que debe sincronizarse (o proporcionar propiedades ACID) entre múltiples bases de datos participantes que se distribuyen entre diferentes ubicaciones físicas ...
Una transacción distribuida es una transacción en una base de datos distribuida (es decir, una en la que los datos se almacenan en varios sistemas físicamente separados). Es digno de mención porque existe una gran cantidad de complejidad (especialmente en las comunicaciones) para garantizar que todas las máquinas permanezcan en acuerdo, de modo que la transacción sea exitosa o parezca que no sucedió nada.
Una transacción distribuida es una transacción que funciona en varias computadoras. Supongamos que inicia una transacción en algún método en un programa en la computadora A. Luego realiza algunos cambios en los datos en el método en la computadora A, y después el método llama a un servicio web en la computadora B. El método del servicio web en la computadora B falla y devuelve la transacción. Dado que la transacción se distribuye, esto significa que cualquier cambio realizado en la computadora A también debe revertirse. La combinación del coordinador de transacciones distribuidas en Windows y el marco .net facilitan esta funcionalidad.
Usualmente, las transacciones ocurren en un servidor de base de datos:
BEGIN TRANSACTION
SELECT something FROM myTable
UPDATE something IN myTable
COMMIT
Una transacción distribuida involucra múltiples servidores:
BEGIN TRANSACTION
UPDATE amount = amount - 100 IN bankAccounts WHERE accountNr = 1
UPDATE amount = amount + 100 IN someRemoteDatabaseAtSomeOtherBank.bankAccounts WHERE accountNr = 2
COMMIT
La dificultad proviene del hecho de que los servidores deben comunicarse para garantizar que se satisfagan las propiedades transaccionales, como la atomicidad , en ambos servidores: si la transacción se realiza correctamente, los valores deben actualizarse en ambos servidores. Si la transacción falla, la transacción debe ser retrotraída en ambos servidores. Nunca debe suceder que los valores se actualicen en un servidor pero no se actualicen en el otro.