高并发与一致性算法

🍒高并发与一致性算法



一、🥭磁盘阵列

Raid简介:将数据存放在多块磁盘肯定能解决IO瓶颈的问题.磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。磁盘阵列还能利用同位检查(Parity Check)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中(文尾有精美壁纸一份)

在这里插入图片描述


1、条带化

大多数磁盘对IO操作有着次数限制,一旦高并发的情况下,超过最大限制,剩余进程就会进入等待,这也就是磁盘冲突

解决方案:

通过条带化,将连续的数据进行细小划分,存到不同的磁盘中,实现了多进程访问堵塞的情况

在这里插入图片描述


2、Raid0

Raid0:低成本,高读写性能,存储空间利用率100%,但不提供数据冗余保护,一旦数据丢失无法恢复。

在这里插入图片描述


3、Raid1

Raid1:又称镜像磁盘,将存储方式分为工作磁盘和镜像磁盘,空间利用率50%,写数据会有影响,读速度没影响,并且一旦工作磁盘丢失数据,可以从镜像磁盘直接拷贝

在这里插入图片描述


4、Raid2

Raid2:海明码磁盘冗余阵列,通过海明码进行数据的校验,所以导致Raid2空间开销较大,海明码位运算,效率低

在这里插入图片描述

5、Raid3

Raid3: 采用并行访问磁盘阵列,专门一个磁盘用来做数据校验,其余磁盘作为数据存储盘,以位和字节交叉存储。RAID3 至少需要三块磁盘,不同磁盘上同一带区的数据作 XOR 校验,校验值写入校验盘中。
RAID3 完好时读性能与 RAID0 完全一致,并行从多个磁盘条带读取数据,性能非常高,同时还提供了数据容错能力。
RAID3 写入数据时,必须计算与所有同条带的校验值,并将新校验值写入校验盘中。
一次写操作包含了写数据块、读取同条带的数据块、计算校验值、写入校验值等多个操作,系统开销非常大,性能较低。如果 RAID3 中某一磁盘出现故障,不会影响数据读取,可以借助校验数据和其他完好数据重建数据

在这里插入图片描述

6、Raid4

RAID4 与 RAID3 的原理大致相同,区别在于条带化的方式不同。
RAID4 按照块的方式来组织数据,写操作只涉及当前数据盘和校验盘两个盘,多个 I/O 请求可以同
时得到处理,提高了系统性能。
RAID4 按块存储可以保证单块的完整性,可以避免受到其他磁盘上同条带产生的不利影响。
RAID4 提供了非常好的读性能,但单一的校验盘往往成为系统性能的瓶颈。

在这里插入图片描述

7、Raid5

RAID5 应该是目前最常见的 RAID 等级,它的校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。对于数据和校验数据,它们的写操作可以同时发生在完全不同的磁盘上。
RAID5 还具备很好的扩展性。当阵列磁盘 数量增加时,并行操作量的能力也随之增长
RAID5 当一个数据盘损坏时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据重建数据时, RAID5 的性能会受到较大的影响

在这里插入图片描述

8、Raid6

RAID6 引入双重校验的概念,它可以保护阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。
RAID6 不仅要支持数据的恢复,还要支持校验数据的恢复,因此实现代价很高,控制器的设计也比其他等级更复杂、更昂贵。
RAID6 思想最常见的实现方式是采用两个独立的校验算法,假设称为 P 和 Q ,校验数据可以分别存储在两个不同的校验盘上,或者分散存储在所有成员磁盘中。
RAID6 具有快速的读取性能、更高的容错能力。但是,它的成本要高于 RAID5 许多,写性能也较差,并有设计和实施非常复杂。

在这里插入图片描述


二、🥭 数据的一致性

数据的一致性分为三种:强一致性,弱一致性,最终一致性

  • 强一致性

    • 要求无论更新操作实在哪一个副本执行,之后所有的读操作都要能获得最新的数据。
  • 弱一致性

    • 用户读到某一操作对系统特定数据的更新需要一段时间,我们称这段时间为“不一致性窗口”。
  • 最终一致性

    • 是弱一致性的一种特例,保证用户最终能够读取到某操作对系统特定数据的更新。
    • 从客户端来看,有可能暂时获取的不是最新的数据,但是最终还是能访问到最新的
    • 从服务端来看,数据存储并复制到分布到整个系统超过半数的节点,以保证数据最终一致。

最终一致性包含:因果一致,读己之所写一致性,会话一致性,单调读一致性,单调写一致性


三、🥭CAP原则

鱼和熊掌不可兼得,有得必有失:CAP定理认为:一个提供数据服务的存储系统无法同时满足数据一致性、数据可用性、分区容忍性。

在这里插入图片描述

在这里插入图片描述


Consistency:
    一致性,这个和数据库ACID的一致性类似,但这里关注的所有数据节点上的数据一致性和正
确性,而数据库的ACID关注的是在在一个事务内,对数据的一些约束。
系统在执行过某项操作后仍然处于一致的状态。在分布式系统中,更新操作执行成功后所有的
用户都应该读取到最新值。
Availability:
    可用性,每一个操作总是能够在一定时间内返回结果。需要注意“一定时间”和“返回结果”。
“一定时间”是指系统结果必须在给定时间内返回。
“返回结果”是指系统返回操作成功或失败的结果。
Partition Tolerance:
    分区容忍性,是否可以对数据进行分区。这是考虑到性能和可伸缩性。


四、 🥭Paxos算法

1、无主模型

