<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>2phase commite &#8211; Oscar Blancarte &#8211; Software Architecture</title>
	<atom:link href="https://www.oscarblancarteblog.com/tag/2phase-commite/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.oscarblancarteblog.com</link>
	<description>Software Architect &#38; FullStack developer</description>
	<lastBuildDate>Fri, 19 Sep 2014 10:00:00 +0000</lastBuildDate>
	<language>es-MX</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.5</generator>

<image>
	<url>https://www.oscarblancarteblog.com/wp-content/uploads/2019/03/cropped-ob-32x32.png</url>
	<title>2phase commite &#8211; Oscar Blancarte &#8211; Software Architecture</title>
	<link>https://www.oscarblancarteblog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">89905023</site>	<item>
		<title>2Phase Commit</title>
		<link>https://www.oscarblancarteblog.com/2014/09/19/data-base-2phase-commit-en-ambientes-distribuidos/</link>
					<comments>https://www.oscarblancarteblog.com/2014/09/19/data-base-2phase-commit-en-ambientes-distribuidos/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Fri, 19 Sep 2014 10:00:00 +0000</pubDate>
				<category><![CDATA[Base de datos]]></category>
		<category><![CDATA[2phase commite]]></category>
		<guid isPermaLink="false">http://oscarblancarteblog.com/?p=383</guid>

					<description><![CDATA[<p>Hoy en día casi todas las aplicaciones utilizan bases de datos para almacenar y transaccionar la información, sin embargo casi todas las aplicaciones tiene como origen de datos una sola base de datos centralizada, en donde guardan toda la información, actualizan o borran, para lo cual una sola transacción garantiza que todos los cambios que realicemos [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/09/19/data-base-2phase-commit-en-ambientes-distribuidos/">2Phase Commit</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><img loading="lazy" class="alignleft wp-image-730 size-full" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/09/database-administration21-e1438489477397.jpg" alt="" width="160" height="100" />Hoy en día casi todas las aplicaciones utilizan bases de datos para almacenar y transaccionar la información, sin embargo casi todas las aplicaciones tiene como origen de datos una sola base de datos centralizada, en donde guardan toda la información, actualizan o borran, para lo cual una sola transacción garantiza que todos los cambios que realicemos se apliquen de forma atómica.<span id="more-383"></span></p>
<figure id="attachment_384" aria-describedby="caption-attachment-384" style="width: 371px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/09/commitsimple.png"><img loading="lazy" class="wp-image-384 size-full" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/09/commitsimple.png" alt="2Phase commit" width="371" height="147" /></a><figcaption id="caption-attachment-384" class="wp-caption-text">Fig. 1: En la figura se puede apreciar como la aplicación abre una transacción única, de esta forma todos los cambios serán aplicados de forma atómica.</figcaption></figure>
<p>&nbsp;</p>
<p style="text-align: justify;">Sin embargo existen casos concretos en los que es necesario actualizar mas de una base datos en una sola operación, un caso muy tipo es <a href="http://www.oscarblancarteblog.com/2014/07/23/que-es-service-oriented-architecture-soa/">SOA</a>, debido a que es común la necesidad de transaccionar con mas de una base de datos al mismo tiempo.</p>
<figure id="attachment_386" aria-describedby="caption-attachment-386" style="width: 366px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/09/twocommitsimple1.png"><img loading="lazy" class="wp-image-386 size-full" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/09/twocommitsimple1.png" alt="2Phase commit" width="366" height="291" /></a><figcaption id="caption-attachment-386" class="wp-caption-text">Fig. 2: La imagen muestra como una aplicación realiza cambios en dos bases de datos a la vez, pero los realiza en dos transacciones independientes.</figcaption></figure>
<p style="text-align: justify;">Este tipo de transacciones pueden ser delicadas debido a que si hacemos commit en la primera, pero la segunda falla, tendremos un problema de integridad, ya que la primera base de datos habrá aplicados los cambios en el commit y la segunda base de datos realizara un RollBack, deshaciendo todos los cambios.</p>
<figure id="attachment_388" aria-describedby="caption-attachment-388" style="width: 367px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/09/twocommitsimplefail.png"><img loading="lazy" class="wp-image-388 size-full" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/09/twocommitsimplefail.png" alt="2Phase commit" width="367" height="284" /></a><figcaption id="caption-attachment-388" class="wp-caption-text">Fig. 3: En la imagen se muestra como una transacción fue exitosa y la otra no, esto desde luego provoca que perdamos la integridad de los datos.</figcaption></figure>
<h2>2Phase Commit o Commit de dos faces.</h2>
<p style="text-align: justify;">Para resolver el problema que acabamos de ver, es necesario utilizar transacciones distribuidas con un Commit de dos faces.</p>
<p style="text-align: justify;">El 2Phase Commit o Commit de dos faces se diferencia de un commit normal en que este engloba un una sola transacción los cambios realizados en dos o mas base de datos a la vez(XA Transaction). Para realizar esto, cada manejador de base de datos abrirá una transaccion de forma separada. El coordinador de la transacción les solicitara a todos los manejadores de base de datos que se preparen para el commit( Paso 1), en este punto cada base de datos esta lista para hacer el commit, Si todos los manejadores pasan por el paso 1 de forma positiva, entonces el coordinador de la transacción solicitara el commit a todos los manejadores. Al final, si todos las base de datos realizan el commit, entonces la transaccion sera exitoso y se habrá realizado una transaccion global.</p>
<figure id="attachment_390" aria-describedby="caption-attachment-390" style="width: 631px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/09/2phasecommit.png"><img loading="lazy" class="wp-image-390 size-full" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/09/2phasecommit.png" alt="2Phase commit" width="631" height="244" /></a><figcaption id="caption-attachment-390" class="wp-caption-text">Fig. 4: En la imagen podemos apreciar el commit de dos faces, el primer paso del lado izquierdo solicita a los manejadores de base de datos que se preparen para hacer el commit, el paso 2 del lado derecho, solicita a cada manejador que realice el commit.</figcaption></figure>
<p style="text-align: justify;">Otro escenario es cuando alguno de los manejadores falla durante la preparación al commit, por lo cual toda la transacción falla y todos los manejadores dan un Rollback a la transacción.</p>
<figure id="attachment_391" aria-describedby="caption-attachment-391" style="width: 632px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/09/2phasecommitfail.png"><img loading="lazy" class="wp-image-391 size-full" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/09/2phasecommitfail.png" alt="2Phase commit" width="632" height="239" /></a><figcaption id="caption-attachment-391" class="wp-caption-text">Fig. 5: Durante la preparación, una base de datos falla y se aplica un rollback en todas las bases de datos, lo cual provoca un rollback global.</figcaption></figure>
<h2>Escenario practico:</h2>
<p style="text-align: justify;">Para ilustrar esto de una forma mas practica, hablaremos de un ejemplo concreto donde se podria utilizar una transaccion distribuida o XA Transaction.</p>
<p style="text-align: justify;">Imaginemos que tenemos dos sistemas, el sistema de nomina y el contable, sin embargo requerimos realizar un servicio que nos permita crear un usuario, pero que este usuario sea valido para los dos sistemas, para lo cual el servicio tendrá que escribir en la base de datos de los dos sistemas para crearlos. Desde luego que es importante que si la creación falla en algunos de los dos, el usuario no deberá crearse en ninguno de los dos sistemas.</p>
<figure id="attachment_393" aria-describedby="caption-attachment-393" style="width: 597px" class="wp-caption aligncenter"><a href="http://www.oscarblancarteblog.com/wp-content/uploads/2014/09/2phasecommitdistribuido.png"><img loading="lazy" class="wp-image-393 size-full" src="http://www.oscarblancarteblog.com/wp-content/uploads/2014/09/2phasecommitdistribuido.png" alt="2Phase commit" width="597" height="376" /></a><figcaption id="caption-attachment-393" class="wp-caption-text">Fig. 6:En la imagen podemos ver que el servicio habre una transacción global o XA Transacction y realiza los cambios en ambas bases de datos, luego solicita a los manejadores de base de datos que se preparen para el commit y finalmente se realiza un commit sobre las dos bases de datos.</figcaption></figure>
<p style="text-align: justify;">Acabamos de ver un ejemplo simple donde podemos utilizar un commit de dos faces, sin embargo pueden existir muchos mas escenarios donde sea necesario transaccionar dos o hasta mas base de datos a la vez.</p>
<h2>Conclusiones:</h2>
<p style="text-align: justify;">Las ventajas que ofrecen el 2Phase commit son muy grandes, ya que nos permite realizar transacciones globales con mas de una bases de datos a la vez, Ya solo dependerá de nosotros utilizarlas sabiamente, ya que en ambientes de integración siempre es mas recomendable utilizar servicios que conexiones directas a la bases de datos de nuestros aplicativos.</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2014/09/19/data-base-2phase-commit-en-ambientes-distribuidos/">2Phase Commit</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2014/09/19/data-base-2phase-commit-en-ambientes-distribuidos/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">383</post-id>	</item>
	</channel>
</rss>
