华为资深架构师:Cloud Native架构一致性问题及解决方案

Posted IT大咖说

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为资深架构师:Cloud Native架构一致性问题及解决方案相关的知识,希望对你有一定的参考价值。

华为资深架构师:Cloud Native架构一致性问题及解决方案


内容来源:2017年12月2日,华为资深架构师王启军在“NJSD互联网架构峰会”进行《Cloud Native架构一致性问题及解决方案》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。

阅读字数:2092 | 6分钟阅读


摘要

在开发或软件架构的过程中,经常会遇到一致性的问题,那么如何去解决权衡。我们先从理论入手,然后进一步讨论强一致性和最终一致性的解决方案。


嘉宾演讲视频及PPT回顾:http://suo.im/tPQXc


基础理论
Cloud Native的组成


关于这个概念很多人都有不同的看法,我认为Cloud Native主要是由架构、组织、工程三部分组成的。大部分公司可能主要是关注架构部分,其实组织方面也是非常重要的,它的价值在于能够实现更快的速度、更好的用户交互体验以及更稳当的系统。

Cloud Native-架构


Cloud Native架构主要包含两部分,一个是基础设施这块,另一个是微服务架构方面。围绕着微服务又扩展出了可用性、一致性以及扩展性部分。


一致性的分类


华为资深架构师:Cloud Native架构一致性问题及解决方案

在学术界一般将一致性分为两类,一类是以数据为中心,一类以用户为中心。以数据为中心的,无论有多少个节点都是从整体上来看一致性。而以用户为中心,是从客户端的节点来看待一致性的。

严格一致性


严格一致性要求任何写操作都能立刻同步到其他所有进程,任何读操作都能读取到最新的修改。比如说有三个节点,当某一个节点的数据a变成1的时候,另外两个节点的a就需要同步改变。


顺序一致性


严格一致性需要有一个全局时钟才能实现,但是这个全局时钟是很难实现的。于是顺序一致性放弃了它,转而改用分布式逻辑时钟来实现。


顺序一致性是指所有的进程以相同的顺序看到所有的修改,读操作未必能及时得到此前其他进程对同一数据的写更新,但是每个进程读到的该数据的不同值得顺序是一致的。

因果一致性


因果一致性是一种弱化的顺序一致性,如果两个数据之间存在因果关系,那么在后续的所有操作都应该基于这一关系。所有的进程必须以相同的顺序看到具有潜在因果关系的写操作。不同进程可以以不同的顺序看到并发的写操作。


如何实现强一致性


两阶段提交


提到强一致性,相信大家首先想到的就是两阶段提交。也就是整个交互过程分为两个阶段。第一阶段协调者先向参与者提问是否可以提交,同时锁定数据,第二阶段参与者提交。


这里面存在几个问题,第一阶段锁定数据之后,如果协调者挂掉了,将没有角色去通知参与者是否应该提交,这个数据会被一致锁定。如果第二阶段参与者1提交成功,参与者2提交失败,此时协调者不知道该如何处理,因为参与者1已经提交成功,外部可以访问了。


三阶段提交


三阶段提交其实是把两阶段提交的第一阶段分为了两个阶段,这是为了降低原来第一阶段的死锁的概率。三阶段的第一阶段在询问是否提交的时候并没有锁定数据,而是在准备提交的时候才锁定数据。


实际上使用三阶段提交,性能上会有更多的消耗,交互会越来越多,可扩展性也很差。

如何实现最终一致性


调试失败怎么办


华为资深架构师:Cloud Native架构一致性问题及解决方案

假设有一个服务M需要去调用另外的两个服务A、B,在调用的过程中失败了话,最常见的做法就是重试。这时就需要去考虑重试的次数、超时时间、间隔时间以及间隔时间的衰减度,而重试没有做好的话就很容易造成系统的负担。


改进方案


华为资深架构师:Cloud Native架构一致性问题及解决方案


其实完全可以添加一个日志,并且可以收集到远端。通过收集系统收集到分布式文件系统内,这样就可以不断的去检测这个系统是否有问题。


还有一种解决方案——可靠事件,服务在调用失败后,通过另一种方式将数据传输到消息队列,然后要被调用的服务去读取消息队列。


对于最终一致性来说,要么全部成功,要么全部失败。


如何保证写后读一致


这需要在写消息的同时,去写一个事件日志。如果一旦失败的可以通过补偿服务不断的遍历事件的这张表,最终拿到消息再去发送时间


长事务一致性


Sage事务模型


华为资深架构师:Cloud Native架构一致性问题及解决方案

Sgae是一个比较早期的事务模型,它的核心思想是将一个长事务拆分为多个本地事务。而process manageer就是负责处理事务拆封的,然后再去调用不同的服务。

华为资深架构师:Cloud Native架构一致性问题及解决方案


这是一个具体的事务处理流程,这里面需要定时的去做检查判断是否失败,失败了就要发送消息,正向调用时写回退日志。


TCC


在做系统的时候你会发现服务是很容易的去扩展的,数据库往往会出现瓶颈,那么如何去平衡压力,有很多的解决方案,TCC就是其中的一种。


TCC的优势在于将数据库的操作,放到业务层处理,平衡了数据库的压力。但同时也付出了一定代价,它增加了业务的复杂度,需要提供相应的Try、Confirm、Cancel接口,而且接口还是幂等性的。


如何保障幂等


第一种就是通过数据加锁的方式,第二种是分布式锁,不过这种锁不能保障绝对一致性,第三种方案可以去做唯一约束,在唯一约束无效的情况下可以增加流水表这也是第四种方案。


今天的分享就到这里,喜欢本次分享请给我点赞~谢谢大家!有什么问题可以在评论区讨论。

相关推荐


推荐文章



近期活动



点击【阅读原文】进入干货密道

以上是关于华为资深架构师:Cloud Native架构一致性问题及解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Cloud Native未来值得关注的方向:Service Mesh简介

华为架构师揭秘微服务架构(单体架构与微服务架构对比)

GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘

华为云视频Cloud Native架构设计与工程实践

GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘

华为资深架构师首次开源《HarmonyOS系统学习笔记》,下载量破10W+!