You are on page 1of 5

TEMA: TRANSACCIONES DISTRIBUIDAS 2 Phase Commit

TRANSACCIONES DISTRIBUIDAS

Las transacciones distribuidas son aquellas que acceden a datos pertenecientes a distintos nodos de un sistema distribuido. En este tipo de transacciones, se actualiza los datos en dos o ms bases de datos conectadas a una red manteniendo las propiedades: ACID (Atomicity, Consistency, Isolation and Durability) = Atomicidad, Coherencia, Aislamiento y Durabilidad del procesamiento de la transaccin. Una transaccin es una unidad lgica de trabajo que debe cumplir con ciertas propiedades (Propiedades ACID). Todas las operaciones contenidas en ella deben realizarse correctamente para que la transaccin se complete. En el caso de que la operacin sea entendida como fallida, toda la transaccin se deshace. Por ejemplo: Se puede realizar diferentes acciones en una base de datos (insercin, actualizacin, borrado de registros) mismas que estn contenidas dentro de una transaccin y todas deben llevarse a cabo para que los cambios persistan, es decir, se realice un commit. Si es que una de ellas falla, el resto no se guarda (se ejecuta un rollback). En Java, para realizar el proceso del ejemplo antes propuesto, es necesario implementar las distintas interfaces de la especificacin JTA de Sun.

Modelos de Transacciones Distribuidas: Transacciones Planas (flat): Una transaccin se extiende a un nmero arbitrario de nodos. Transacciones Anidadas (nested): Una transaccin se estructura en una jerarqua. Cada vez que se mueve a un nuevo nodo lo hace en un nuevo nivel de la jerarqua.

La distribucin introduce nuevos problemas:

TEMA: TRANSACCIONES DISTRIBUIDAS 2 Phase Commit

Es ms difcil garantizar la atomicidad de fallo porque puede existir fallos de los participantes. El control de concurrencia afecta a varios nodos Cuando un nodo se cae, las transacciones iniciadas por l que estn ejecutndose en otros nodos quedan hurfanas. Para ellos se introducen algoritmos de orphan killing.

Compromiso En Dos Fases (2pc) Two-Phase Commit Es un mecanismo llamado commit en dos fases (two-phase commit) el cual es usado para coordinar mltiples recursos durante una transaccin distribuida, consiste en 2 fases: o Fase 1: Fase de preparacin. o Fase 2: Fase de compromiso (commit).

Nodo coordinador inicia el protocolo para una transaccin. El resto de nodos se llaman participantes. Una transaccin no compromete en ningn nodo hasta que todos los participantes estn preparados. Un participante est preparado cuando ha escrito en el log las postimgenes de los datos que la transaccin ha accedido. El coordinador registra la transaccin en el log y los participantes. El coordinador enva un mensaje prepare a los participantes. Cada participante aade un voto al log (si o no) y fuerza su log a disco. A continuacin cada participante responde al coordinado con su voto. Si el coordinador recibe un voto negativo: Se aborta la transaccin, registra dicho aborto en el log y se comunica a los dems participantes.

TEMA: TRANSACCIONES DISTRIBUIDAS 2 Phase Commit

Si el coordinador recibe todos los votos y son afirmativos: Se registra el compromiso en el log, fuerza el log a disco y enva la decisin a los participantes. Los participantes registran la decisin en su log y la aplican. Envan un mensaje done al coordinador. El coordinador escribe un done record cuando recibe el done de todos los participantes.

Por ejemplo: Como se asegura que una transaccin interbancaria se realice con xito, es decir retirar dinero de un banco y depositarlo en otro, teniendo en cuenta que el gestor de bases de datos del banco origen y destino son diferentes(por ejemplo mysql y postgresql) y que estn en distintos hosts?. Definiendo entonces de una manera ms simple la transaccin distribuida de ejemplo, quedara as: begin Tx. retirar dinero del banco origen, por ejemplo MYSQL depositar dinero al banco destino por ejemplo POSTGRESQL. si(no excepciones) commit Tx. sino rollback Tx

Fallos en 2PC: Desde el punto de vista del coordinador: o No le llegan todas las respuestas del prepare. Aborta la transaccin. Desde el punto de vista del participante: o No recibe el prepare. Aborta la transaccin. Si despus recibe este mensaje, contesta no o lo ignora. o Si no recibe el resultado, se bloquea. La desventaja del 2PC es que es bloqueante, cuando el coordinador ha recibido todos los votos, stos son afirmativos, y el coordinador se cae antes de enviar el resultado. Si todos los participantes votaron afirmativamente aunque conversen entre s, son incapaces de determinar si el coordinador decidi comprometer (escribi con xito en el log la decisin de comprometer), o si fall antes de decidirlo (en cuyo caso aborta la transaccin).

Eficiencia La eficiencia est determinada por el nmero de mensajes y escrituras en el log. Las escrituras en el log pueden ser eager (hay que esperar a que finalicen antes de continuar con el siguiente paso del protocolo) o lazy (se pueden realizar a posteriori y no tienen impacto en la duracin).

TEMA: TRANSACCIONES DISTRIBUIDAS 2 Phase Commit

En el coordinador: o El registro de la transaccin es lazy. No conoce a los participantes de la transaccin. o El resultado es eager. Si lo enva antes de que se escriba y se cae, cuando recupere abortar la transaccin (inconsistencia). o Despus de recibir todos los done. Esta escritura es lazy. En un participante: o Eager cuando recibe el mensaje prepare. Si contesta antes de prepararse, cuando se recupere abortar. Inconsistencias. o Lazy: cuando escribe la decisin antes de responder con done. Si se cae y no ha escrito la decisin, el participante tendr que preguntar por el resultado de la transaccin cuando se recupere.

Webgrafa: http://resist.isti.cnr.it/free_slides/distributed/jimenez/tema3.pdf http://es.wikipedia.org/wiki/Commit_de_dos_fases#Generalidades http://carloscacique.blogspot.com/2010/02/implementando-transacciones.html http://thejavacode.blogspot.com/2008/09/transacciones-distribuidas-en-java.html http://www.javaworld.com/javaworld/jw-04-2007/jw-04-xa.html

TEMA: TRANSACCIONES DISTRIBUIDAS 2 Phase Commit

You might also like