分布式系统基本概念(一致性、数据分布、复制策略、分布式协议)

分布式系统基本概念

异常类型

1 服务器down机(随时发生、内存数据丢失(因此需要考虑数据持久化)、down机重启之后要恢复内存信息)

2 网络异常(消息丢失、消息乱序(UDP)或者网络包数据错误、区域内可通信区域间不可通信)

3 磁盘故障(磁盘损坏(备份)、磁盘数据错误(校验和解决))

超时?不能简单的当做失败(分布式存储的3态成功、失败、超时)

一致性

副本是分布式存储系统容错技术的唯一手段

保证副本之间的一致性是整个分布式系统的理论核心

两个角度理解:

1 用户角度:

(1)强一致性:A写完,A、B、C后续都读到最新

(2)弱一致性:不能保证

(3)最终一致性:弱一致性的特例。A写入,保证后续如果没有写操作更新同样的值,A、B、C的读取“最终”都会是新值。

最终一致性:

(1)因果一致性:A通知B已经更新了一个数据项,B后续访问返回更新后的值。一次写入 将保证取代前一次写入。

(2)读写一致性:A写了新值,A的后续操作都会读取新值。(但是B、C不一定)(因果的特例)

(3)会话一致性:会话期间一致性。现有会话和原有会话之间一致性不保证。

(4)单调读一致性:A读取了某个值,后续操作不会读到更早的值。

(5)单调写一致性:多个副本的写操作的顺序与A的写顺序一样。

2 存储系统:

副本一致性:多个副本是否一致。(不一致的时间窗口)

更新顺序一致性:副本之间是否按照相同的顺序执行更新操作。

衡量指标

(1)性能:吞吐能力(QPS TPS)、响应延迟、两个要权衡不能同时满足

(2)可用性:面对异常的时候提供正常服务的能力。

(3)一致性:

(4)可扩展性:存储容量、计算量、性能。

数据分布

顺序分布、哈希分布

哈希:找出好的散列函数很难

原因

(1)如果按照值key散列,同一个用户的数据分布在多台服务器上。

(2)按照用户id散列,会出现数据倾斜(某些用户的数据量很大)

对于大用户问题:

(1)手动拆分

(2)自动拆分:对哈希作调整以达到此目的

传统哈希的问题:

(1)服务器上下线,N值变化,映射被打乱,数据重新分布(将会带来数据迁移)

(2)不迁移数据的话命中率急剧下降

解决办法:

(1)将哈希值与服务器的对应关系作为元数据,交给元数据服务器管理。先计算哈希值,查询元数据服务器,获得对应服务器。

(2)一致性哈希:随机分配token构成环,先计算key的哈希值,然后存放到顺时针方向第一个大于或者等于该哈希值的token所在结点。(服务器上下线只会影响环中相邻结点)

负载均衡

心跳包传输负载信息

CAP原理(CAP Theorem)

一致性(C onsistency)、可用性(A vailability)、分区容忍性(P artition tolerance)

CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。因此在进行分布式架构设计时,必须做出取舍。而对于分布式数 据系统,分区容忍性是基本要求 ,否则就失去了价值。因此设计分布式数据系统,就是在一致性和可用性之间取一个平衡。

复制策略

强同步复制 异步复制

二者的区别在于用户的写请求是否需要同步到备副本才可以返回成功

一致性与可用性是矛盾的,强同步保证副本间的一致性,但是如果备副本出现故障,也可能阻塞存储系统的正常写服务,可用性受影响。

异步不保证一致性,主副本出现故障有可能丢失数据。

容错

故障检测 通过租约协议实现

1 心跳 (1)有可能A、B之间发生网络问题 (2)机器B过于繁忙无法响应

2 租约机制 就是带有时间限制的授权 B在租约有效期内允许提供服务,快到期时重新申请,过期认为是发生故障

故障恢复
迁移服务

分布式协议

两阶段提交协议

(1)请求阶段 协调者通知参与者准备提交或者取消事务 同意或者取消

(2)提交阶段 提交或者取消 所有的参与者都同意才执行

问题:

(1)事务参与者发生故障

设置超时时间 超时不响应就失败

(2)协调者发生故障

协调者将相关操作记录信息同步到备用协调者 发生故障后切换

