分布式事务一(转载)

论坛 期权论坛     
选择匿名的用户   2021-5-23 02:00   126   0
<h3 style="padding:5px 0px 5px 10px;line-height:25px;color:rgb(255,255,255);font-family:&#39;微软雅黑&#39;, &#39;宋体&#39;, &#39;黑体&#39;, Arial;text-align:left;margin-top:15px;margin-bottom:15px;background:rgb(168,168,168);"><span style="font-size:16px;">前言</span></h3>
<p style="margin:10px auto;color:rgb(0,0,0);font-family:&#39;Helvetica Neue&#39;, Helvetica, Verdana, Arial, sans-serif;text-align:left;background-color:rgb(255,255,255);"><span style="font-size:16px;">    最近很久没有写博客了,一方面是因为公司事情最近比较忙,另外一方面是因为在进行 <a href="http://www.cnblogs.com/savorboard/p/cap.html" style="margin:0px;padding:0px;color:rgb(33,117,155);text-decoration:underline;">CAP</a> 的下一阶段的开发工作,不过目前已经告一段落了。</span></p>
<p style="margin:10px auto;color:rgb(0,0,0);font-family:&#39;Helvetica Neue&#39;, Helvetica, Verdana, Arial, sans-serif;text-align:left;background-color:rgb(255,255,255);"><span style="font-size:16px;">    接下来还是开始我们今天的话题,说说分布式事务,或者说是我眼中的分布式事务,因为每个人可能对其的理解都不一样。</span></p>
<p style="margin:10px auto;color:rgb(0,0,0);font-family:&#39;Helvetica Neue&#39;, Helvetica, Verdana, Arial, sans-serif;text-align:left;background-color:rgb(255,255,255);"><span style="font-size:16px;">    分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免,本文就分布式事务来简单聊一下。</span></p>
<h3 style="padding:5px 0px 5px 10px;line-height:25px;color:rgb(255,255,255);font-family:&#39;微软雅黑&#39;, &#39;宋体&#39;, &#39;黑体&#39;, Arial;text-align:left;margin-top:15px;margin-bottom:15px;background:rgb(168,168,168);"><span style="font-size:16px;">数据库事务</span></h3>
<p style="margin:10px auto;color:rgb(0,0,0);font-family:&#39;Helvetica Neue&#39;, Helvetica, Verdana, Arial, sans-serif;text-align:left;background-color:rgb(255,255,255);"><span style="font-size:16px;">    在说分布式事务之前,我们先从数据库事务说起。 数据库事务可能大家都很熟悉,在开发过程中也会经常使用到。但是即使如此,可能对于一些细节问题,很多人仍然不清楚。比如很多人都知道数据库事务的几个特性:原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily),简称就是ACID。但是再往下,比如问到隔离性指的是什么的时候可能就不知道了,或者是知道隔离性是什么但是再问到数据库实现隔离的都有哪些级别,或者是每个级别他们有什么区别的时候可能就不知道了。</span></p>
<p style="margin:10px auto;color:rgb(0,0,0);font-family:&#39;Helvetica Neue&#39;, Helvetica, Verdana, Arial, sans-serif;text-align:left;background-color:rgb(255,255,255);"><span style="font-size:16px;">    本文并不打算介绍这些数据库事务的这些东西,有兴趣可以搜索一下相关资料。不过有一个知识点我们需要了解,就是假如数据库在提交事务的时候突然断电,那么它是怎么样恢复的呢? 为什么要提到这个知识点呢? 因为分布式系统的核心就是处理各种异常情况,这也是分布式系统复杂的地方,因为分布式的网络环境很复杂,这</span><span style="font-size:18px;">种 “断电”故障要比单机多很多,所以我们在做分布式系统的时候,最先考虑的就是这种情况。这些异常可能有机器宕机、网络异常、消息丢失、消息乱序、数据错误、不可靠的TCP、存储数据丢失、其他异常等等...</span></p>
<p style="margin:10px auto;color:rgb(0,0,0);font-family:&#39;Helvetica Neue&#39;, Helvetica, Verdana, Arial, sans-serif;text-align:left;background-color:rgb(255,255,255);"><span style="font-size:16px;">    我们接着说本地事务数据库断电的这种情况,它是怎么保证数据一致性的呢?我们使用SQL Server来举例,我们知道我们在使用 SQL Server 数据库是由两个文件组成的,一个数据库文件和一个日志文件,通常情况下,日志文件都要比数据库文件大很多。数据库进行任何写入操作的时候都是要先写日志的。同样的道理,我们在执行事务的时候数据库首先会记录下这个事务的redo操作日志,然后才开始真正操作数据库,在操作之前首先会把日志文件写入磁盘,那么当突然断电的时候,即使操作没有完成,在重新启动数据库时候,数据库会根据当前数据的情况进行undo回滚或者是redo前滚,这样就保证了数据的强一致性。</span></p>
<p style="margin:10px auto;color:rgb(0,0,0);font-family:&#39;Helvetica Neue&#39;, Helvetica, Verdana, Arial, sans-serif;text-align:left;background-color:rgb(255,255,255);"><span style="font-size:16px;">接着,我们就说一下分布式事务。</span></p>
<h3 style="padding:5px 0px 5px 10px;line-height:25px;colo
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP