架构杂谈《四》

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a1022560838/article/details/96270009

分布式一致性协议

一、引言

  在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica),这些个副本会放在不同的物理机上,为了对用户提供正确的数据,我们需要保证这些放在不同物理机上的副本是一致的。为了解决这种分布式一致性问题,提出了很多经典的协议和算法,比较著名的是 两阶段提交协议和三阶段提交协议。

二、两阶段提交协议

  两阶段提交协议把分布式事务分为两个阶段,一个是准备阶段,一个是提交阶段。准备阶段和提交阶段都是由事务管理器发起的,两阶段提交协议的流程如下:

  1、准备阶段:事务管理器向资源管理器发起指令,资源管理器评估自己的状态,如果资源管理器评估指令可以完成。则会写redo或者undo日志,然后锁定资源,执行操作,但是并不会提交

  2、提交阶段:如果每个资源管理器明确返回准备成功,事务管理器向资源管理器发起提交指令,资源管理器提交资源变更的事务,释放锁定的资源;如果任何一个资源管理明确返回准备失败,则事务管理器向资源管理器发起中止指令,资源管理器取消已经变更的事务,执行undo日志。释放锁定的资源。

  

(两阶段提交协议的成功场景图)

  我们从上图中可以看到,两阶段提交协议在准备阶段锁定资源,这是一个重量级的操作,能保证强一致性,但是实现起来复杂、成本大、不够灵活。还有以下缺点:

     (1)、阻塞:对于任何一次指令都必须收到明确的响应,才会继续进行下一步,否则处于阻塞状态,占用的资源一直被锁定,不会释放

     (2)、单点故障:如果事务管理器(协调者)挂了(宕机),资源管理器(参与者)没有事务管理器(协调者)指挥,则会一直阻塞,尽管可以通过选举新的协调者替代原有的协调者,但是参与者接收后也宕机,则新上任的协调者无法处理这种情况

     (3)、脑裂:协调者发送提交指令,有的参与者接收到并执行了事务,有的参与者没有接收到事务就没有执行事务,多个参与者之间是不一致的。

  上面的问题虽然很少发生,但每次发生都需要人工参与,没有自动化解决方案,因此两阶段提交协议在正常情况下能保证系统的强一致性,但在出现异常的情况下,需要人工干预解决,因此可用性不够好,其实这也符合CAP协议的一致性和可用性不能兼得的原理。

三、三阶段提交协议

  三阶段提交协议是两阶段提交协议的改进版本,它通过超时机制解决了阻塞的问题,并且把两个阶段增加为三个阶段。

  1、询问阶段:事务管理器(协调者)询问参与者(资源管理器)是否可以完成指令,参与者只需要回答是或者否,而不需要做真正的操作,这个阶段超时会导致中止。

  2、准备阶段:如果在询问阶段所有参与者都返回可以执行操作,则协调者向参与者发送预执行请求,然后参与者写 redo 和 undo 日志,执行操作但不提交操作;如果在询问阶段任何一个参与者返回不能执行操作的结果,则协调者向参与者发送中止请求,这里的逻辑和两阶段提交协议的准备阶段是相似的。

  3、提交阶段:如果每个参与者在准备阶段返回准备成功,则协调者向参与者发送提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者返回准备失败,则协调者向参与者发送中止指令,参与者自己取消已经变更的事务,执行 undo 日志,释放锁定的资源。这里的逻辑和两阶段提交协议的提交阶段一致。

    

 (三阶段提交协议的成功场景图)

  三阶段提交协议与两阶段提交协议主要有以下不同点:

    (1)、增加了一个询问阶段,询问阶段可以确保尽可能早地发现无法执行操作而需要中止的行为,但是它并不能发现所有的这种行为,只会减少这种情况的发生。

    (2)、在准备阶段以后,协调者和参与者执行的任务中都增加了超时,一旦超时,则协调者和参与者都会继续提交事务,默认为成功。

  三阶段提交协议与两阶段提交协议相比,具有以上的优点,但是一旦发生超时,系统仍然会发生不一致,只不过这种情况很少见。好处是不会阻塞和永远锁定资源。  

四、TCC

  两阶段和三阶段提交协议,在遇到极端情况时,系统会产生阻塞或者不一致的问题,需要人干预解决。两阶段及三阶段方案中都包含多个参与者、多个阶段实现一个事务。实现事务,性能也是一个很大的问题。因此在互联网的高并发系统中,很少有使用两阶段提交和三阶段提交协议的场景。

  后来有人提出了TCC协议,TCC协议将一个任务分成 Try、Confirm、Cancel 三个步骤。正常的流程会先执行 Try,如果执行没有问题,则再执行 Confirm,如果执行过程中出现了异常。则执行操作的逆操作 Cancel。从正常的流程上讲。这还是一个两阶段提交协议,但在执行出现异常后有一定的自我修复能力,如果任何参与者出现了问题,则协调者通过执行操作的逆操作来 Cancel 之前的操作。达到最终一致性状态。

  可以看出,从时序上讲,如果遇到机端情况,则TCC会有很多问题,如:如果在取消时一些参与者收到指令,而另一些参与者没有收到指令,则整个系统任然是不一致的,对于这种复杂的情况,系统首先会通过补偿的方式尝试自我修复,如果系统无法修复。还是需要人工干预解决。

  从 TCC 的逻辑上来看,它是简化版的三阶段提交协议,解决了两阶段提交协议的阻塞问题,但还是没有解决极端情况下出现的问题(不一致和脑裂问题)。然而,TCC 通过自动化补偿手段,将需要人工处理的不一致问题降到最低,也是一种很有用的解决方案。

                                  

(TCC 协议的使用场景)

说明:

  1、参考书籍:《分布式服务架构:原理、设计与实战》

  2、如有不合适的地方请反馈。综合后更改。

展开阅读全文

外挂杂谈(四)——冬天

12-22

一直在忙于编写自己的外挂,外挂杂谈系列也一直没时间继续,今天,不,应该是昨天,9C终于抛出了网络游戏界最重的炸弹:(以下引自9c官方网站)rnrn近日,公安机关及国家相关部门于全国各地同时展开的“零点行动”中,成功破获奇迹(MU)外挂制作销售团伙!rnrn“便宜外挂”、“奇迹伴侣”外挂团伙的主要犯罪嫌疑人已于2003年12月18日凌晨1点、12月19日凌晨4点在河南、北京等地全部落网!rnrn目前公安机关的打击行动还在继续进行中!rnrn看后不由触动颇多,本来写程序的心情也没有了,来这里聊聊天吧。rnrn刚才四处看了看,新浪,17173等网站都有了转载,似乎如同破获了某犯毒集团一样。不知道这次的主要“犯罪嫌疑人”是不是程序员,详情大家都不太明了。而相关的新闻评论却也很有意思,骂声一大片,不是骂外挂制作者而是骂网游运行商以及政府相关机构。这让我不能不去想到底是谁出了问题???rn我们来谈谈法律的问题。中国现在是在进步,社会中出现了什么状况就马上有相关的法律法规在酝酿,但我的问题是,外挂到底有没有法律明文出台???就凭新闻出版署开个新闻发布会说外挂非法就非法吗???谁给了新闻出版署这个权利???国家的立法机关又是干什么的???国家的立法机构又是谁???在没有真正的法律出台前,这样的行动是否又合法???rn我们再来谈谈就目前情况下,外挂是否触犯了法律。这点我到是认为,在没有经过原有游戏著作权所有者的同意下开发并经营外挂确实侵犯了知识产权的相关法律,但既然是知识产权法那就是经济类的法律问题,怎么能搞什么零点活动象抓毒犯一样抓外挂制作者呢?我想这个事情应该是由游戏运营商或者生产商首先和侵权者进行交涉,在无法得到满意的结果后提交到法院进行经济案件的诉讼,然后由法院传唤,这个和公共安全能扯到什么关系???是不是还带着枪,然后一脚揣开人家大门呢。中国这群做事的到底有几个懂法律???!!!再就是外挂制作者因为无法进入主流渠道,所以税肯定是没交的,但这个也轮不到公安来处理。rn我们再来谈谈新闻界的毛病,从这些搞新闻的来看,真是越来越不无知者无谓。以下引新华网某“新闻人”一段外挂的定义:rn“他们破解正版网络游戏密码,非法制作一些程序卡出售,就是所谓的“外挂”。”rn就这样的角色,还敢写这方面的报道,程序卡是个什么???只有网络游戏卡的厉害,还没见过程序卡,都不知道他在说什么。现在做新闻是不是也太好混了点,不是说不熟悉某方面就不能做报道,但至少基本的功课还是要做的呀。其实我不认为所有的新闻人都不知道外挂到底是怎么回事情,只不过目前的环境谁也不愿意出来说说真话,就剩下那群人“团伙”“团伙”的喊着高兴,还好我只是一个人做外挂即使被抓也不至于被称为团伙,晕,搞不明白做外挂真有那么十恶不赦吗???rn我们再来谈谈外挂到底和游戏有什么关系,我只想这样说真正好的游戏做不出外挂,外挂无非帮玩家练级,而目前的游戏大多是垃圾(我的认为),都是韩产垃圾,玩到最后除了级别,装备就什么都没有了。很多人都沉迷在这里面,外挂不过是帮他们争取一些休息的时间,这个不是我做外挂就说外挂的好话,事实就是这样。至于说到游戏的公平却是个大笑话,好象目前没有哪个游戏不存在游戏运营商变相卖装备的,即使是游戏运营商不卖,玩家也可以找玩家买,也就是说有钱就可以级别高装备好(好的装备练级当然就快),这个又何来公平???这个世界就是这样的,你有钱就买汽车没钱就挤公交,汽车当然比公交快,所以有钱人是花金钱买时间,没钱人是花时间买金钱。游戏也一样,你有钱就买外挂练的快,没钱就多花时间练没什么好抱怨的,而且以现在的外挂价格来看并不存在有钱和没钱的区别。话说回来了,即使没外挂,我有钱买一个人每天帮练可以吗???代练的生意照样有人做,公平吗???其实我最想说的是现在的游戏就是垃圾,你无法在里面得到休闲的快乐,真的,我理想的游戏是无法作出外挂的,因为外挂只是程序化的东西,如果游戏不是以练功得装备为核心,外挂就根本没存在的基础,因为这样的游戏是需要真正参与进去,里面有很多可能很多交流,而不是用一个程序定义一个挂机过程就可以实现的。rn最后我觉得目前政府的出发点有问题,现在的网络游戏在中国是不能带来真正的财富的,只能是把本来中国大众的钱转移到少数网络游戏富人以及韩国人手上,这样的虚假经济繁荣是可悲的。作为政府应该限制游戏的运营而鼓励游戏的开发,让韩国人运营中国人的游戏才能真正使财富流向中国。其实以前中国对于游戏的态度向来是不支持的,比如街机就一直受限制,这个是好的作风,为什么到网络游戏却搞不清方向了呢???难道真如人们说的,富人的政治就要在中国开始了吗???!!!rn 论坛

没有更多推荐了,返回首页