算法描述
Paxos描述了这样一个场景,有一个叫做Paxos的小岛(Island)上面住了一批居民,岛上面所有的事情由一些特殊的人决定,他们叫做议员(Senator)。议员的总数(Senator Count)是确定的,不能更改。岛上每次环境事务的变更都需要通过一个提议(Proposal),每个提议都有一个编号(PID),这个编号是一直增长的,不能倒退。每个提议都需要超过半数((Senator Count)/2 +1)的议员同意才能生效。每个议员只会同意大于当前编号的提议,包括已生效的和未生效的。如果议员收到小于等于当前编号的提议,他会拒绝,并告知对方:你的提议已经有人提过了。这里的当前编号是每个议员在自己记事本上面记录的编号,他不断更新这个编号。整个议会不能保证所有议员记事本上的编号总是相同的。现在议会有一个目标:保证所有的议员对于提议都能达成一致的看法。现在议会开始运作,所有议员一开始记事本上面记录的编号都是0。有一个议员发了一个提议:将电费设定为1元/度。他首先看了一下记事本,嗯,当前提议编号是0,那么我的这个提议的编号就是1,于是他给所有议员发消息:1号提议,设定电费1元/度。其他议员收到消息以后查了一下记事本,哦,当前提议编号是0,这个提议可接受,于是他记录下这个提议并回复:我接受你的1号提议,同时他在记事本上记录:当前提议编号为1。发起提议的议员收到了超过半数的回复,立即给所有人发通知:1号提议生效!收
到的议员会修改他的记事本,将1好提议由记录改成正式的法令,当有人问他电费为多少时,他会查看法令并告诉对方:1元/度。现在看冲突的解决:假设总共有三个议员S1-S3,S1和S2同时发起了一个提议:1号提议,设定电费。S1想设为1元/度, S2想设为2元/度。结果S3先收到了S1的提议,于是他做了和前面同样的操作。紧接着他又收到了S2的提议,结果他一查记事本,咦,这个提议的编号小于等于我的当前编号1,于是他拒绝了这个提议:对不起,这个提议先前提过了。于是S2的提议被拒绝,S1正式发布了提议: 1号提议生效。S2向S1或者S3打听并更新了1号法令的内容,然后他可以选择继续发起2号提议。


通俗理解:小岛:分布式环境,普通人:客户端。议员就是集群节点,提议就是一次修改请求,当提议投票大于一半议员人数+1,便通过。最终结果一致性


在这里插入图片描述


2、有主模型

如果Paxos岛上的议员人人平等,在某种情况下会由于提议的冲突而产生一个“活锁”(所谓活锁我的理解是大家都没有死,都在动,但是一直解决不了冲突问题)。Paxos的作者在所有议员中设立一个总统,只有总统有权发出提议,如果议员有自己的提议,必须发给总统并由总统来提出。
情况一:屁民甲(Client)到某个议员(ZK Server)那里询问(Get)某条法令的情况(ZNode的数据),议员毫不犹豫的拿出他的记事本(local storage),查阅法令并告诉他结果,同时声明:我的数据不一定是最新的。你想要最新的数据?没问题,等着,等我找总统Sync一下再告诉你。
情况二:屁民乙(Client)到某个议员(ZK Server)那里要求政府归还欠他的一万元钱,议员让他在办公室等着,自己将问题反映给了总统,总统询问所有议员的意见,多数议员表示欠屁民的钱一定要还,于是总统发表声明,从国库中拿出一万元还债,国库总资产由100万变成99万。屁民乙拿到钱回去了(Client函数返回)。
情况三:总统突然挂了,议员接二连三的发现联系不上总统,于是各自发表声明,推选新的总统,总统大选期间政府停业,拒绝屁民的请求

通俗理解:再原有基础上增加了一个总统,议员没有提出法令的权利,只有总统才能进行法令的提出权力,议员只有对法令的投票权限,并且最后结果也是有总统进行广播,总统死掉则由剩余议员选举,数据全的议员优先,在是编号大的优先。

在这里插入图片描述


五、🥭Raft算法

Raft 适用于一个管理日志一致性的协议,相比于 Paxos 协议 Raft 更易于理解和去实现它。
Raft 将一致性算法分为了几个部分,包括领导选取(leader selection)、日志复制(log
replication)、安全(safety)官方解析很透彻–>


在这里插入图片描述


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
掌握数据结构和算法,可称为算法工程师!这是成为架构师的基础,有Google算法大神亲授。我保证你可以写出时空复杂度都很优的架构。有人专门答疑哟!你想要成为架构工程师吗?立即点击报名按钮吧!北上广容不下肉身,三四线放不下灵魂,程序员里没有穷人,有一种土豪叫 算法工程师。程序 = 数据结构 + 算法程序是为了解决实际问题而存在的。然而为了解决问题,必定会使用到某些数据结构以及设计一个解决这种数据结构的算法。如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功。编程实战算法,不是念PPT,我们讲的就是实战与代码实现与企业应用。程序 = 数据结构 + 算法           ——图灵奖得主,计算机科学家N.Wirth(沃斯)作为程序员,我们做机器学习也好,做python开发也好,java开发也好。有一种对所有程序员无一例外的刚需 —— 算法与数据结构日常增删改查 + 粘贴复制 + 搜索引擎可以实现很多东西。同样,这样也是没有任何竞争力的。我们只可以粘贴复制相似度极高的功能,稍复杂的逻辑没有任何办法。语言有很多,开发框架更是日新月异3个月不学就落后我们可以学习很多语言,很多框架,但招聘不会考你用5种语言10种框架实现同一个功能。真正让程序员有区分度,企业招聘万年不变的重点 —— 算法与数据结构。算法代表程序员水平的珠穆朗玛。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每日小新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值