paxos协议

在paxos算法中,分为4种角色:

Proposer :提议者

Acceptor:决策者

Client:产生议题者

Learner:最终决策学习者

上面4种角色中,提议者和决策者是很重要的,其他的2个角色在整个算法中应该算做打酱油的,Proposer就像Client的使者,由Proposer使者拿着Client的议题去向Acceptor提议,让Acceptor来决策。这里上面出现了个新名词:最终决策。现在来系统的介绍一下paxos算法中所有的行为:

  1. Proposer提出议题
  2. Acceptor初步接受 或者 Acceptor初步不接受
  3. 如果上一步Acceptor初步接受则Proposer再次向Acceptor确认是否最终接受
  4. Acceptor 最终接受 或者Acceptor 最终不接受

上面Learner最终学习的目标是Acceptor们最终接受了什么议题?注意,这里是向所有Acceptor学习,如果有多数派个Acceptor最终接受了某提议,那就得到了最终的结果,算法的目的就达到了。画一幅图来更加直观:

为什么需要3个Acceptor?因为Acceptor必须是最少大于等于3个,并且必须是奇数个,因为要形成多数派嘛,如果是偶数个,比如4个,2个接受2个不接受,各执己见,没法搞下去了。

为什么是3个Proposer? 其实无所谓是多少个了,1~n 都可以的;如果是1个proposer,毫无竞争压力,很顺利的完成2阶段提交,Acceptor们最终批准了事。如果是多个proposer就比较复杂了,请继续看。

上面的图中是画了很多节点的,每个节点需要一台机器么?答案是不需要的,上面的图是逻辑图,物理中,可以将Acceptor和Proposer以及Client放到一台机器上,只是使用了不同的端口号罢了,Acceptor们启动不同端口的TCP监听,Proposer来主动连接即可;完全可以将Client、Proposer、Acceptor、Learner合并到一个程序里面;这里举一个例子:比如开发一个JOB程序,JOB程序部署在多台服务器上(数量为奇数),这些JOB有可能同时处理一项任务,现在使用paxos算法让这些JOB自己来商量由谁(哪台机器)来处理这项任务,这样JOB程序里就需要包含Client、Proposer、Acceptor、Learner这4大功能,并且需要配置其他JOB服务器的IP地址。

再举一个例子,zookeeper常常用来做分布式事务锁。Zookeeper所使用的zad协议也是类似paxos协议的。所有分布式自协商一致性算法都是paxos算法的简化或者变种。Client是使用zookeeper服务的机器,Zookeeper自身包含了Acceptor, Proposer, Learner。Zookeeper领导选举就是paxos过程,还有Client对Zookeeper写Znode时,也是要进行Paxos过程的,因为不同Client可能连接不同的Zookeeper服务器来写Znode,到底哪个Client才能写成功?需要依靠Zookeeper的paxos保证一致性,写成功Znode的Client自然就是被最终接受了,Znode包含了写入Client的IP与端口,其他的Client也可以读取到这个Znode来进行Learner。也就是说在Zookeeper自身包含了Learner(因为Zookeeper为了保证自身的一致性而会进行领导选举,所以需要有Learner的内部机制,多个Zookeeper服务器之间需要知道现在谁是领导了),Client端也可以Learner,Learner是广义的。

现在通过一则故事来学习paxos的算法的流程(2阶段提交),有2个Client(老板,老板之间是竞争关系)和3个Acceptor(政府官员):

  1. 现在需要对一项议题来进行paxos过程,议题是“A项目我要中标!”,这里的“我”指每个带着他的秘书Proposer的Client老板。
  2. Proposer当然听老板的话了,赶紧带着议题和现金去找Acceptor政府官员。
  3. 作为政府官员,当然想谁给的钱多就把项目给谁。
  4. Proposer-1小姐带着现金同时找到了Acceptor-1~Acceptor-3官员,1与2号官员分别收取了10比特币,找到第3号官员时,没想到遭到了3号官员的鄙视,3号官员告诉她,Proposer-2给了11比特币。不过没关系,Proposer-1已经得到了1,2两个官员的认可,形成了多数派(如果没有形成多数派,Proposer-1会去银行提款在来找官员们给每人20比特币,这个过程一直重复每次+10比特币,直到多数派的形成),满意的找老板复命去了,但是此时Proposer-2保镖找到了1,2号官员,分别给了他们11比特币,1,2号官员的态度立刻转变,都说Proposer-2的老板懂事,这下子Proposer-2放心了,搞定了3个官员,找老板复命去了,当然这个过程是第一阶段提交,只是官员们初步接受贿赂而已。故事中的比特币是编号,议题是value。

    这个过程保证了在某一时刻,某一个proposer的议题会形成一个多数派进行初步支持;

  5. 现在进入第二阶段提交,现在proposer-1小姐使用分身术(多线程并发)分了3个自己分别去找3位官员,最先找到了1号官员签合同,遭到了1号官员的鄙视,1号官员告诉他proposer-2先生给了他11比特币,因为上一条规则的性质proposer-1小姐知道proposer-2第一阶段在她之后又形成了多数派(至少有2位官员的赃款被更新了);此时她赶紧去提款准备重新贿赂这3个官员(重新进入第一阶段),每人20比特币。刚给1号官员20比特币,
1号官员很高兴初步接受了议题,还没来得及见到2,3号官员的时候

这时proposer-2先生也使用分身术分别找3位官员(注意这里是proposer-2的第二阶段),被第1号官员拒绝了告诉他收到了20比特币,第2,3号官员顺利签了合同,这时2,3号官员记录client-2老板用了11比特币中标,因为形成了多数派,所以最终接受了Client2老板中标这个议题,对于proposer-2先生已经出色的完成了工作;

这时proposer-1小姐找到了2号官员,官员告诉她合同已经签了,将合同给她看,proposer-1小姐是一个没有什么职业操守的聪明人,觉得跟Client1老板混没什么前途,所以将自己的议题修改为“Client2老板中标”,并且给了2号官员20比特币,这样形成了一个多数派。顺利的再次进入第二阶段。由于此时没有人竞争了,顺利的找3位官员签合同,3位官员看到议题与上次一次的合同是一致的,所以最终接受了,形成了多数派,proposer-1小姐跳槽到Client2老板的公司去了。

  Paxos过程结束了,这样,一致性得到了保证,算法运行到最后所有的proposer都投“client2中标”所有的acceptor都接受这个议题,也就是说在最初的第二阶段,议题是先入为主的,谁先占了先机,后面的proposer在第一阶段就会学习到这个议题而修改自己本身的议题,因为这样没职业操守,才能让一致性得到保证,这就是paxos算法的一个过程。原来paxos算法里的角色都是这样的不靠谱,不过没关系,结果靠谱就可以了。该算法就是为了追求结果的一致性。

时间: 2024-08-04 13:17:11

分布式系统基本概念(一致性、数据分布、复制策略、分布式协议)的相关文章

如何解决分布式系统数据事务一致性问题(HBase加Solr)

