mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-11-17 06:33:49 +08:00
fix img
This commit is contained in:
@@ -202,7 +202,7 @@ function hide_canvas() {
|
||||
<h4>底层实现</h4>
|
||||
<p>正如算法的名字一样,二阶段提交的底层实现主要分成两个阶段,分别是<strong>询问阶段</strong>和<strong>提交阶段</strong>。具体过程如下图所示:</p>
|
||||
<p>整个集群服务器被分成一台协调服务器,集群中的其他服务器是被协调的服务器。在二阶段算法的询问阶段,分布式集群服务在接收到来自客户端的请求的时候,首先会通过协调者服务器,针对本次请求能否正常执行向集群中参与处理的服务器发起询问请求。集群服务器在接收到请求的时候,会在本地机器上执行会话操作,并记录执行的相关日志信息,最后将结果返回给协调服务器。</p>
|
||||
<p><img src="assets/Ciqc1F8tFY-AdQ5KAACfHFJeUlA350.png" alt="image.png" /></p>
|
||||
<p><img src="assets/Ciqc1F8tFY-AdQ5KAACfHFJeUlA350.png" alt="png" /></p>
|
||||
<p>在协调服务器接收到来自集群中其他服务器的反馈信息后,会对信息进行统计。如果集群中的全部机器都能正确执行客户端发送的会话请求,那么协调者服务器就会再次向这些服务器发送提交命令。在集群服务器接收到协调服务器的提交指令后,会根据之前处理该条会话操作的日志记录在本地提交操作,并最终完成数据的修改。</p>
|
||||
<p>虽然二阶段提交可以有效地保证客户端会话在分布式集群中的事务性,但是<strong>该算法自身也有很多问题</strong>,主要可以归纳为以下几点:效率问题、单点故障、异常中断。</p>
|
||||
<h4>性能问题</h4>
|
||||
@@ -214,7 +214,7 @@ function hide_canvas() {
|
||||
<p>由于以上种种问题,在实际操作中,我更推荐使用另一种分布式事务的算法——三阶段提交算法。</p>
|
||||
<h3>三阶段提交</h3>
|
||||
<p>三阶段提交(Three-phase commit)简称 3PC , 其实是在二阶段算法的基础上进行了优化和改进。如下图所示,在整个三阶段提交的过程中,相比二阶段提交,<strong>增加了预提交阶段</strong>。</p>
|
||||
<p><img src="assets/Ciqc1F8tFZuAZgJHAADHKaM9oZI445.png" alt="image" /></p>
|
||||
<p><img src="assets/Ciqc1F8tFZuAZgJHAADHKaM9oZI445.png" alt="png" /></p>
|
||||
<h4>底层实现</h4>
|
||||
<p><strong>预提交阶段</strong></p>
|
||||
<p>为了保证事务性操作的稳定性,同时避免二阶段提交中因为网络原因造成数据不一致等问题,完成提交准备阶段后,集群中的服务器已经为请求操作做好了准备,协调服务器会向参与的服务器发送预提交请求。集群服务器在接收到预提交请求后,在本地执行事务操作,并将执行结果存储到本地事务日志中,并对该条事务日志进行锁定处理。</p>
|
||||
|
||||
Reference in New Issue
Block a user