{"id":479420,"date":"2023-08-09T10:39:54","date_gmt":"2023-08-09T10:39:54","guid":{"rendered":""},"modified":"2023-09-05T11:18:47","modified_gmt":"2023-09-05T11:18:47","slug":"two-phase-commit","status":"publish","type":"wiki","link":"https:\/\/oneproxy.pro\/pt\/wiki\/two-phase-commit\/","title":{"rendered":"Confirma\u00e7\u00e3o em duas fases"},"content":{"rendered":"<p>Two-phase commit (2PC) \u00e9 um algoritmo distribu\u00eddo usado em ci\u00eancia da computa\u00e7\u00e3o para garantir a consist\u00eancia de uma transa\u00e7\u00e3o em v\u00e1rios bancos de dados ou recursos. Garante que todos os n\u00f3s participantes se comprometam com a transa\u00e7\u00e3o ou nenhum deles o fa\u00e7a, mantendo assim a integridade dos dados e evitando inconsist\u00eancias em sistemas distribu\u00eddos.<\/p>\n<h2>A hist\u00f3ria da origem do commit em duas fases e a primeira men\u00e7\u00e3o dele<\/h2>\n<p>O conceito de commit em duas fases foi introduzido pela primeira vez por EW Dijkstra em 1974 em seu artigo intitulado \u201cSolu\u00e7\u00e3o de um problema no controle de programa\u00e7\u00e3o simult\u00e2nea\u201d. Mais tarde, em 1981, o protocolo de commit de duas fases foi formalmente descrito por Jim Gray e Andreas Reuter em seu influente artigo \u201cTransaction Processing: Concepts and Techniques\u201d.<\/p>\n<h2>Informa\u00e7\u00f5es detalhadas sobre commit em duas fases<\/h2>\n<p>A confirma\u00e7\u00e3o em duas fases foi projetada para gerenciar transa\u00e7\u00f5es distribu\u00eddas onde v\u00e1rios n\u00f3s ou bancos de dados est\u00e3o envolvidos. \u00c9 essencial garantir que todos os n\u00f3s concordem em confirmar ou abortar a transa\u00e7\u00e3o. O protocolo opera em duas fases: a fase de prepara\u00e7\u00e3o e a fase de confirma\u00e7\u00e3o.<\/p>\n<p>Na fase de prepara\u00e7\u00e3o:<\/p>\n<ol>\n<li>O n\u00f3 coordenador envia uma solicita\u00e7\u00e3o de prepara\u00e7\u00e3o a todos os n\u00f3s participantes.<\/li>\n<li>Cada participante responde concordando (SIM) ou discordando (N\u00c3O).<\/li>\n<li>Caso algum participante discorde, o coordenador instrui todos os n\u00f3s a abortar a transa\u00e7\u00e3o.<\/li>\n<\/ol>\n<p>Na fase de confirma\u00e7\u00e3o:<\/p>\n<ol>\n<li>Se todos os participantes concordarem (SIM) durante a fase de prepara\u00e7\u00e3o, o coordenador envia uma solicita\u00e7\u00e3o de commit a todos os n\u00f3s.<\/li>\n<li>Ao receber a solicita\u00e7\u00e3o de commit, cada participante finaliza a transa\u00e7\u00e3o tornando permanentes as altera\u00e7\u00f5es necess\u00e1rias.<\/li>\n<li>Caso algum participante discorde (N\u00c3O) durante a fase de prepara\u00e7\u00e3o, o coordenador envia uma solicita\u00e7\u00e3o de aborto a todos os n\u00f3s e a transa\u00e7\u00e3o \u00e9 revertida.<\/li>\n<\/ol>\n<h2>A estrutura interna do commit em duas fases e como funciona<\/h2>\n<p>A confirma\u00e7\u00e3o de duas fases envolve os seguintes componentes:<\/p>\n<ol>\n<li>\n<p><strong>Coordenador<\/strong>: Respons\u00e1vel por iniciar e gerenciar a transa\u00e7\u00e3o. Ele se comunica com todos os n\u00f3s participantes e determina se deve confirmar ou abortar a transa\u00e7\u00e3o com base em suas respostas.<\/p>\n<\/li>\n<li>\n<p><strong>Participantes<\/strong>: N\u00f3s ou bancos de dados envolvidos na transa\u00e7\u00e3o. Eles respondem \u00e0 solicita\u00e7\u00e3o de prepara\u00e7\u00e3o do coordenador com acordo ou desacordo.<\/p>\n<\/li>\n<li>\n<p><strong>Log de transa\u00e7\u00f5es<\/strong>: Cada participante mant\u00e9m um log de transa\u00e7\u00f5es, que registra todas as altera\u00e7\u00f5es feitas durante a transa\u00e7\u00e3o. Esse log ajuda a garantir que as altera\u00e7\u00f5es possam ser revertidas, se necess\u00e1rio.<\/p>\n<\/li>\n<\/ol>\n<p>O algoritmo prossegui como desejado:<\/p>\n<ol>\n<li>\n<p>O coordenador inicia a fase de prepara\u00e7\u00e3o enviando uma solicita\u00e7\u00e3o de prepara\u00e7\u00e3o a todos os participantes.<\/p>\n<\/li>\n<li>\n<p>Cada participante vota (concorda ou discorda) se pode realizar a transa\u00e7\u00e3o.<\/p>\n<\/li>\n<li>\n<p>O coordenador coleta todos os votos e decide se compromete ou aborta a transa\u00e7\u00e3o.<\/p>\n<\/li>\n<li>\n<p>Na fase de confirma\u00e7\u00e3o, o coordenador envia uma solicita\u00e7\u00e3o de confirma\u00e7\u00e3o ou de cancelamento a todos os participantes com base no resultado da fase de prepara\u00e7\u00e3o.<\/p>\n<\/li>\n<li>\n<p>Os participantes executam a decis\u00e3o final, seja comprometendo as altera\u00e7\u00f5es permanentemente ou revertendo a transa\u00e7\u00e3o.<\/p>\n<\/li>\n<\/ol>\n<h2>An\u00e1lise dos principais recursos do commit em duas fases<\/h2>\n<p>O commit em duas fases oferece v\u00e1rios recursos principais:<\/p>\n<ol>\n<li>\n<p><strong>Atomicidade<\/strong>: garante que todos os n\u00f3s sejam confirmados ou nenhum deles o fa\u00e7a, evitando atualiza\u00e7\u00f5es parciais ou inconsistentes.<\/p>\n<\/li>\n<li>\n<p><strong>Consist\u00eancia<\/strong>: O protocolo garante que o sistema permane\u00e7a consistente, mesmo na presen\u00e7a de falhas.<\/p>\n<\/li>\n<li>\n<p><strong>Durabilidade<\/strong>: depois que a transa\u00e7\u00e3o \u00e9 confirmada, as altera\u00e7\u00f5es se tornam permanentes e sobrevivem \u00e0s falhas do sistema.<\/p>\n<\/li>\n<li>\n<p><strong>Bloqueando a Natureza<\/strong>: A confirma\u00e7\u00e3o em duas fases tem uma natureza de bloqueio, o que significa que pode esperar indefinidamente por uma resposta dos participantes, levando a poss\u00edveis atrasos.<\/p>\n<\/li>\n<\/ol>\n<h2>Tipos de commit em duas fases<\/h2>\n<p>Existem varia\u00e7\u00f5es do protocolo de confirma\u00e7\u00e3o de duas fases, incluindo:<\/p>\n<table>\n<thead>\n<tr>\n<th>Tipo<\/th>\n<th>Descri\u00e7\u00e3o<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Confirma\u00e7\u00e3o b\u00e1sica de duas fases<\/td>\n<td>A vers\u00e3o padr\u00e3o descrita anteriormente.<\/td>\n<\/tr>\n<tr>\n<td>Confirma\u00e7\u00e3o trif\u00e1sica<\/td>\n<td>Adiciona uma fase extra de \u201cpr\u00e9-comprometimento\u201d para resolver problemas de bloqueio.<\/td>\n<\/tr>\n<tr>\n<td>Compromisso otimista<\/td>\n<td>Permite que os participantes se comprometam previamente antes de receber a decis\u00e3o do coordenador.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Maneiras de usar o commit em duas fases, problemas e suas solu\u00e7\u00f5es<\/h2>\n<p>O commit em duas fases encontra aplica\u00e7\u00f5es em v\u00e1rios campos, como:<\/p>\n<ol>\n<li>\n<p><strong>Gerenciamento de banco de dados<\/strong>: Garantindo consist\u00eancia e integridade em sistemas de banco de dados distribu\u00eddos.<\/p>\n<\/li>\n<li>\n<p><strong>Transa\u00e7\u00f5es de com\u00e9rcio eletr\u00f4nico<\/strong>: Gerenciando transa\u00e7\u00f5es em v\u00e1rios servidores durante compras online.<\/p>\n<\/li>\n<\/ol>\n<p>No entanto, o protocolo tem algumas limita\u00e7\u00f5es:<\/p>\n<ol>\n<li>\n<p><strong>Bloqueio<\/strong>: A natureza de bloqueio do 2PC pode levar a problemas de desempenho, especialmente em sistemas de grande escala.<\/p>\n<\/li>\n<li>\n<p><strong>Ponto unico de falha<\/strong>: O coordenador atua como ponto \u00fanico de falha; se travar, todo o processo de transa\u00e7\u00e3o poder\u00e1 falhar.<\/p>\n<\/li>\n<\/ol>\n<p>Para mitigar esses problemas, algumas solu\u00e7\u00f5es incluem:<\/p>\n<ol>\n<li>\n<p><strong>Otimiza\u00e7\u00f5es<\/strong>: implementa\u00e7\u00e3o de t\u00e9cnicas de otimiza\u00e7\u00e3o, como estrat\u00e9gias de commit antecipado ou de commit sem bloqueio, para reduzir problemas de bloqueio.<\/p>\n<\/li>\n<li>\n<p><strong>Redund\u00e2ncia de Coordenador<\/strong>: Apresentando redund\u00e2ncia de coordenador com um mecanismo de failover para melhorar a toler\u00e2ncia a falhas.<\/p>\n<\/li>\n<\/ol>\n<h2>Principais caracter\u00edsticas e outras compara\u00e7\u00f5es com termos semelhantes<\/h2>\n<table>\n<thead>\n<tr>\n<th>Caracter\u00edstica<\/th>\n<th>Compara\u00e7\u00e3o com commit em duas fases<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Consist\u00eancia<\/td>\n<td>Semelhante ao commit trif\u00e1sico e ao Paxos na manuten\u00e7\u00e3o da consist\u00eancia em sistemas distribu\u00eddos.<\/td>\n<\/tr>\n<tr>\n<td>Desempenho<\/td>\n<td>Comparado ao Paxos e ao Raft, o commit em duas fases pode apresentar maior lat\u00eancia devido ao bloqueio.<\/td>\n<\/tr>\n<tr>\n<td>Toler\u00e2ncia ao erro<\/td>\n<td>O commit em duas fases e o Paxos fornecem toler\u00e2ncia a falhas, enquanto o commit em duas fases \u00e9 mais simples de implementar.<\/td>\n<\/tr>\n<tr>\n<td>Despesas gerais de comunica\u00e7\u00e3o<\/td>\n<td>O Raft tem menor sobrecarga de comunica\u00e7\u00e3o do que o Two-phase commit, tornando-o mais adequado para sistemas de grande escala.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Perspectivas e tecnologias do futuro relacionadas ao compromisso em duas fases<\/h2>\n<p>\u00c0 medida que os sistemas distribu\u00eddos continuam a evoluir, poder\u00e3o surgir protocolos de transa\u00e7\u00e3o mais eficientes e tolerantes a falhas. Os pesquisadores est\u00e3o explorando alternativas como Raft, Paxos e variantes do Two-phase commit para resolver as limita\u00e7\u00f5es e problemas de escalabilidade. Al\u00e9m disso, os avan\u00e7os nos algoritmos de consenso e no aprendizado de m\u00e1quina podem levar a novas maneiras de alcan\u00e7ar um acordo distribu\u00eddo.<\/p>\n<h2>Como os servidores proxy podem ser usados ou associados ao commit de duas fases<\/h2>\n<p>Os servidores proxy atuam como intermedi\u00e1rios entre clientes e servidores, lidando com solicita\u00e7\u00f5es e respostas em nome dos clientes. Embora n\u00e3o estejam diretamente associados ao Two-phase commit, os servidores proxy podem desempenhar um papel significativo na distribui\u00e7\u00e3o de transa\u00e7\u00f5es entre v\u00e1rios servidores back-end.<\/p>\n<p>Quando os clientes iniciam transa\u00e7\u00f5es distribu\u00eddas por meio de um servidor proxy, o proxy pode rotear solicita\u00e7\u00f5es de forma inteligente para diferentes n\u00f3s de back-end, participando do protocolo Two-phase commit. Isso permite balanceamento de carga e maior toler\u00e2ncia a falhas em sistemas distribu\u00eddos. Al\u00e9m disso, os servidores proxy podem armazenar respostas em cache, reduzindo a carga nos n\u00f3s de back-end e melhorando o desempenho geral do sistema.<\/p>\n<h2>Links Relacionados<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/distributed-transactions-two-phase-commit-protocol\/\" target=\"_new\" rel=\"noopener nofollow\">Transa\u00e7\u00f5es distribu\u00eddas: protocolo de confirma\u00e7\u00e3o de duas fases<\/a><\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/a-guide-to-the-two-phase-commit-protocol\" target=\"_new\" rel=\"noopener nofollow\">Um guia para o protocolo de compromisso de duas fases<\/a><\/li>\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/paxos-distributed-consensus-protocols\/\" target=\"_new\" rel=\"noopener nofollow\">Protocolos de consenso: compromisso de duas fases vs. Paxos<\/a><\/li>\n<li><a href=\"https:\/\/raft.github.io\/\" target=\"_new\" rel=\"noopener nofollow\">Compreendendo o algoritmo de consenso da jangada<\/a><\/li>\n<li><a href=\"https:\/\/lamport.azurewebsites.net\/pubs\/paxos-simple.pdf\" target=\"_new\" rel=\"noopener nofollow\">Paxos simplificados<\/a><\/li>\n<\/ul>\n<p>Concluindo, o commit em duas fases \u00e9 um algoritmo distribu\u00eddo crucial para manter a consist\u00eancia transacional em v\u00e1rios n\u00f3s. Apesar de sua natureza de bloqueio e vulnerabilidade do coordenador, ele continua amplamente utilizado em diversas aplica\u00e7\u00f5es. \u00c0 medida que a tecnologia evolui, os investigadores continuam a explorar alternativas e otimiza\u00e7\u00f5es, e os servidores proxy podem aumentar a sua efic\u00e1cia em sistemas distribu\u00eddos. Compreender as nuances do protocolo Two-phase commit \u00e9 essencial para construir aplica\u00e7\u00f5es distribu\u00eddas robustas e confi\u00e1veis.<\/p>","protected":false},"featured_media":479421,"menu_order":0,"template":"","meta":{"_acf_changed":false,"content-type":"","inline_featured_image":false,"footnotes":""},"class_list":["post-479420","wiki","type-wiki","status-publish","has-post-thumbnail","hentry"],"acf":{"faq_title":"Frequently Asked Questions about <mark>Two-phase commit: A Comprehensive Overview<\/mark>","faq_items":[{"question":"What is Two-phase commit?","answer":"<p>Two-phase commit (2PC) is a distributed algorithm used in computer science to ensure the consistency of a transaction across multiple databases or resources. It guarantees that either all participating nodes commit to the transaction or none of them do, thereby maintaining data integrity and preventing inconsistencies in distributed systems.<\/p>"},{"question":"Who first introduced the concept of Two-phase commit?","answer":"<p>The concept of Two-phase commit was first introduced by E. W. Dijkstra in 1974 in his paper titled \"Solution of a Problem in Concurrent Programming Control.\" Later, in 1981, Jim Gray and Andreas Reuter formally described the Two-phase commit protocol in their paper \"Transaction Processing: Concepts and Techniques.\"<\/p>"},{"question":"How does Two-phase commit work?","answer":"<p>Two-phase commit operates in two phases: the preparation phase and the commit phase. In the preparation phase, the coordinator node sends a prepare request to all participating nodes, and each participant replies with an agreement (YES) or disagreement (NO). If any participant disagrees, the coordinator instructs all nodes to abort the transaction. In the commit phase, if all participants agreed during the preparation phase, the coordinator sends a commit request to all nodes. Each participant finalizes the transaction by making the necessary changes permanent. If any participant disagreed during the preparation phase, the coordinator sends an abort request to all nodes, and the transaction is rolled back.<\/p>"},{"question":"What are the key features of Two-phase commit?","answer":"<p>Two-phase commit offers several key features, including atomicity (ensuring all nodes commit or none do), consistency, durability, and a blocking nature (waiting for responses, potentially causing delays).<\/p>"},{"question":"Are there different types of Two-phase commit?","answer":"<p>Yes, variations of the Two-phase commit protocol exist. Some of them include:<\/p><ol><li>Basic Two-phase commit: The standard version described earlier.<\/li><li>Three-phase commit: Adds an extra \"pre-commit\" phase to address blocking issues.<\/li><li>Optimistic commit: Allows participants to pre-commit before receiving the decision from the coordinator.<\/li><\/ol>"},{"question":"In what applications is Two-phase commit used?","answer":"<p>Two-phase commit finds applications in various fields, including database management to ensure consistency and integrity in distributed databases, and e-commerce transactions for managing transactions across multiple servers during online purchases.<\/p>"},{"question":"What are the problems associated with Two-phase commit and their solutions?","answer":"<p>Two-phase commit has some limitations, such as its blocking nature and coordinator vulnerability. To mitigate these issues, optimization techniques like eager commit or non-blocking commit strategies can be employed. Additionally, introducing coordinator redundancy with a failover mechanism improves fault tolerance.<\/p>"},{"question":"How does Two-phase commit compare to other consensus protocols?","answer":"<p>Compared to other consensus protocols like Three-phase commit, Paxos, and Raft, Two-phase commit may exhibit higher latency due to blocking. While it provides fault tolerance and simplicity of implementation, alternatives like Raft and Paxos may offer lower communication overhead and better scalability.<\/p>"},{"question":"How does the future look for Two-phase commit?","answer":"<p>As distributed systems continue to evolve, researchers are exploring more efficient and fault-tolerant transaction protocols. Advancements in consensus algorithms and machine learning may lead to novel ways of achieving distributed agreement in the future.<\/p>"},{"question":"How are proxy servers associated with Two-phase commit?","answer":"<p>Proxy servers can play a significant role in distributing transactions across multiple backend servers. They can intelligently route requests to different backend nodes participating in the Two-phase commit protocol, ensuring load balancing and enhanced fault tolerance in distributed systems. Additionally, proxy servers can cache responses, reducing the load on backend nodes and improving overall system performance.<\/p>"}]},"_links":{"self":[{"href":"https:\/\/oneproxy.pro\/pt\/wp-json\/wp\/v2\/wiki\/479420","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oneproxy.pro\/pt\/wp-json\/wp\/v2\/wiki"}],"about":[{"href":"https:\/\/oneproxy.pro\/pt\/wp-json\/wp\/v2\/types\/wiki"}],"version-history":[{"count":0,"href":"https:\/\/oneproxy.pro\/pt\/wp-json\/wp\/v2\/wiki\/479420\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oneproxy.pro\/pt\/wp-json\/wp\/v2\/media\/479421"}],"wp:attachment":[{"href":"https:\/\/oneproxy.pro\/pt\/wp-json\/wp\/v2\/media?parent=479420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}