写点什么

第六周总结

用户头像
Geek_a327d3
关注
发布于: 2020 年 07 月 16 日

CAP原则



CAP原则用于描述 分布式 存储 系统

Consisteny(一致性)

一致性是指对于客户端,每次获取到的数据都是最新的。



Availability(可用性)

可用性是指每个请求都可以在合理的时间内给出响应,不保证获取的数据是最新的。



Partition tolerance(分区容错性)

分区容错性是指当出现了网络问题,系统依然可以对外正常提供服务。



CAP组合

在分布式系统中,CAP只能满足其中两个,只能满足AP或者CP。



为什么不能满足CA,在分布式系统中,存在多台机器同时提供服务。既然是多台机器,它们的通讯方式就是依靠网络,每台机器都有网线插在交换机或者路由器上,有很大的概率出现网络问题,所以P是必须的。



AP组合(可用性,分区容错性)

一般满足AP的分布式存储系统,主从复制,如图。



客户端A将X为1的值写入到存储服务器Node01,写入Node01成功后返回成功。这时Node01还没有来得及将数据同步到Node02,客户端B访问了Node02,读取不到X的值,不满足一致性。



当出现网络问题



客户端A,客户端B依然可以访问存储服务器,只是访问到的数据并不是最新的。满足可用性,满足分区容错性。



当出现服务器宕机

当Node01宕机时,Node02依然可以提供服务。满足可用性。



所以在满足可用性和分区容错性时,无法满足一致性。

CP组合(一致性,分区容错性)

如何满足一致性?一般的解决方案是双写、多写。

客户端A写入X值为1,分别向两台服务器写入,两台服务器都写入成功时,写入才算成功。写入成功后,Node01,Node02的节点数据都是最新的。



当出现网络分区或服务器宕机

客户端A写X值为1,写入到Node01成功,写入到Node02失败,Node02因网络分区或宕机时,写入无法成功,系统返回了错误,即失去了可用性。



CAP总结

常见的CP存储系统,Zookeeper(ZAB协议),Consul(Raft协议)。



基于Multi-Paxos思想实现的一致性算法,通常都是只有系统一半以上节点不可用时,系统才完全不可用,所以并不是选择了CP就一定没有可用性,只是更偏向于一致性。



主从复制的架构也只是偏向可用性,并不是完全失去了一致性,通常一个机房内的数据同步速度是非常快的,主从复制间数据的复制速度也是非常快的。



ACID原则

原子性(Atomicity)

事务要么全部完成,要么全部取消。如果事务崩溃,状态回到事务之前(事务回滚)。

例如:

批量添加了人员信息(100人),这100人要么全部添加成功,要么全部添加不上。在添加48个人时发生了异常(事务回滚),那么前面添加的那些人员全部无效。

隔离性(Isolation)

如果有两个事务同时执行(T1,T2),事务T1、T2最终执行的结果是相同的,不管T1、T2谁先结束,隔离性主要靠锁实现。



持久性(Durability)

一旦事务提交,不管发生什么,数据要保存在数据库中。数据会直接保存在硬盘上,就算是数据库重启实例,都不会丢失这个数据。



一致性(Consistency)

只有合法的数据才能写入数据库(按照关系约束,外键,函数约束)。



BASE原则

基本可用(Basically Available)

系统在出现不可预知故障时,允许损失部分可用性,如响应时间上的损失或功能上的损失。



软状态、弱状态(Soft state)

允许系统中的二数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行同步的过程存在延时。



最终一致性(Eventually consistent)

指系统中所有的数据副本,在经过一段时间同步后,最终能够达到一个一致状态,因此最终一致性的本质是需要系统保证数据能够达到一致,而不需要实时保证系统数据的强一致性。



BASE原则是CAP原则的一个补充。



分布式一致Zookeeper

分布式系统脑裂

在一个分布式系统中,不同服务获得了互相冲突的数据信息或者执行指令,导致整个集群陷入混乱,数据损坏,本称作分布式系统脑裂。



例如:

有两个服务器节点,Node01,Node02,他们的可用状态存放在一个分布式存储服务中,

这个分布式存储服务(CNode01,CNode02)是符合AP原则的,

由于出现网络分区,



CNode01服务中存放着Node01可用(实际上Node01已不可用),状态无法同步到CNode02,

CNode02存放着Node02可用(实际Node02是可用的),



客户端获取可用节点时,从CNode01获取Node01可用,从CNode02节点获取Node02可用。

同样的请求不一样的结果会导致问题。



Zookeeper是分布式协调服务,符合CP原则,可以提供强一致性的存储服务。可以解决分布式系统中的脑裂问题。



Zookeeper有哪些局限

  1. 所有的写请求都要经过Leader节点来处理,并且写请求需要集群中过半节点数写成功才可以判定为写成功。因此Zookeeper的写入速度相当于单机的写入性能。

  2. Zookeeper在Leader选举的过程中,如果要求数据的强一致性(先访问一个节点,然后调用sync方法让该节点从Leader中同步最新数据后返回),那么就无法提供服务。



用户头像

Geek_a327d3

关注

还未添加个人签名 2020.04.14 加入

还未添加个人简介

评论

发布
暂无评论
第六周总结