近猫者喵提示您:看后求收藏(棉花糖小说网www.aaeconomics.com),接着再看更方便。

前言

在一年前我曾经有做过一些

的相关总结,现在我们再把它捡回来,重新的把一些前因后果都扯得更加明白。

一、分布式系统与

的关系

.

集中式服务

我们先从服务部署架构的发展历程说起,其实无非就是集中式和分布式,集中式就是说,什么我都是由一台机器搞定的。分布式就是多台服务器联合完成。所以在一开始的时候一般都是从一台服务器开始,将我们的服务部署上去,然后就是一些老套路,

应用就部署在

上开放

端口提供服务,然后它需要的一个数据库服务就开放

端口提供。它的优点就在于结构,部署,项目架构都比较简单。

然后再根据业务的发展去扩展,那扩展同样也可以分为两种方式,一种是横向扩展,一种为纵向扩展。既然一台搞不定,那就要不提升这个服务器的性能,要不就整多几台一起上。但是我们想想,也不是个人就会把服务器安排的服服帖帖的呀,这台机子一挂,那就全挂了。而且大型主机的购买,还有研发,维护人才,那都是得花大价钱的。这里给大家扩展一个“摩尔定律”

反正简单点来说,就是我花两倍的钱,根本买不到两倍的性能。但是横向扩展就不一样了,一个人打不过,叫多几个人一起打不就行了?

.

运动

阿里巴巴搞出来的一个口号,具体点就是

小型机,

数据库,

的高端存储,有兴趣的也可以了解一下。因为当时面临的问题是,企业如果需要提升单机处理能力,成本会很高且性价比极低。还整天怕这怕那的,一宕机就整个服务停掉。慢慢的国内很多公司跟着一起响应,分布式就起来了。

.

分布式服务

分布式系统有着它具体的定义:分布式系统是一个硬件或者软件组件分布在不同的网络计算机上,彼此之间仅通过消息传递进行通信和协调的系统。所以就是一堆计算机联合起来对外提供服务,但是对于用户来说,像是一台机子在完成这事。

特点很多,大致就是下面

个:分布:这个就是多台计算机都被放置在了不同的位置对等:集群中的多个工作节点都是一个货色,干的都一样的活儿。而且存在副本概念并发:多个机器同时操作一份数据可能会引发的数据不一致问题全局时钟:多个主机上的事件先后顺序会对结果产生影响,这也是分布式场景中非常复杂的一个问题各种故障:某节点宕机,网络不好···突发情况

.

分布式场景中经常遇到的几个问题通信异常:其实就是网络问题,导致多节点状态下数据不一致网络孤立:这个其实就是各个子网络内部正常,但是整个系统的网络是不正常的。导致局部数据不一致的问题

节点宕机问题分布式三态:成功,失败,超时这

种状态引出的各个问题。请求发送和结果响应都有可能丢失,无法确定消息是否发送/处理成功数据丢失:这个一般通过副本机制,从其它节点读取解决,或者对于有状态的节点来说丢失数据就可以通过恢复状态来解决。异常处理原则:任何在设计阶段考虑到的异常情况都必须假设一定会在实际运行中发生

.

衡量分布式系统的性能标准性能:主要就是吞吐能力,响应延迟,并发能力。系统某一时间可以处理的数据总量,通常是用系统每秒处理的总数据量衡量,而响应延迟指的是完成某一功能所需要的的时间。并发能力就是同时完成某一功能的能力,通常就是用

衡量可用性:在面对各种异常时可以正确提供服务的能力。比如我们常说的

就是指一年内只有

分钟的宕机时间。

就是

秒可扩展性:指可以通过扩大机器规模达到提高系统性能的效果

一致性:副本管理

但是这些标准都是一个方面要求太高之后会带动另外一方面变差,比如说我们需要做到高可用,可能需要多个副本,但是多个副本的状态下,对于数据的一致性又很难去做到了。然后高吞吐下又很难做到低延迟,所以我们需要针对自己的业务场景去进行考量。

.

对于一致性的扩展强一致性:写操作完成之后,读操作一定能读到最新数据,在分布式场景中这样是非常难实现的,比如

算法,

机制,

协议都是干这个事的。弱一致性:不承诺可以立即读到写入的值,也不承诺多久之后数据能够达到一致,但会尽可能的保证到某个时间级别(比如

时,

分,

秒后),数据可达到一致性状态。

它还有一个特例叫做最终一致性,就是尽可能快的保证数据的一致。但是这个快到底是多快,就没有准确定义了。好比女票想要吃到炸鸡,你给点了份外卖,可是美团骑手,饿了吗骑手也说不准什么时候送到,他只能说保证尽快送到。就这么个意思。

因为最终一致性实在是太弱了所以我们还有一些特例情况会出现读写一致性,它是指用户读取自己写入的结果永远可以第一时间看到自己更新的内容,这个就像微信朋友圈一样的,我们发出来的东西,微信是一定会让我们看到的,可是朋友们是不是你发了立刻就能看到,那可就说不准了。

还有一些单调读一致性,因果一致性就不展开说明了,有兴趣的小伙伴可以自行搜索。

总而言之,为了保证系统的高可用,防止单点故障引发的问题,并能够让分布在不同节点上的副本都能正常为用户提供服务,这时,我们的

就应运而生了。它就能帮助我们解决这个分布式系统中数据一致性的问题

需要解决这个问题我们需要了解分布式事务,分布式一致性算法,

机制,

理论,接下来我们慢慢去展开

二、分布式事务

事务:单机存储系统中用来保证存储系统的数据状态一致性,这是不是读起来有点拗口,没事,我们换个说法,广义上的事务,就是指一个事情的所有操作,要不全部成功,要不全部失败,没有中间状态。狭义一点,那就是数据库做的那些操作。特征也很简单,就是耳熟能详的

分布式系统中每个节点都仅仅知道自己的操作是否成功,但是不知道其它节点是个啥情况,这就有可能导致各节点的状态可能是不一致的,所以为了实现跨越多节点且保证事务的

时,需要引入一个协调者,然后参与事务的各个节点都叫做参与者

典型的套路就是

,接下来我们慢慢展开

.

是个什么东西

在事务的参与过程中会产生多个角色,暂时我们先这么理解,协调者负责事务的发起,而参与者负责执行事务。

假定存在上面的

个角色,分别是一个协调和两个参与,此时我们需要

执行一个事务,并且要求这个事务,要么同时成功,要么同时失败。

阶段一:执行事务

此时协调者会先发出一个命令,要求参与者

,参与者

都都去执行这个事务,但是不提交

说的再详细一点,就会产生写

的日志,锁定资源,执行事务。但是执行完了之后,直接向协调者打报告,询问一下,大哥我能提交吗?

这个在日常写

的过程中应该经常遇到,就是前面写了一大堆操作,但是等到最后一定会写一个()这样的东西,这就是所谓的执行但不提交

阶段二:提交事务

当协调者收到第一阶段中的所有事务参与者(图中的

)的反馈(这个反馈简单理解为,告诉协调者前面的第一阶段执行成功了)时,就发送命令让所有参与者提交事务。

如果要说的再细一点,那就是协调者收到反馈,且所有参与者均响应可以提交,则通知参与者进行

,否则

所以

也叫做二阶段提交,其实就是这么简单分成了两步,一步执行,一步提交。

个缺点:性能

整个流程看下来就知道这明显产生了同步阻塞,各个需要操作数据库的节点都占用了数据库的资源。只有当协调者收到所有节点都准备完毕的反馈,事务协调者才会通知

,而参与者执行完这个

的操作后,才会去释放资源。

个缺点:单点故障

那我们刚刚也知道了,协调者才是这个事务的核心。假如此时协调者故障宕机,会导致通知无法传达到参与者的问题,比如收不到那个

,整一个事务便会停滞。

个缺点:数据不一致

协调者在第二阶段会发送

。可是这并不能保证每一个节点都正常收到这个命令,所以会可能窜在,参与者

收到了命令,提交了事务,但是参与者

没有。所以网络波动是永恒的病因,你永远无法躲开这个因素。

个缺点:不存在容错机制

这个协调者需要收到所有的节点反馈准备完成才会下达

的指示,任意一个参与者的响应没有收到,协调者就会进行等待,而且只要存在一个宕机的节点,都会使得整个事务失败回滚。

.

是个啥东西

的前提下进行了一个改良,将

中的准备阶段进行拆分,形成,,三个阶段。

并且引入超时机制,一旦事务参与者在指定时间内没有收到协调者的

指令,就会自动进行本地

,解决协调者的单点故障问题

第一阶段

协调者先询问:哎你们这帮人到底能不能行?参与者就根据自身的实际情况回答

第二阶段

如果参与者都是返回同意,协调者则向所有参与者发送预提交请求,并进入准备阶段,这里的准备阶段其实就是让参与者锁定资源,等待指令的意思,然后就是事务的执行,此时也像

一样,执行但不提交。然后等待协调者的指令,此时如果迟迟等不到指令,一段时间后就会自行本地提交

但是这样也会存在弊端,比如协调者成功给

参与者都发送回滚,然后

刚好就没收到,那么

就自动提交了,所以超时机制其实并不能完全保证数据的一致性

三、分布式一致性算法

.

算法

不知道大家有没有看到我上一年的那篇从零开始的高并发(三)---

集群的搭建和

选举如果需要详细了解,推荐跳转到那篇哦。

算法是一个名字叫提出的一种基于消息传递且具有高度容错特性的一致性算法

是不是觉得绕口?没事,我们只需要知道,分布式系统中不可避免的会发生进程被

,消息延迟,重复,丢失···一系列问题,

算法就是在这些异常情况下的仍然保证数据一致性的东西。那这东西和

有啥关系呢?

是存在一个

协议的,但是这个

协议底层就是封装了

算法的。

.

中存在的角色及与

集群的关系

提议者:顾名思义就是发起提案的人接受者:它们是可以表决的,可以接受或者否决提案

学习者:提案被超过半数的接受的话,就学习这个提案

映射到

集群中,就分别是

,它们有点像是主席,人大代表,和全国老百姓的关系,主席提出一个提案,人大代表参与投票,全国老百姓被动接受,大概就是这么个感觉。相比于之前的

,它只需要半数通过即可提交。所以这种属于弱一致性,

这些就属于强一致性

.

算法

请点击这个链接,相信你一定能够很快掌握。我这里还是小小的说明一下吧,这个是一个

的形式,告诉你,

到底是个什么东西,非常好懂,我这里跳过前面的一些东西,直奔主题

这里说到了,

是实现分布式共识算法的一个协议

这里假设一个节点有

种不同的状态

第一种,

(无线条)

第二种

(虚线)

第三种,

科幻灵异推荐阅读 More+
赛博朋克之大牛骇客

赛博朋克之大牛骇客

古今狂
赛博朋克之大牛骇客简介: 未来,城市腐烂,人人沉醉于神经游戏和肉体改造,赛博网络控制一切,人类是机器的零件。 黑白战争由骇客发起,赛博红客倾巢追杀,漫游极客隔岸观火。 新纪元的皇冠已经铸起,赛博的目光望向众生。 “我需要一具血肉圣衣。” PS:本书设定虚拟网络战争+沙盘游戏+人机争霸,红客、极客与骇客统称为网络三客,从入门级阿尔法段位到大牛级欧米伽段位,共8级24段位,在此不做细述,本书轻松愉快
科幻 连载 66万字
恐怖七年

恐怖七年

亡灵的板甲
恐怖七年简介: 出租屋内,一个脸色苍白的年轻人醒来,摸了摸自己不再跳动的心脏。“这是第三个月了……”
科幻 完结 73万字
末日王牌军

末日王牌军

夜色守望
末日王牌军简介: 蓝白星,宇宙最后的希望,梦魇降临宇宙,地球守护之力开起,无数的地球强者,就在这一刻诞生。当一个人拥有了一个世界,这个世界在他的手上又会有什么样的作用?而当危机解除之后,你的选择,又会是什么?
科幻 连载 35万字
我真不是英雄

我真不是英雄

走火的气球
我真不是英雄简介: 秦慕从没想过要当一个英雄! 可当他鬼使神差的进入到一个英雄群后,他不得不当起了人们眼中的英雄。 英雄群每期会拉人进入任务世界,死者将被踢出英雄群! 完成任务则可获得积分奖励,积分可兑换各种物品和能力,隐身、意念控物、古武仙法…… 为了增加任务世界存活率,群员必须不断积累功德点,拯救各式各样的灾难! 于是,秦慕为了能更好的活下去,不断奔波在灾难第一线! ps:求收藏、推荐、打赏
科幻 连载 85万字
新新世界风云录

新新世界风云录

水木情深
新新世界风云录简介: 未来的世界是怎样的?如果有一个新的世界,那会和现在的世界有本质的不同吗。两千多年前,有人问苏格拉底战争的本质是什么?苏格拉底的回答是:国与国之间的战争或者人与人之间的冲突其本质都是人类欲望之间的纷争。随着历史车轮的滚动,到了如今这个科技发达的时代,人类的欲望减少了吗?答案不言而喻,带着这份思考,就有了《新新世界风云录》
科幻 连载 4万字
超脑基因

超脑基因

第101次战斗
超脑基因简介: 正常人的脑细胞约有150亿个,但只有大约10%被开发利用,其余大部分在休眠状态。 方浩作为方氏家族的超级天才,研制出了提高大脑利用率的“超脑基因”,就在他满怀信念,想要借此造福人类的时候,一场巨大的危机却悄悄袭来…… 这是一个有关越狱、复仇和成为别人实验品的故事。 【十年老作者回归之作】
科幻 完结 22万字