如何解决分布式系统数据事务一致性问题 (HBase加Solr) 摘要:对于所有的分布式系统,我想事务一致性问题是极其非常重要的问题,因为它直接影响到系统的可用性.本文以下所述所要解决的问题是:对于入HBase和Solr的过程,如何保证HBase中写入的数据与Solr中写入的数据完全一致. 关键词:HBase, Solr, 分布式, 事务, 系统架构, 大数据 作者:王安琪(博客:http://www.cnblogs.com/wgp13x/) 一.关于分布式系统事务一致性问题 Java 中有三种可

Hadoop概念学习系列之Hadoop集群动态增加新节点或删除已有某节点及复制策略导向

hadoop-2.6.0动态添加新节点 https://blog.csdn.net/baidu_25820069/article/details/52225216 Hadoop集群动态增加新节点 一.在新增节点配置运行环境 1.安装和其他节点相同的java环境,jdk版本要相同. 2.修改/etc/hosts配置文件,添加ip与hostname的对应关系并分发到集群各个节点. 3.关闭防火墙.相关软件工具的安装等. 4.配置ssh免密码登录,使新增节点和集群其他节点能实现免密码登录. 5.修改s

TIDB 架构及分布式协议Paxos和Raft对比

近来newsql大热,尤以TIDB最火,pingcap不断打磨TiDB,现如今版本已经迭代到3.0,产品已经基本趋于成熟.对于TiDB,整体架构图如下图所示是由四个模块组成,TiDB Server,PD Server,TiKV Server,TiSpark. TiDB Server负责接受SQL请求,处理SQL的相关逻辑,并通过PD找到存储计算所需数据的TiKV地址,与TiKV交互获取数据,最终返回结果.TiDB Server是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过

分布式系统阅读笔记(十二)-----分布式文件系统

一.介绍 一个分布式系统本质上就是一段程序能够存储和访问远程文件就像访问本地文件类似,能够允许任何连上网络上的用户都可以访问.在后面的记录中,主要是对2大文件系统NFS和AFS做详细的介绍和分析. 1.文件系统在最初的设计时往往是按照中心结点服务的方式构建,在中心节点服务器中保持着大量的文件资源. 2.对于文件系统的分块有下面的分法:1.目录模块.2.文件模块.3.访问控制模块.4.文件访问模块.5.Block文件块模块.6.设备模块,主要指的是磁盘IO,和缓存. 3.文件系统的作用主要有:组织

分布式系统中的一致性协议

前言 在分布式系统设计的过程中,我们需要考虑cap理论的指导思想,如下图所示,P分区容错性,考虑到分布式系统部署在多个结点上,因此分区容错性是分布式系统的最基本要具备的.因此我们只能在一致性和可用性之间作权衡.于是就出现了很多一致性协议.著名的协议有二阶段提交协议,三阶段提交协议和Paxos算法.本文主要介绍二阶段提交协议和三阶段提交协议的理论基础. 基本概念 ①二阶段提交. 2pc,是two-phase-commit的缩写,即二阶段提交.二阶段分为提交事务请求.执行事务提交. ②三阶段提交 3

分布式系统常见概念

一.事物 事务是以可控的方式对数据资源进行访问的一组操作. 二.事物的四个特征-ACID 要注意的是事务能够通过AID来保证这个C的过程,C是目的,AID都是手段. ① Atomic原子性 事务必须是一个原子的操作序列集合,即可以是一个操作,也可以是多个操作.在这个事物执行的过程中,要么全部成功,则整个事物全部成功,如果有一项失败,则全部失败,整个事物回滚. ② Consistency 指系统从一个正确的状态,迁移到另一个正确的状态.即事物在执行前后,数据库都必须满足一条系统设置的约束条件,它依

分布式系统中有关一致性的理解

首先什么是一致性? 一致性就是分布式系统中相互独立多个节点就某个值达成一致. 具体可分为强一致性和弱一致性. 强一致性:在任意时刻,所有节点中的数据是一样的.同一时间点,你在节点A中获取到key1的值与在节点B中获取到key1的值应该都是一样的. 弱一致性:不保证任意时刻所有节点数据一样,有很多不同实现.最广泛实现的是最终一致性.所谓最终一致性,就是不保证在任意时刻任意节点上的同一份数据都是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化.也可以简单的理解为在一段时间后,

分布式系统中的一致性hash初探

在分布式式系统中,为了分散访问压力,每个模块需要由多个节点组成集群,共同来提供服务,客户端根据一定的负载均衡策略来访问集群的各个节点,由此引入了一些问题,如在访问压力增大的情况需要要增加节点,或是集群其中的一个节点突然挂掉,如何将原有节点上的请求压力重新负载到新的节点集群上. 我们常用的负载均衡策略有随机(加权).轮询,最小连接数.最短响应时间,哈希,以及我们今天要说的一致性hash. 一.一致性hash与其他负载均衡策略的对比 首先我们来分析下一致性hash相对前面几种负载均衡策略的优势, 轮

分布式系统阅读笔记(二十)-----分布式多媒体系统

介绍 现在的分布式系统大有越来越往分布式多媒体系统的应用上走的趋势了.多媒体的应用本质上是对于持续数据流的一种消耗.包括音频以及视频,音频是由一个个audio Sample组成,而视频则是video frame组成.有时因为网络条件的原因,他是可以允许部分的延时的,延时造成的丢包率在一定比率上也是可以接受的.在多媒体应用中,很在意的quality of service服务质量的要求,因此他这里需要Qos Manager的角色. 1.分布式多媒体的应用往往是要求是实时的,这就要求系统对于QoS的控